手動用戶界面測試是一種最基本的軟件測試類型
大多數軟件工程師首次采用的就是這種測試類型
與此矛盾的是
自動化用戶界面測試可能是編寫的測試類型中最具技術挑戰的一種
Microsoft?
NET 環境為您提供了許多編寫自動用戶界面測試自動化的方式
一種常見而有用的方法是記錄擊鍵
鼠標移動和單擊
然後在應用程序中回放以確保它以預期方式執行
(有關這種方法的詳細信息
請參見 MSDN?Magazine
年
月號中 John Robbins 的 Bugslayer 專欄
這一期 MSDN Magazine 的 Paul DiLascia 專欄也闡釋了如何使用
NET 將這種類型的輸入發送到另一個應用程序中
)在本月的專欄中
我將探討為
NET 應用程序編寫輕量級 UI 測試自動化的另一種方法
最好的方式是以一個屏幕快照開始進行討論
圖
顯示我有一個虛擬應用程序要進行測試
它是一個顏色合成器應用程序
允許用戶在文本框控件中鍵入一種顏色
然後在 Combobox 中鍵入或選擇一種顏色
單擊按鈕
Listbox 就會顯示一條消息
表明兩種顏色
混合
的結果
在圖
中
根據應用程序
紅色和藍色會產生紫色
UI 測試自動化是一個控制台應用程序
它啟動一個待測試窗體
模擬用戶移動應用程序窗體
定義和調整應用程序窗體的大小
設置文本框和 Combobox 控件的值
並單擊按鈕控件
測試自動化檢查測試應用程序的結果狀態
驗證 Listbox 控件包含正確的消息
並記錄
pass
結果
圖
中的屏幕快照是在測試自動化模擬用戶單擊關閉測試應用程序的 File | Exit 之前捕獲的
在本篇文件中
我們將討論編程人員在使用ASP
NET開發應用程序時需要注意的
個技巧
這些技巧涉及從缺省的控件
表單名的改變到StringBuilder類的使用
有助於編程人員能夠盡快地適應
NET環境
在使用Visual Studio NET時除直接或非引用的對象外不要使用缺省的名字 NET帶來的好處之一是所有的源代碼和配置文件都是純文本文件
能夠使用Notepad或WordPad等任意的文本編輯器進行編輯
如果不願意
我們並非一定要使用Visual Studio
NET作為集成開發環境
但使用了Visual Studio
NET
我們可以在Windows文件管理器中看到文件
或在Visual Studio
NET之外從文本編輯器中浏覽文件的內容
使用Visual Studio
NET作為集成開發環境有許多好處
其中最顯著的好處是它極大地提高了生產效率
使用Visual Studio
NET
我們能夠在付出較小代價的情況下更快地開發軟件
作為集成開發環境一部分的IntelliSense提供自動的代碼完成
在輸入方法或函數時提供動態幫助
語法錯誤的實時提示
以及其他能夠提高生產效率的功能
象其他復雜的工具那樣
在學會如何充分發揮它的作用和掌握其
習性
前
Visual Studio
NET也會使我們產生一種挫折感
有時
它象一個難以了解的黑盒子
會生成大量的文件和許多無用的代碼
Visual Studio
NET的一個功能是
無論是類
控件或表單中的對象
它都能夠為新對象提供缺省名字
例如
如果我們創建了一個新的ASP
NET Web Application
其缺省的名字將是WebApplication
我們可以在
新工程
對話框中方便地改變該應用的名字
但同時改變的只是該應用程序的名字空間的名字及其所在的虛擬目錄
源代碼文件的缺省名字仍然是WebForm
aspx和WebForm
aspx
cs(C#工程)或WebForm
aspx
vb(VB
NET工程)
我們可以在方案浏覽器中改變ASPX和代碼使用的文件名字
但Web頁類的名字仍然將是WebForm
如果在該Web表單上生成一個按鈕
其缺省的名字將是Button
事實上
所有控件的名字都是由控件的類型和數字組成的
我們能夠
也應該將應用程序中所有的表單和控件的名字都修改成有意義的名字
對於較小的演示性程序而言
缺省的名字還能夠勝任
但如果應用程序由多個表單
每個表單上有許多按鈕和標簽時
象frmStartup
frmDataEntry和frmReports這樣的表單名就比Form
Form
和Form
這樣的名字更易於理解和維護
如果表單上控件要在代碼的其他地方引用
使它有一個有意義的名字就更重要了
btnOK
btnCancel和btnPrint這樣的名字使看代碼的人更容易理解
因而
也比名字為Button
Button
Button
這樣的控件更容易維護
修改一個工程中所有文件中出現的一個名字的一個好方法是
在Visual Studio
NET菜單中依次選擇
編輯
>
發現和替換
>
替換
命令
在看二周前編寫的代碼時
我們經常就象第一次見到這些代碼一樣
因此使它們有一個有助於我們理解其含義的名字是十分有必要的
即使不使用Visual Studio NET進行編程使用代碼支持文件也有利於提高應用程序的性能 在Web應用程序
Web服務或Web控件等所有的ASP
NET Web工程中
Visual Studio
NET都使用代碼支持文件
代碼支持文件使工程具有更好的組織
模塊性
更適合多人組成的開發團隊
另外
它還會帶來性能的提高
代碼支持文件的內容被編譯成一個組合文件中的類
一般是一個DLL文件
有時也可以是EXE文件
該文件駐留在應用程序的組合體高速緩沖區中
在應用程序啟動時
可以立即得到它
如果代碼是包含在<script>標記中或ASPX文件代碼中
它仍然會被編譯成一個Web頁類
在這種情況下
每當該網頁在應用程序對話中第一次加載時
都需要重新進行編譯
被編譯的類就會駐留在內存中
每當計算機啟動
IIS停止
重新啟動或者源代碼
配置文件改變時
該文件必須重新編譯
盡管不大
但這樣引起的性能損耗也是相當可觀的
盡量減少表單回送 每當點擊Web網頁上的Button
LinkButton或ImageButton控件時
表單就會被發送到服務器上
如果控件的AutoPostBack屬性被設置為true
如果CheckBox
CheckBoxList等控件的狀態被改變後
也會使表單會發送回服務器
每次當表單被發送回服務器
就會被重新加載
啟動Page_Load事件
執行Page_Load事件處理程序中的所有代碼
把網頁的初始化代碼放在這裡是最合適不過的了
我們經常會希望在每次加載網頁時執行一些代碼
而希望只有在網頁第一次加載時執行另一些代碼
甚至希望一些代碼在除首次加載外的每次加載時執行
可以利用IsPostBack特性來完成這一功能
在網頁第一次加載時
該屬性的值是false
如果網頁因回送而被重新加載
IsPostBack屬性的值就會被設置為true
通過測試
可以在任意時候執行指定的代碼
下面是相關的C#代碼
protected void Page_Load(Object sender
EventArgs e)
{
// 網頁每次加載時
執行的一些操作
if (!IsPostBack)
{
// 網頁第一次加載時執行的操作
}
else
{
// 回送時執行的操作
}
// 網頁每次加載時執行的操作
}
我們希望盡量不引起回送(每次回送都會要求服務器進行一系列的操作)
即使引起回送後
也希望能夠執行盡量少的操作
大規模
浪費時間的操作(例如數據庫查找)尤其應當避免
因為它們能夠延長應用程序的響應時間
使用StringBuilder類 字符串在
NET框架中是不可變的
這意味著改變字符串的操作符和方法會返回字符串的改變後的拷貝
這意味著性能還有提高的空間
當進行大量的字符串操作時
使用StringBuilder類就是一種比較好的選擇了
下面的C#代碼測試用二種方式從
個子字符串中生成字符串所需要的時間
第一次使用了一個簡單的字符串串聯操作
第二次使用了StringBuilder類
要想查看結果字符串
可以去掉下面的代碼中注解行的注解符號
<%@ Page Language=
C#
%>
<script runat=
server
>
void Page_Load(Object Source
EventArgs E)
{
int intLimit =
;
DateTime startTime;
DateTime endTime;
TimeSpan elapsedTime;
string strSub;
string strWhole =
;
// 首先執行字符串連接操作
startTime = DateTime
Now;
for (int i=
; i < intLimit; i++)
{
strSub = i
ToString();
strWhole = strWhole +
+ strSub;
}
endTime = DateTime
Now;
elapsedTime = endTime
startTime;
lblConcat
Text = elapsedTime
ToString();
// lblConcatString
Text = strWhole;
// 使用stringBuilder類進行同樣的操作
startTime = DateTime
Now;
StringBuilder sb = new StringBuilder();
for (int i=
; i < intLimit; i++)
{
strSub = i
ToString();
sb
Append(
);
sb
Append(strSub);
}
endTime = DateTime
Now;
elapsedTime = endTime
startTime;
lblBuild
Text = elapsedTime
ToString();
// lblBuildString
Text = sb
ToString();
}
</script>
<html>
<body>
<form runat=
server
>
<h
>String Concatenation Benchmark</h
>
Concatenation:
<asp:Label
id=
lblConcat
runat=
server
/>
<br/>
<asp:Label
id=
lblConcatString
runat=
server
/>
<br/>
<br/>
StringBuilder:
<asp:Label
id=
lblBuild
runat=
server
/>
<
From:http://tw.wingwit.com/Article/program/ASP/201311/21835.html