本文摘要:
1:測試要求
2:在VS中運行自動化測試
3:脫離VS進行自動化測試
在上一文中《C#借助API實現黑盒自動化測試工具的編寫》(http://www.cnblogs.com/luminji/archive/2010/11/03/1867730.html),我們使用WINDOWS API來實現自動化測試工具的編寫。但是,這種辦法在大型軟件測試的時候,需要很細致和繁雜的工作。在VS2010出來以後,我們不妨看看Code UI Automation這個好東西。關於Code UI Automation已經有人介紹過很多,本文要說明的重點如下:
1:使用Code UI Automation來錄制手工操作UI的動作,讓VS根據這些操作自動生成測試代碼;
2:新建WINFORM項目(也即黑盒工具),在這個WINFORM項目調用這些自動生成的代碼;
上文提到的1,之所以要讓VS自動生成代碼,是為了免去我們手動編寫測試代碼的繁雜工作。上文提到的2,是為了可以讓我們的測試工具脫離VS。
本文代碼下載:http://download.csdn.net/source/2839416
測試的要求仍舊如下,假設存在這樣一個應用程序:
1:提供一個WINFORM窗體,上面存在一個TextBox,以及一個Button;
2:點擊Button,會彈出提示框,提示框內容為TextBox的值;
現在,測試要求如下:
1:在300台機器上運行上面的程序;
2:到這300台機器上去點擊這個Button,看看上文中的功能2有沒有實現;
為了說明這個例子,我們創建了解決方案WindowsFormsApplicationTest,該解決方案共分為三個項目:
假設WindowsFormsToBeTest已經編寫完畢,運行之。現在使用TestProject1中的Code UI Automation(新建"編碼的UI測試")來錄制操作(操作過程為:在WindowsFormsToBeTest的文本框中輸入"ABC",點擊Button,彈出提示,點擊確定),然後生成代碼,如下圖:
找到生成的代碼中公開的測試方法:
[TestMethod]
public void CodedUITestMethod1()
{
this.UIMap.RecordedMethod1();
}
其實,通過查看this.UIMap.RecordedMethod1()這個方法,VS也是調用WINDOWS API來實現獲取各類控件的句柄。這個時候,如果我們在VS的測試列表編輯器中運行這個選中的測試CASE,
就會發現VS自動為我們復現了一個完整的錄制過程中的操作。如下:
接下來的工作是需要在我們自己的應用程序WindowsFormsTester中運行這個測試。
3.1:首先,我們需要在WindowsFormsTester中引用這些DLL:
它們應該是在一個類似如下的文件夾下,D:Program FilesMicrosoft Visual Studio 10.0Common7IDEPrivateAssemblies。如果不引用這些文件,編譯會通過,但是運行時會報類似如下的錯誤:未能加載文件或程序集"Microsoft.VisualStudio.TestTools.UITest.Extension.IE.Communication.Interop, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"或它的某一個依賴項。系統找不到指定的文件。
3.2:在TestProject1中提供一個類來提供一個靜態方法,如下:
public class TestInit
{
public static void Init()
{
Playback.Initialize();
}
}
要注意,這點很重要,必須運行Playback.Initialize(),不然你自己的應用程序獲取的句柄全部都是無效的。
3.3:現在,可以在WindowsFormsTester調用TestProject1中的公開方法了,如下:
TestInit.Init();
CodedUITest1 c = new CodedUITest1();
c.CodedUITestMethod1();
這樣,我們便完成了一個脫離了VS的黑盒自動化測試工具WindowsFormsTester。
借助Code UI Automation的自動生成代碼,使我們繁雜而細致的測試代碼編寫工作交給VS的測試引擎去實現,我們可以更多的將細節放在測試的業務邏輯上,而不是努力地去獲取各種控件的句柄並操作他們。
特別感謝周京生http://hi.csdn.net/space-1424875.html提供的幫助。