美文网首页iOS_测试iOS DeveloperTools
基于Xcode的iOS原生UI测试框架 UITests使用 简单

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

作者: sands_yu | 来源:发表于2017-02-23 10:29 被阅读861次
title: 基于Xcode的iOS原生UI测试框架 UITests使用 简单case
tags: [iOS,测试,APP]

前言

随着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...)

相关文章

网友评论

  • 君赏:这个界面录制基于界面不变,当界面发生改动,会找不到对象而崩溃。对于大型项目和界面经常变动项目就是鸡肋。问了很多大神,他们觉得鸡肋都没用UI测试框架
    君赏:@sands_yu 对 XCTest 看着很简单 但是如果想运用在真实的项目里面 还是有很多坑的
    sands_yu:其实很多跨平台的UI测试(appium之类的) 做法也都是获取控件的path 我觉得本质上是一样的
    是否有用其实还是看需求了.
  • 若如初见0:你好,我录制完了,点击运行的时候会报这个错误The bundle “UITests” couldn’t be loaded because its executable isn’t loadable. Try reinstalling the bundle. 这是什么原因呢
    若如初见0:@sands_yu 嗯,谢谢,创建项目时候同时创建的UITests.运行UITests时发现它是一个独立的项目,可却没icon图标,这是在什么地方配置呢
    sands_yu:没有遇见过这样的问题
    Google了一下 你试着删除
    Tests target > info.plist > Bundle name $(PRODUCT_NAME);

本文标题:基于Xcode的iOS原生UI测试框架 UITests使用 简单

本文链接:https://www.haomeiwen.com/subject/tdgvwttx.html