基于Xcode的iOS原生UI测试框架 UITests使用 简单case

前言

随着APP功能的不断增加,仅仅靠黑盒测试人工来覆盖测试无疑有很大的局限性,效果也不如人意,尤其是新功能增加后可能要对旧功能做回归测试,产生了大量的重复工作,而这些重复工作有一些是可以通过自动化测试进行完成的,UITests的出现就是为了解决这个问题.

UItests介绍

UITests是什么?

UItests是由苹果公司开发的一个自动测试UI交互的自动化测试框架

UItests能做什么?

UItests可以帮助我们解决一些测试上的重复工作,节省人工成本,提高测试效率等.

UITests使用

新创建的项目可以通过勾选include UI Tests来添加

基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第1张图片

现有项目可以通过以下步骤来添加.


基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第2张图片

基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第3张图片

成功添加UITests组件后,在项目文件导航里可以看到对应目录.


基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第4张图片

UITestDemoUITests.m就是用来编写测试案例的文件.

注:测试方法都是以test开头的

测试代码可以通过录制和直接编写两种方法来生成,建议先通过自动生成 然后修改自动生成的代码.

声明一个新的测试方法 点击小圆点 自动打开模拟器运行项目 对项目的操作会被用代码的形式记录下来


基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第5张图片

自动记录的代码也十分好理解,点击了login按钮 再点击了id为Detail的导航栏上的Mune按钮
点击左上角的棱形标志则代表执行这个测试方法,自动打开模拟器执行.
测试方法执行成功标志內出现一个绿勾,失败则是红叉.
测试进行中会在控制台打印参数,包括当前操作 耗时等,测试完成则会打印测试log保存地址.

基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第6张图片

简单测试案例

- (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);
}

测试结果:


基于Xcode的iOS原生UI测试框架 UITests使用 简单case_第7张图片

断言

注:断言结果会记录在测试的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...)

你可能感兴趣的:(基于Xcode的iOS原生UI测试框架 UITests使用 简单case)