前言
隨著APP功能的不斷增加,僅僅靠黑盒測試人工來覆蓋測試無疑有很大的局限性,效果也不如人意,尤其是新功能增加后可能要對舊功能做回歸測試,產(chǎn)生了大量的重復(fù)工作,而這些重復(fù)工作有一些是可以通過自動化測試進行完成的,UITests的出現(xiàn)就是為了解決這個問題.
UItests介紹
UITests是什么?
UItests是由蘋果公司開發(fā)的一個自動測試UI交互的自動化測試框架
UItests能做什么?
UItests可以幫助我們解決一些測試上的重復(fù)工作,節(jié)省人工成本,提高測試效率等.
UITests使用
新創(chuàng)建的項目可以通過勾選include UI Tests
來添加
現(xiàn)有項目可以通過以下步驟來添加.
成功添加UITests組件后,在項目文件導航里可以看到對應(yīng)目錄.
UITestDemoUITests.m
就是用來編寫測試案例的文件.
注:測試方法都是以test開頭的
測試代碼可以通過錄制和直接編寫兩種方法來生成,建議先通過自動生成 然后修改自動生成的代碼.
聲明一個新的測試方法 點擊小圓點 自動打開模擬器運行項目 對項目的操作會被用代碼的形式記錄下來
自動記錄的代碼也十分好理解,點擊了login按鈕 再點擊了id為Detail的導航欄上的Mune按鈕
點擊左上角的棱形標志則代表執(zhí)行這個測試方法,自動打開模擬器執(zhí)行.
測試方法執(zhí)行成功標志內(nèi)出現(xiàn)一個綠勾,失敗則是紅叉.
測試進行中會在控制臺打印參數(shù),包括當前操作 耗時等,測試完成則會打印測試log保存地址.
簡單測試案例
- (void)testLogi{
XCUIElement *account = [[XCUIApplication alloc] init].textFields[@"account"];
XCUIElement *pwd = [[XCUIApplication alloc] init].textFields[@"password"];
XCUIApplication *app = [[XCUIApplication alloc] init];
//判斷賬號密碼是否都是偶數(shù) 是則跳轉(zhuǎn) 不是則直接下一次測試
//跳轉(zhuǎn)后等待3s 返回登錄界面
int success = 0;
int failed = 0;
for (int i = 0; i<10; i++) {
int acc = arc4random() % 1000;
int pw = arc4random() % 1000;
[account tap];
[account typeText:[NSString stringWithFormat:@"%d",acc]];
[pwd tap];
[pwd typeText:[NSString stringWithFormat:@"%d",pw]];
//點擊登錄
[app.buttons[@"login"] tap];
//模擬正常登錄網(wǎng)絡(luò)訪問等待3s
[app.windows.navigationBars.element pressForDuration:3];
//判斷是否跳轉(zhuǎn)到登錄之后的界面 如果是 則登錄成功
if ([app.navigationBars.element.identifier isEqualToString:@"Detail"]) {
[app.navigationBars[@"Detail"].buttons[@"Mune"] tap];
NSLog(@"登錄成功");
success += 1;
}else{
NSLog(@"登錄失敗");
failed += 1;
}
}
NSLog(@"10次測試,成功登錄%d次,失敗%d次",success,failed);
}
測試結(jié)果:
斷言
注:斷言結(jié)果會記錄在測試的log文件中,斷言失敗則該測試方法不通過.
//斷言,最基本的測試珠闰,如果expression為true則通過逾苫,否則打印后面格式化字符串
XCTAssert(expression, format...)
//Bool測試:
XCTAssertTrue(expression, format...)
XCTAssertFalse(expression, format...)
//相等測試
XCTAssertEqual(expression1, expression2, format...)
XCTAssertNotEqual(expression1, expression2, format...)
//double float 對比數(shù)據(jù)測試使用
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)
//Nil測試牡辽,XCTAssert[Not]Nil斷言判斷給定的表達式值是否為nil
XCTAssertNil(expression, format...)
XCTAssertNotNil(expression, format...)
//失敗斷言
XCTFail(format...)