當前位置:首頁 » 數據倉庫 » ui自動化用例需要配置哪個id
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ui自動化用例需要配置哪個id

發布時間: 2022-11-02 09:24:39

㈠ 請問測試用例的ID號怎麼編呀

測試用例的ID是根據項目編號+模塊編號+用例編號組成.不過各個公司的規定不一樣

㈡ 如何使用UIAutomation進行iOS 自動化測試

1. 你的第一個UIAutomation測試腳本

UIAutomation的功能測試代碼是用Javascript編寫的。UIAutomation和Accessibility有著直接的關系,你將用到通過標簽和值的訪問性來獲得UI元素,同時完成相應的交互操作。

下面讓我們來編寫我們的第一段測試代碼。

使用iOS模擬器

1. 下載示例應用程序TestAutomation.xcodeproj,並打開它。這個項目是一個很簡單的包含2個tab的tabbar應用程序。
2. 確保選中如下圖所示的「TestAutomation > iPhone 5.0 Simulator」模式(或許你已經切換成5.1了,因此它可能是iPhone5.1模擬器)。
3. 啟動Instruments(Proct > Profile),或者通過⌘I。
4. 選擇左邊的iOS Simulator,然後再選擇Automation模板,然後點擊「Profile」。
5. Instruments就已經啟動好後,然後直接開始錄制了。這里先停止錄制,(紅包按鈕或者⌘R)。
6. 在左邊的Scripts窗口,點擊「Add > Create」創建新的腳本。
7. 在腳本編輯器里,輸入下面的代碼
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
target.logElementTree();
clip_image007[4]

8. 重新運行這段腳本⌘R(不需要保存)。腳本跑起來後,你可以在日誌打完後停止它。

clip_image009[4]

贊一個!我們就這樣完成了我們的第一個UIAutomation測試用例。

使用iOS設備

你除了將你的測試用例運行模擬器上,也可以將它運行在一個真實的設備上。不過,自動化測試用例只能運行在支持多任務的:iPhone 3GS,iPad,iOS > 4.0等設備上。遺憾的是不管iPhone 3G的系統版本是什麼,都不支持。

下面是如何操作:
1. 通過USB介面連接上你的iPhone。
2. 選擇 「TestAutomation > iOS Device」模式。
3. 確保Developper profile設置成Release模式(而不是Ad-Hoc Distribution profile)。默認情況下,profiling是設置成Release模式的(因為沒有必要將profile設置成Debug模式)。
4. 啟動測試
5. 後面的步驟請參考前面模擬器部分。
2. 處理UIAElement和元素可訪問性(Accessibility)

UIAElement層次結構

Accessibility和UIAutomation有密切的聯系:如果一個控制項的Accessibility是可以被訪問的,你就可以設置和讀取它的值,作相關的操作,而當一個控制項的Accessibility不可見時,你就沒有辦法通過automation訪問它。

你可以通過Interface Builder,或者通過在程序里設置isAccessibilityElement屬性的方式來設置一個控制項的Accessibility或者可被自動化。當你設置container view(即:一個視圖包含其它的UIKit元素)的accessibility時,你必須注意。你設置了整個View的accessibility將會「隱藏」它的子視圖的accessibility,例如:在示例項目中,你不能將outlet視圖設置成可訪問的,否則它所有的子控制項將都不可以訪問了。在任何時候,logElementTree都是你忠實的朋友:它將當前界面的所有可被訪問的元素都列印在日誌里。

每一個可以被訪問的UIKit控制項都可以用一個Javascript對象來描述,它就是一個UIAElement。UIAElement有幾個屬性:name, value, elements, parent。你的主窗口包含很多的控制項,它們是以UIKit層次的方式定義的,這些UIKit層次結構對應的是UIAElement的層次樹。例如:前面的測試代碼中,通過調用logElementTree,我們可以得到如下面所示的樹結構:

+- UIATarget: name:iPhone Simulator rect:{{0,0},{320,480}}

| +- UIAApplication: name:TestAutomation rect:{{0,20},{320,460}}

| | +- UIAWindow: rect:{{0,0},{320,480}}

| | | +- UIAStaticText: name:First View value:First View rect:{{54,52},{212,43}}

| | | +- UIATextField: name:User Text value:Tap Some Text Here ! rect:{{20,179},{280,31}}

| | | +- UIAStaticText: name:The text is: value:The text is: rect:{{20,231},{112,21}}

| | | +- UIAStaticText: value: rect:{{145,231},{155,21}}

| | | +- UIATabBar: rect:{{0,431},{320,49}}

| | | | +- UIAImage: rect:{{0,431},{320,49}}

| | | | +- UIAButton: name:First value:1 rect:{{2,432},{156,48}}

| | | | +- UIAButton: name:Second rect:{{162,432},{156,48}}

clip_image001[6]

你可以通過下面的代碼來訪問文本框:
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];
你可以選擇通過從0開始的索引或者這個元素的名稱來訪問這個元素,例如:你也可以通過下面的代碼來訪問文本控制項。
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()["User Text"];
後一種方式更加清晰明了,應該多使用。你可以通過Interface Builder設置UIAElement的name屬性,

clip_image002[6]

或者通過編寫代碼的方式:
myTextField.accessibilityEnabled = YES;
myTextField.accessibilityLabel = @"User Text";
你現在可以看到,通過accessibility屬性可以被UIAutomation用來找到不同的控制項。這非常的清晰,因為,第一,你只要學習一個測試框架;第二,通過編寫自動化測試代碼,你同時還可以保證你的程序是可以被訪問的。因此,每一個UIAElement對象的子控制項可以通過下面的方法進行訪問:

buttons(), images(), scrollViews(),textFields(), webViews(), segmentedControls(), sliders(), staticTexts(), switches(), tabBar(),tableViews(), textViews(), toolbar(), toolbars() 等等……

你可以通過如下代碼在tabbar上訪問第一個tab:
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];
UIAElement結構層次非常的重要,你以後會常常用到它。而且你還要記住,你可以在隨時通過調用UIAAplication的logElementTree來獲得它的結構。

UIATarget.localTarget().frontMostApp().logElementTree();
在模擬器上,你還可以激活Accessibility 的檢測器。啟動模擬器,找到「Settings > General > Accessibility > Accessibility Inspector」,然後將它設為「打開」狀態。

這個彩色的小框框就是Accessibility 檢測器了。當它收起來的時候,Accessibility就被關閉了,當它展開的時候,Accessibility就是打開的。你只要點擊上面的箭頭按鈕就可以激活或者屏蔽Accessibility。現在,打開我們的示常式序,激活檢測器。

然後,點擊文本框,檢查UIAElement的name和value屬性(其實就是accessibilityLabel和accessibilityValue對應的NSObject類型的值)。這個檢測器可以幫助你調試和編寫你的測試代碼。

模擬用戶操作

讓我們更進一步,模擬一些用戶的交互操作。你可以簡單地調用按鈕的tap()來作一個點擊操作:
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];

// Tap the tab bar !
tabButton.tap();
你還可以調用UIAButtons的doubleTap(), twoFingerTap()。如果你不想操作具體的某個元素,你也可以直接根據屏幕上指定的坐標點進行操作,你可以這么用:

UIATarget.localTarget().tap({x:100, y:200});
UIATarget.localTarget().doubleTap({x:100, y:200});
UIATarget.localTarget().twoFingerTap({x:100, y:200});
UIATarget.localTarget().pinchOpenFromToForDuration({x:20, y:200},{x:300, y:200},2);
UIATarget.localTarget().pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200},2);
拖拽與劃動:
UIATarget.localTarget().dragFromToForDuration({x:160, y:200},{x:160,y:400},1);
UIATarget.localTarget().flickFromTo({x:160, y:200},{x:160, y:400});
注意,當你指定操作的時間間隔的時候,它是有特定的范圍的,即:拖拽操作的時間間隔必須大於或者等於0.5秒,小於60秒。

現在,讓我們來練習一下:

停止Instruments (⌘R)
在Scripts窗口裡, 移除當前的腳本
點擊「Add > Import」然後選擇TestAutomation/TestUI/Test-1.js(將下面的代碼保存到這個路徑)
點擊錄制按鈕 (⌘R) 然後看看將會發生什麼…
下面是Test-1.js代碼:

var testName = "Test 1";
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
UIALogger.logStart( testName );
app.logElementTree();
//-- select the elements
UIALogger.logMessage( "Select the first tab" );
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if (selectedTabName != "First") {
tabBar.buttons()["First"].tap();
}
//-- tap on the text fiels
UIALogger.logMessage( "Tap on the text field now" );
var recipeName = "Unusually Long Name for a Recipe";
window.textFields()[0].setValue(recipeName);
target.delay( 2 );
//-- tap on the text fiels
UIALogger.logMessage( "Dismiss the keyboard" );
app.logElementTree();
app.keyboard().buttons()["return"].tap();
var textValue = window.staticTexts()["RecipeName"].value();
if (textValue === recipeName){
UIALogger.logPass( testName );
}
else{
UIALogger.logFail( testName );
}
這段腳本先啟動待測程序,然後,如果第一個tab沒有被選的話就切換到第一個tab,並將上面的文本框的值設成「Unusually Long Name for a Recipe」,接著收起虛擬鍵盤。這里有一些新的方法值得注意的:UIATarget的delay(Number timeInterval) 方法允許你在兩個操作之間做一些等待,UIALogger的logMessage( String message) 方法用來將你想列印的信息輸出到日誌上去,UIALogger的logPass(String message)方法指明你的測試腳本已經成功的完成測試了。

你還知道了如何訪問鍵盤上的按鈕,然後作點擊操作:

app.keyboard().buttons()["return"].tap();

㈢ 購物流程ui自動化用例怎麼設計

軟體自動化測試的學習步驟
大概步驟如下:
1. 做好手工測試(了解各種測試的知識)-> 2. 學習編程語言-> 3. 學習Web基礎(HTML,HTTP,CSS,DOM,Javascript)或者 學習Winform
-> 4. 學習自動化測試工具 ->5. 學習自動化測試框架 -> 6. 實現自動化測試用例 -> 7. 開發自動化測試工具 ->8. 開發自動化測試框架

自動化測試的最高境界是: 開發測試工具,設計自動化測試框架, 讓別人用。
自動化測試的本質
自動化測試的本質是:用程序測試程序。 也就是說學習「編程語言」是學習自動化測試的基礎。
很多人問小坦克我學自動化測試,應該去學什麼自動化工具。 我的回答是,第一步:應該先學習編程語言,以後再去學自動化測試工具
自動化測試是一定要寫代碼的, 編程語言水平的高低決定了自動化測試水平的高低, 有了扎實的編程技術,干什麼都可以。
學習編程語言時, 要把自己當做開發人員, 系統地學習各種編程知識。

自動化測試學習的誤區
很多新手一開始,就學習復雜的自動化測試工具, 我覺得這樣是本末倒置了。
如果不先理解HTTP協議, 就不會理解Jemeter, LoadRunner, Fiddler, SoapUI這些工具的。
如果不先理解HTML,DOM, 就不會理解Firebug 這種工具的
如果不先理解Win32 API, 就不會理解Windows 窗體自動化測試的原理的。
如果自己沒有開發過網站, 就不會理解網站的各個方面,測試起來難免有遺漏。

總之學習自動化測試,需要循序漸進, 把基礎打好。

自動化測試的職位
自動化測試工程師的職位叫做: (SDET) Software Development Engineer in Test. 專注於自動化測試
手動測試工程師叫: (STE)Software test enginer. 專注於手動測試
在微軟有很多SDET的職位,但是沒有STE的職位, STE職位一般都是外包給外包公司的, 目前自動化測試還是非常吃香的。

自動化測試分類
自動化測試也有非常多的種類,
對Web UI 的自動化測試程序
對Windows 窗體UI的自動化測試程序
API測試, 比如(測試WCF service, Web API 等)
資料庫測試, 比如測試存儲過程
介面測試 (這種只能用自動化測)
單元測試
性能測試, 性能測試都需要用到自動化

㈣ 如何使用UIAutomation進行iOS自動化測試

1. 你的第一個UIAutomation測試腳本

UIAutomation的功能測試代碼是用Javascript編寫的。UIAutomation和Accessibility有著直接的關系,你將用到通過標簽和值的訪問性來獲得UI元素,同時完成相應的交互操作。

下面讓我們來編寫我們的第一段測試代碼。

使用iOS模擬器

1. 下載示例應用程序TestAutomation.xcodeproj,並打開它。這個項目是一個很簡單的包含2個tab的tabbar應用程序。
2. 確保選中如下圖所示的「TestAutomation > iPhone 5.0 Simulator」模式(或許你已經切換成5.1了,因此它可能是iPhone5.1模擬器)。
3. 啟動Instruments(Proct > Profile),或者通過⌘I。
4. 選擇左邊的iOS Simulator,然後再選擇Automation模板,然後點擊「Profile」。
5. Instruments就已經啟動好後,然後直接開始錄制了。這里先停止錄制,(紅包按鈕或者⌘R)。
6. 在左邊的Scripts窗口,點擊「Add > Create」創建新的腳本。
7. 在腳本編輯器里,輸入下面的代碼
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
target.logElementTree();
clip_image007[4]

8. 重新運行這段腳本⌘R(不需要保存)。腳本跑起來後,你可以在日誌打完後停止它。

clip_image009[4]

贊一個!我們就這樣完成了我們的第一個UIAutomation測試用例。

使用iOS設備

你除了將你的測試用例運行模擬器上,也可以將它運行在一個真實的設備上。不過,自動化測試用例只能運行在支持多任務的:iPhone 3GS,iPad,iOS > 4.0等設備上。遺憾的是不管iPhone 3G的系統版本是什麼,都不支持。

下面是如何操作:
1. 通過USB介面連接上你的iPhone。
2. 選擇 「TestAutomation > iOS Device」模式。
3. 確保Developper profile設置成Release模式(而不是Ad-Hoc Distribution profile)。默認情況下,profiling是設置成Release模式的(因為沒有必要將profile設置成Debug模式)。
4. 啟動測試
5. 後面的步驟請參考前面模擬器部分。
2. 處理UIAElement和元素可訪問性(Accessibility)

UIAElement層次結構

Accessibility和UIAutomation有密切的聯系:如果一個控制項的Accessibility是可以被訪問的,你就可以設置和讀取它的值,作相關的操作,而當一個控制項的Accessibility不可見時,你就沒有辦法通過automation訪問它。

你可以通過Interface Builder,或者通過在程序里設置isAccessibilityElement屬性的方式來設置一個控制項的Accessibility或者可被自動化。當你設置container view(即:一個視圖包含其它的UIKit元素)的accessibility時,你必須注意。你設置了整個View的accessibility將會「隱藏」它的子視圖的accessibility,例如:在示例項目中,你不能將outlet視圖設置成可訪問的,否則它所有的子控制項將都不可以訪問了。在任何時候,logElementTree都是你忠實的朋友:它將當前界面的所有可被訪問的元素都列印在日誌里。

每一個可以被訪問的UIKit控制項都可以用一個Javascript對象來描述,它就是一個UIAElement。UIAElement有幾個屬性:name, value, elements, parent。你的主窗口包含很多的控制項,它們是以UIKit層次的方式定義的,這些UIKit層次結構對應的是UIAElement的層次樹。例如:前面的測試代碼中,通過調用logElementTree,我們可以得到如下面所示的樹結構:

+- UIATarget: name:iPhone Simulator rect:{{0,0},{320,480}}

| +- UIAApplication: name:TestAutomation rect:{{0,20},{320,460}}

| | +- UIAWindow: rect:{{0,0},{320,480}}

| | | +- UIAStaticText: name:First View value:First View rect:{{54,52},{212,43}}

| | | +- UIATextField: name:User Text value:Tap Some Text Here ! rect:{{20,179},{280,31}}

| | | +- UIAStaticText: name:The text is: value:The text is: rect:{{20,231},{112,21}}

| | | +- UIAStaticText: value: rect:{{145,231},{155,21}}

| | | +- UIATabBar: rect:{{0,431},{320,49}}

| | | | +- UIAImage: rect:{{0,431},{320,49}}

| | | | +- UIAButton: name:First value:1 rect:{{2,432},{156,48}}

| | | | +- UIAButton: name:Second rect:{{162,432},{156,48}}

clip_image001[6]

你可以通過下面的代碼來訪問文本框:
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];
你可以選擇通過從0開始的索引或者這個元素的名稱來訪問這個元素,例如:你也可以通過下面的代碼來訪問文本控制項。
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()["User Text"];
後一種方式更加清晰明了,應該多使用。你可以通過Interface Builder設置UIAElement的name屬性,

clip_image002[6]

或者通過編寫代碼的方式:
myTextField.accessibilityEnabled = YES;
myTextField.accessibilityLabel = @"User Text";
你現在可以看到,通過accessibility屬性可以被UIAutomation用來找到不同的控制項。這非常的清晰,因為,第一,你只要學習一個測試框架;第二,通過編寫自動化測試代碼,你同時還可以保證你的程序是可以被訪問的。因此,每一個UIAElement對象的子控制項可以通過下面的方法進行訪問:

buttons(), images(), scrollViews(),textFields(), webViews(), segmentedControls(), sliders(), staticTexts(), switches(), tabBar(),tableViews(), textViews(), toolbar(), toolbars() 等等……

你可以通過如下代碼在tabbar上訪問第一個tab:
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];
UIAElement結構層次非常的重要,你以後會常常用到它。而且你還要記住,你可以在隨時通過調用UIAAplication的logElementTree來獲得它的結構。

UIATarget.localTarget().frontMostApp().logElementTree();
在模擬器上,你還可以激活Accessibility 的檢測器。啟動模擬器,找到「Settings > General > Accessibility > Accessibility Inspector」,然後將它設為「打開」狀態。

這個彩色的小框框就是Accessibility 檢測器了。當它收起來的時候,Accessibility就被關閉了,當它展開的時候,Accessibility就是打開的。你只要點擊上面的箭頭按鈕就可以激活或者屏蔽Accessibility。現在,打開我們的示常式序,激活檢測器。

然後,點擊文本框,檢查UIAElement的name和value屬性(其實就是accessibilityLabel和accessibilityValue對應的NSObject類型的值)。這個檢測器可以幫助你調試和編寫你的測試代碼。

模擬用戶操作

讓我們更進一步,模擬一些用戶的交互操作。你可以簡單地調用按鈕的tap()來作一個點擊操作:
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];

// Tap the tab bar !
tabButton.tap();
你還可以調用UIAButtons的doubleTap(), twoFingerTap()。如果你不想操作具體的某個元素,你也可以直接根據屏幕上指定的坐標點進行操作,你可以這么用:

UIATarget.localTarget().tap({x:100, y:200});
UIATarget.localTarget().doubleTap({x:100, y:200});
UIATarget.localTarget().twoFingerTap({x:100, y:200});
UIATarget.localTarget().pinchOpenFromToForDuration({x:20, y:200},{x:300, y:200},2);
UIATarget.localTarget().pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200},2);
拖拽與劃動:
UIATarget.localTarget().dragFromToForDuration({x:160, y:200},{x:160,y:400},1);
UIATarget.localTarget().flickFromTo({x:160, y:200},{x:160, y:400});
注意,當你指定操作的時間間隔的時候,它是有特定的范圍的,即:拖拽操作的時間間隔必須大於或者等於0.5秒,小於60秒。

現在,讓我們來練習一下:

停止Instruments (⌘R)
在Scripts窗口裡, 移除當前的腳本
點擊「Add > Import」然後選擇TestAutomation/TestUI/Test-1.js(將下面的代碼保存到這個路徑)
點擊錄制按鈕 (⌘R) 然後看看將會發生什麼…
下面是Test-1.js代碼:

var testName = "Test 1";
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
UIALogger.logStart( testName );
app.logElementTree();
//-- select the elements
UIALogger.logMessage( "Select the first tab" );
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if (selectedTabName != "First") {
tabBar.buttons()["First"].tap();
}
//-- tap on the text fiels
UIALogger.logMessage( "Tap on the text field now" );
var recipeName = "Unusually Long Name for a Recipe";
window.textFields()[0].setValue(recipeName);
target.delay( 2 );
//-- tap on the text fiels
UIALogger.logMessage( "Dismiss the keyboard" );
app.logElementTree();
app.keyboard().buttons()["return"].tap();
var textValue = window.staticTexts()["RecipeName"].value();
if (textValue === recipeName){
UIALogger.logPass( testName );
}
else{
UIALogger.logFail( testName );
}
這段腳本先啟動待測程序,然後,如果第一個tab沒有被選的話就切換到第一個tab,並將上面的文本框的值設成「Unusually Long Name for a Recipe」,接著收起虛擬鍵盤。這里有一些新的方法值得注意的:UIATarget的delay(Number timeInterval) 方法允許你在兩個操作之間做一些等待,UIALogger的logMessage( String message) 方法用來將你想列印的信息輸出到日誌上去,UIALogger的logPass(String message)方法指明你的測試腳本已經成功的完成測試了。

你還知道了如何訪問鍵盤上的按鈕,然後作點擊操作:

app.keyboard().buttons()["return"].tap();

㈤ 應用程序的ui自動化測試使用什麼工具

曾經有一段時間,人們習慣於在MS Excel裡面編寫單元測試用例,然後開發人員就按照單元測試用例一步一步的來實現用例。這通常是很耗時的漫長的過程,尤其是如果應用很大或者UI很復雜的話。
這一套單元測試的執行過程常常成為瓶頸,因為任何代碼修改都會帶來手工執行大量單元測試,以確保新的修改沒有破壞原有功能。

如今是個快節奏時代,人們希望工作能夠無需人工介入、自動化的快速完成。每個人都喜歡執行一個命令就能把工作搞定,而且在執行期間不需要人工介入。需要做的僅僅是檢查一下最終的輸出結果。
當這個世界正在邁向自動化時,自動化測試也不甘落後,不論是在功能測試方面還是UI測試方面。每天我們都能聽說自動化測試方面涌現出的新軟體。
本文提供了一些信息給那些想用Coded UI自動測試框架來進行應用界面自動化的.Net開發者。

什麼是Coded UI?
最近我一直在尋找一個自動化的用戶介面測試的解決方案。用戶介面測試需要用戶多次進行手工輸入操作,這是一個既枯燥又費時的過程。因此,我想尋找一種更智能的自動化UI測試的方案,這種UI測試在不需要人工干預下,能夠被保存,記錄並提供支持 ,快速測試代碼的改變。
Coded UI 採用用戶介面來驅動應用的進行自動化測試。這些測試包括UI控制的功能性測試。他們使你可以驗證整個應用的功能是否正確,其中包括了用戶介面。Coded UI尤其適合用於用戶介面中存在校驗或者其它的登錄方式的測試,比如網頁。Coded UI也可以用於人工測試用例的自動化。

Coded UI 測試幫助用戶測試應用程序的用戶介面。這些測試允許用戶驗證應用程序的功能。Coded UI 多數時間用於幫助驗證在UI層本身的有效邏輯。它能夠驗證值對用戶介面的控制的正確性。
其它方案
市場有許多自動化用戶介面的方案,比如HP的QuickTest Professional, IBM Rational Functional Tester. 其它著名的,易於使用的開源工具解決用戶介面自動化問題的有Selenium,也能夠記錄測試,需要的時候回放。市場上還有來自Microsoft的也能不需要太多努力做同樣的事。用Visual Studio Microsoft還有Coded UI的方案用於單元測試。

Coded UI適合在哪兒用?

大多數安裝了Visual Studio的開發者都喜歡在Visual Studio的環境里進行單元測試,而不是使用第三方工具。由微軟提供的Coded UI,在Visual Studio環境里可謂上手即用。在開發者的機器上無需另外安裝任何東西。一旦你安裝了Visual Studio的Premium版或者Ultimate版,你就同時也安裝好了Coded UI。
Coded UI可用性

為了使用Coded UI,需要安裝Visual Studio 2010/2012/2013的Premium版或者Ultimate版。

Coded UI 測試的組成
Coded UI 測試的組成容易理解。它可分成下列文件:
UIMap.uitest
這個文件是UIMap類的XML表示。UIMap類包括視窗,控制項,屬性,方法,斷言和動作。
UIMap.cs
對UIMap的自定義部分都存在這文件里。如果修改直接存在UIMap.designer.vb文件的話,那些修改都會在記錄結束後丟失,因為這個文件重新創建了。
給每個在測應用程序中的每個模塊創建一個獨立的UIMap文件。
UIMap.Designer.cs
這是部分類表達各種類。這各種類是給多樣的控制項和他們的范圍,屬性,方法的類。
提示:不要直接修改 UIMap.Designer.cs。加入你這樣做,這個修改會被覆蓋掉。
CodedUITest.cs
這類表示的實際的CodeUI測試類,方法調用,和斷言調用,所有的方法和斷言默認都是從UIMap.Designer.cs文件調用的。這類有具有【codedUITest]屬性TestClass和包含具有【TestMethod]屬性的多種方法。

Coded UI的特性/好處

進行用戶界面測試的同時進行校驗.
生成VB.Net/C#代碼.
測試用例可以被記錄和重放.
集成了ALM Story
能夠作為每日構建的一部分來運行.
根據需要進行高級擴展.
和Visual Studio集成在一起,所以無需單獨購買許可.
Coded UI對Web和Windows應用同樣適用.
著名的Microsoft支持.
創建Coded UI測試

Coded UI測試可以用下列方式創建
使用MTM進行快速自動構建
從現有的記錄(從手動測試中記錄下來的操作)中創建Coded UI
在Coded UI Test Builder創建的底稿的基礎上創建一個新的Coded UI測試.
自己寫Coded UI.
這個白皮書的范圍僅限於「在Coded UI Test Builder創建的底稿之上創建一個新的Coded UI測試」。
小貼士: 盡量使用Coded UI Test Builder。
Coded UI Test Builder

每一個Coded UI測試的生成都需要遵從下列步驟.
記錄/停止/暫停
編輯記錄下來的步驟
添加斷言
生成代碼
創建Coded UI 測試

創建新的Coded UI 項目
要開始使用Coded UI,首先我們需要創建一個測試項目,用來保存所有Coded UI測試。創建一個新的Coded UI項目包含下列步驟
打開Visual Studio 2012
選擇 File > New > Project
選擇需要的語言模板 (C# or VB.Net). 我們選擇了C#.
選擇Coded UI Project
輸入一個名字
點擊 OK 按鈕

添加 Coded UI 測試
Visual Studio默認配置為創建Coded UI 測試使用 "Generate a new Coded UI Test from scratch using Coded UI Test Builder"
提示:在測試的應用程序中,當你創建UI控制項時盡量使用有意義的名稱,從而對於自動生成的控制項顯得更加有意義和可用。
一旦 Coded UI 測試工程創建完成,將會自動打開生成Coded UI 測試代碼的對話框,請給出以下選項的設置。
記錄操作,編輯UI地圖或添加斷言
使用一個已經存在的操作記錄
默認情況下 選擇記錄操作,編輯UI地圖或添加斷言,無需做任何操作,然後點擊 "ok"

Coded UI Test Builder
選擇了上述選項後,Coded UI Test Builder就會被打開,同時Visual Studio窗口被最小化。這意味著我們已經為記錄操作做好了准備。
正如之前描述的,Coded UI Test Builder基於下列4個操作來做記錄
Record Steps
Update or Delete Steps
Verify Results (Add Assertions)
Generate Code
小貼士: 如果用戶界面(UI)變化了,就重新記錄測試方法或斷言方法,或者重新記錄一個既有測試方法中受影響的部分。
記錄一個序列的操作.
記錄一個操作主要需要下列幾步.
Start Recording, 通過選擇Record按鈕即可.
Pause Recording, 用來處理記錄過程中的其它操作,即Generate Code.
Edit/Delete 操作, 以防錯誤的操作被記錄。
Generate code為記錄下來的操作創建編號。會給每一個記錄下來的操作都生成編號。
Add Assertions 用來校驗結果。
小貼士: 創建斷言最好使用Coded UI Test Builder,因為它會在UIMap.Designer.cs文件中自動添加一個斷言方法。

為記錄動作做計劃
任何事情的成功都取決於它計劃得有多好。較好地計劃最大限度保證了任務成功完成。這樣總是比較好,在開始記錄動作之前,我們計劃好所有的所有要計劃的步驟。
這里我們將要使用應用程序Windows計算器來記錄步驟。我們要自動地加和減兩個數字。在記錄加和減兩個數字的時候,下面的步驟將會用到。
。點擊「開始記錄」控制項
。到開始,點擊執行
。在執行窗口,輸入」calc"
。停止記錄,看記錄的步驟
。刪除錯誤的步驟(存在的話)
。產生代碼;提供和動作相匹配的名字。比如,打開計算器。
提示:當你產生一個方法時候,使用一個有意義的方法的名字,代替默認名字。
有意義的名字幫助識別方法的木的。
。重新記錄,提供第一個數字,暫停記錄產生代碼
。重新記錄,提供操作(加或者減),暫停記錄,產生代碼
。重新記錄,提供第二個數字,暫停記錄,產生代碼。
。加斷言
提示: 產生你的測試作為一系列記錄的方法
提示: 可以的時候,限制每個方法小於10個動作。這模塊化的方法讓UI改變時候容易替換方法。

我們已經看到了Coded UI可以使開發者的生活變得多麼輕松,尤其是遇到每次都需要進行很多輸入的復雜頁面的時候。這時,測試用例只需要被記錄一次,就可以按照需要執行任意多次。使用Coded UI比使用其它工具的好處是,它能自動適配Web頁面和Windows窗口應用。Coded UI測試可以用Visual Studio 2010來運行,也可以用任何版本的VS來運行,它們的功能正變得越來越強大。無需多說,Coded UI是一個由技術領導者提供的強大工具,想要體驗Coded UI測試的強大,我們應該開始在項目中使用它看看它能帶來多少ROI,我確信Coded UI不會讓你失望。
轉載

㈥ 自動化用例如何編寫

通俗來講,自動化用例分為功能用例(文字)和.代碼用例(腳本)兩個方面,先有功能用例在其轉化為代碼用例去執行;
1??功能用例(文字):
說明:通常執行自動化測試時,功能測試已執行完畢,而自動化測試本質上歸屬功能測試,所以自動化測試用例都是通過功能用例進行抽取和轉化,只需要在功能用例模版上添加一列[是否自動化]即可;
2??代碼用例(腳本)
說明:代碼用例就是將轉化來的功能用例使用編程語言(python\java)來實現功能用例的操作步驟、預期結果等,當然在實際操作中要結合相應的用例執行框架比如python中的unittest\pytest或java語言中的junit\testng,具體詳情可以到網路上找下黑馬程序員自動化測試視頻,之前在他們官網上看過一階段視頻。找不到去官網對話框問一下也能領取

㈦ ui自動化div樹節點如何選擇到

ui自動化div樹節點選擇方法如下所示:
只有在所有子級都被選中的情況下才能獲得父級的id,如果不選中所有的子級那麼獲取得到的id就只有子級的。

㈧ 一個完整的UI自動化測試(Python)必須有什麼部分

Python有許多有用的內建模塊(os,subprocess,socket,urllib,httplib,re,sys等等)和第三方模塊(cymruwhois,scapy,dpkt,spider等等).使用Python模塊很簡單」import 」
OS模塊是非常重要的因為你需要在你的Python代碼裡面調用系統命令 !

㈨ 如何使用UIAutomation進行iOS 自動化測試

寫在前面

研究iOS的自動化測試也有些日子了,剛開始的時候,一直苦於找不到什麼好的資料,只能從Apple的官網查閱相關的API文檔,只可惜,Apple對開發者來說實在是不怎麼友好,文檔寫得相當的粗略,對於初學者來說有一定的難度。

本來是打算自己動手寫一篇關於iOS的UI自動化測試的入門級別的介紹性文檔的,但想起來後面在具體解決一些問題的時候,收藏一篇很好的Blog,很全面地介紹了如何使用UIAutomation的JavaScript Libraries做iOS程序的自動化測試。如果作者早點看到這篇文章,應該要少走一些彎路,這里沒有創意性的它他翻譯成中文,希望對你們有一些幫助。

原文地址:http://blog.manbolo.com/2012/04/08/ios-automated-tests-with-uiautomation

翻譯正文:快速入門

自動化測試代碼可以「在你的睡著的時候」很好地幫你測試你的應用程序。它可以讓你能夠快速地跟蹤你程序中的回歸和性能方面的問題,這樣你就不用擔心你新增的功能會影響到你之前已經完成開發的程序了。

隨著iOS4.0的發布,蘋果公司同時發布了一個名為UIAutomation的測試框架,它可以用來在真實設備和iPhone模擬器上執行自動化測試。但官方關於UIAutomation的文檔相當的有限,在網路上也沒有太多的資源可以查找的。本文將向你展示你如何將UIAutomation整合到你的工作流程當中去。

作為基礎知識的准備,你可以先看一下蘋果公司關於UIAutomation的文檔,另外還有一篇快速入門的介紹蘋果Instruments的文檔也值得看看,當然,如果你有一個免費的Apple開發者賬號的話,你可以看一下WWDC 2010 - Session 306 – 使用Instruments進行用戶界面自動化測試的幻燈片或者視頻。

除此之外,包括在Xcode中的OCUnit測試框架也可以用來為你的應用程序編寫單元測試。

1. 第一個UIAutomation測試腳本

使用iOS 模擬器
使用iOS設備
2. 處理UIAElement和元素可訪問性(Accessibility)

UIAElement層次結構
模擬用戶操作
3. 經驗分享(讓你的生活變得更簡單)

類庫Tune-up介紹
導入外部腳本
使用強大的命令行
使用錄制交互功能
當遇到問題時,加上「UIATarget.delay(1);」
4. 高級交互

處理非預期和預期的提示框(alerts)
多任務
屏幕方向
5. 總結

有用的鏈接
一個視頻

1. 你的第一個UIAutomation測試腳本

UIAutomation的功能測試代碼是用Javascript編寫的。UIAutomation和Accessibility有著直接的關系,你將用到通過標簽和值的訪問性來獲得UI元素,同時完成相應的交互操作。

下面讓我們來編寫我們的第一段測試代碼。

使用iOS模擬器

1. 下載示例應用程序TestAutomation.xcodeproj,並打開它。這個項目是一個很簡單的包含2個tab的tabbar應用程序。

2. 確保選中如下圖所示的「TestAutomation > iPhone 5.0 Simulator」模式(或許你已經切換成5.1了,因此它可能是iPhone5.1模擬器)。

3. 啟動Instruments(Proct > Profile),或者通過⌘I。

4. 選擇左邊的iOS Simulator,然後再選擇Automation模板,然後點擊「Profile」。

5. Instruments就已經啟動好後,然後直接開始錄制了。這里先停止錄制,(紅包按鈕或者⌘R)。

6. 在左邊的Scripts窗口,點擊「Add > Create」創建新的腳本。

7. 在腳本編輯器里,輸入下面的代碼

1
2
3
4
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
target.logElementTree();

8. 重新運行這段腳本⌘R(不需要保存)。腳本跑起來後,你可以在日誌打完後停止它。

贊一個!我們就這樣完成了我們的第一個UIAutomation測試用例。

使用iOS設備

你除了將你的測試用例運行模擬器上,也可以將它運行在一個真實的設備上。不過,自動化測試用例只能運行在支持多任務的:iPhone 3GS,iPad,iOS > 4.0等設備上。遺憾的是不管iPhone 3G的系統版本是什麼,都不支持。

下面是如何操作:

1. 通過USB介面連接上你的iPhone。

2. 選擇 「TestAutomation > iOS Device」模式。

3. 確保Developper profile設置成Release模式(而不是Ad-Hoc Distribution profile)。默認情況下,profiling是設置成Release模式的(因為沒有必要將profile設置成Debug模式)。

4. 啟動測試 (⌘I)

5. 後面的步驟請參考前面模擬器部分。2. 處理UIAElement和元素可訪問性(Accessibility)

UIAElement層次結構

Accessibility和UIAutomation有密切的聯系:如果一個控制項的Accessibility是可以被訪問的,你就可以設置和讀取它的值,作相關的操作,而當一個控制項的Accessibility不可見時,你就沒有辦法通過automation訪問它。

你可以通過Interface Builder,或者通過在程序里設置isAccessibilityElement屬性的方式來設置一個控制項的Accessibility或者可被自動化。當你設置container view(即:一個視圖包含其它的UIKit元素)的accessibility時,你必須注意。你設置了整個View的accessibility將會「隱藏」它的子視圖的accessibility,例如:在示例項目中,你不能將outlet視圖設置成可訪問的,否則它所有的子控制項將都不可以訪問了。在任何時候,logElementTree都是你忠實的朋友:它將當前界面的所有可被訪問的元素都列印在日誌里。

每一個可以被訪問的UIKit控制項都可以用一個Javascript對象來描述,它就是一個UIAElement。UIAElement有幾個屬性:name, value, elements, parent。你的主窗口包含很多的控制項,它們是以UIKit層次的方式定義的,這些UIKit層次結構對應的是UIAElement的層次樹。例如:前面的測試代碼中,通過調用logElementTree,我們可以得到如下面所示的樹結構:

+- UIATarget: name:iPhone Simulator rect:{{0,0},{320,480}}

| +- UIAApplication: name:TestAutomation rect:{{0,20},{320,460}}

| | +- UIAWindow: rect:{{0,0},{320,480}}

| | | +- UIAStaticText: name:First View value:First View rect:{{54,52},{212,43}}

| | | +- UIATextField: name:User Text value:Tap Some Text Here ! rect:{{20,179},{280,31}}

| | | +- UIAStaticText: name:The text is: value:The text is: rect:{{20,231},{112,21}}

| | | +- UIAStaticText: value: rect:{{145,231},{155,21}}

| | | +- UIATabBar: rect:{{0,431},{320,49}}

| | | | +- UIAImage: rect:{{0,431},{320,49}}

| | | | +- UIAButton: name:First value:1 rect:{{2,432},{156,48}}

| | | | +- UIAButton: name:Second rect:{{162,432},{156,48}}

你可以通過下面的代碼來訪問文本框:

1
2
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];
你可以選擇通過從0開始的索引或者這個元素的名稱來訪問這個元素,例如:你也可以通過下面的代碼來訪問文本控制項。

1
2
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()["User Text"];
後一種方式更加清晰明了,應該多使用。你可以通過Interface Builder設置UIAElement的name屬性,

或者通過編寫代碼的方式:

1
2
myTextField.accessibilityEnabled = YES;
myTextField.accessibilityLabel = @"User Text";
你現在可以看到,通過accessibility屬性可以被UIAutomation用來找到不同的控制項。這非常的清晰,因為,第一,你只要學習一個測試框架;第二,通過編寫自動化測試代碼,你同時還可以保證你的程序是可以被訪問的。因此,每一個UIAElement對象的子控制項可以通過下面的方法進行訪問:

buttons(), images(), scrollViews(),textFields(), webViews(), segmentedControls(), sliders(), staticTexts(), switches(), tabBar(),tableViews(), textViews(), toolbar(), toolbars() 等等……

你可以通過如下代碼在tabbar上訪問第一個tab:

1
2
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];
UIAElement結構層次非常的重要,你以後會常常用到它。而且你還要記住,你可以在隨時通過調用UIAAplication的logElementTree來獲得它的結構。

1
UIATarget.localTarget().frontMostApp().logElementTree();
在模擬器上,你還可以激活Accessibility 的檢測器。啟動模擬器,找到「Settings > General > Accessibility > Accessibility Inspector」,然後將它設為「打開」狀態。

這個彩色的小框框就是Accessibility 檢測器了。當它收起來的時候,Accessibility就被關閉了,當它展開的時候,Accessibility就是打開的。你只要點擊上面的箭頭按鈕就可以激活或者屏蔽Accessibility。現在,打開我們的示常式序,激活檢測器。然後,點擊文本框,檢查UIAElement的name和value屬性(其實就是accessibilityLabel和accessibilityValue對應的NSObject類型的值)。這個檢測器可以幫助你調試和編寫你的測試代碼。

模擬用戶操作

讓我們更進一步,模擬一些用戶的交互操作。你可以簡單地調用按鈕的tap()來作一個點擊操作:

1
2
3
4
5
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];

// Tap the tab bar !
tabButton.tap();
你還可以調用UIAButtons的doubleTap(), twoFingerTap()。如果你不想操作具體的某個元素,你也可以直接根據屏幕上指定的坐標點進行操作,你可以這么用:

點擊:
1
2
3
UIATarget.localTarget().tap({x:100, y:200});
UIATarget.localTarget().doubleTap({x:100, y:200});
UIATarget.localTarget().twoFingerTap({x:100, y:200});
縮放:
1
2
UIATarget.localTarget().pinchOpenFromToForDuration({x:20, y:200},{x:300, y:200},2);
UIATarget.localTarget().pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200},2);
拖拽與劃動:
1
2
UIATarget.localTarget().dragFromToForDuration({x:160, y:200},{x:160,y:400},1);
UIATarget.localTarget().flickFromTo({x:160, y:200},{x:160, y:400});
注意,當你指定操作的時間間隔的時候,它是有特定的范圍的,即:拖拽操作的時間間隔必須大於或者等於0.5秒,小於60秒。

現在,讓我們來練習一下:

停止Instruments (⌘R)
在Scripts窗口裡, 移除當前的腳本
點擊「Add > Import」然後選擇TestAutomation/TestUI/Test-1.js(將下面的代碼保存到這個路徑)
點擊錄制按鈕 (⌘R) 然後看看將會發生什麼…
下面是Test-1.js代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var testName = "Test 1";
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
UIALogger.logStart( testName );
app.logElementTree();
//-- select the elements
UIALogger.logMessage( "Select the first tab" );
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if (selectedTabName != "First") {
tabBar.buttons()["First"].tap();
}
//-- tap on the text fiels
UIALogger.logMessage( "Tap on the text field now" );
var recipeName = "Unusually Long Name for a Recipe";
window.textFields()[0].setValue(recipeName);
target.delay( 2 );
//-- tap on the text fiels
UIALogger.logMessage( "Dismiss the keyboard" );
app.logElementTree();
app.keyboard().buttons()["return"].tap();
var textValue = window.staticTexts()["RecipeName"].value();
if (textValue === recipeName){
UIALogger.logPass( testName );
}
else{
UIALogger.logFail( testName );
}
這段腳本先啟動待測程序,然後,如果第一個tab沒有被選的話就切換到第一個tab,並將上面的文本框的值設成「Unusually Long Name for a Recipe」,接著收起虛擬鍵盤。這里有一些新的方法值得注意的:UIATarget的delay(Number timeInterval) 方法允許你在兩個操作之間做一些等待,UIALogger的logMessage( String message) 方法用來將你想列印的信息輸出到日誌上去,UIALogger的logPass(String message)方法指明你的測試腳本已經成功的完成測試了。

你還知道了如何訪問鍵盤上的按鈕,然後作點擊操作:

1
app.keyboard().buttons()["return"].tap();

㈩ ui自動化元素定位怎麼定位一個頁面中不確定位置的按鈕

css、xpath、id、name、class_name、tag_name、link_text、partial_link_text這是web自動化測試的元素定位方法。如果想要學習的話,推薦可以了解下傳智的課程,我就是在裡面學習出來的!滿意我的回答嗎?如果滿意請採納下