前言
随着APP功能的不断增加,仅仅靠黑盒测试人工来覆盖测试无疑有很大的局限性,效果也不如人意,尤其是新功能增加后可能要对旧功能做回归测试,产生了大量的重复工作,而这些重复工作有一些是可以通过自动化测试进行完成的,UITests的出现就是为了解决这个问题.
UItests介绍
UITests是什么?
UItests是由苹果公司开发的一个自动测试UI交互的自动化测试框架
UItests能做什么?
UItests可以帮助我们解决一些测试上的重复工作,节省人工成本,提高测试效率等.
UITests使用
新创建的项目可以通过勾选include UI Tests
来添加
现有项目可以通过以下步骤来添加.
成功添加UITests组件后,在项目文件导航里可以看到对应目录.
UITestDemoUITests.m
就是用来编写测试案例的文件.
注:测试方法都是以test开头的
测试代码可以通过录制和直接编写两种方法来生成,建议先通过自动生成 然后修改自动生成的代码.
声明一个新的测试方法 点击小圆点 自动打开模拟器运行项目 对项目的操作会被用代码的形式记录下来
自动记录的代码也十分好理解,点击了login按钮 再点击了id为Detail的导航栏上的Mune按钮
点击左上角的棱形标志则代表执行这个测试方法,自动打开模拟器执行.
测试方法执行成功标志內出现一个绿勾,失败则是红叉.
测试进行中会在控制台打印参数,包括当前操作 耗时等,测试完成则会打印测试log保存地址.
简单测试案例
- (void)testLogi{
XCUIElement *account = [[XCUIApplication alloc] init].textFields[@"account"];
XCUIElement *pwd = [[XCUIApplication alloc] init].textFields[@"password"];
XCUIApplication *app = [[XCUIApplication alloc] init];
//判断账号密码是否都是偶数 是则跳转 不是则直接下一次测试
//跳转后等待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];
//模拟正常登录网络访问等待3s
[app.windows.navigationBars.element pressForDuration:3];
//判断是否跳转到登录之后的界面 如果是 则登录成功
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);
}
测试结果:
断言
注:断言结果会记录在测试的log文件中,断言失败则该测试方法不通过.
//断言,最基本的测试,如果expression为true则通过,否则打印后面格式化字符串
XCTAssert(expression, format...)
//Bool测试:
XCTAssertTrue(expression, format...)
XCTAssertFalse(expression, format...)
//相等测试
XCTAssertEqual(expression1, expression2, format...)
XCTAssertNotEqual(expression1, expression2, format...)
//double float 对比数据测试使用
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)
//Nil测试,XCTAssert[Not]Nil断言判断给定的表达式值是否为nil
XCTAssertNil(expression, format...)
XCTAssertNotNil(expression, format...)
//失败断言
XCTFail(format...)