XCUITest进阶与技巧

关键词:XCUITest iOS UI自动化 自动化测试 Mac Swift

一、调试与代码

1.测试类的基类

    创建「XCUITestBase」基于XCTestCase。接下来的UITest用例都基于这个「XCUITestBase」,

    可以减少每个用例的代码量,并统一管理setUp和tearDown函数。

基类

    接下来的TestHomeTab等测试类都继承XCUITestBase。

2.设置用例执行顺序为随机顺序


    在图中的下拉列表中找到「Edit Scheme」,在Test栏目中找到如图选项:

    勾选第二个「Random execution order」即可。


3.测试外部App


可启动当前模拟器上已安装app用于测试。需指定bundleId

 let app = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari") 

app.launch() 

_ = app.wait(for: .runningForeground, timeout: 30)

4.查看UI元素树

    类似于xpath的查看,能够得到UITest中的元素的具体信息:label、ID、frame等

    在编写测试用例时,需要查找元素,执行一系列动作,获取元素并断言。根据上述的查找方式,调试起来其实很麻烦。经过多次尝试,找到了一个非常简便的测试办法。

    首先断点进入任意测试方法内部,然后可lldb中(断点停留的时候的命令行)

po app                                              //查看当前view的所有元素结构

po app.buttons["abc"]                      //查找你想要的元素

po app.buttons.firstMath.tap()          //所执行的动作会即可作用在当前模拟器中,你也可以直接操作模拟器去展现你要的view,在通过lldb去查找元素,调用动作。相当于通过lldb,你可以动态执行测试案例。可以任意操作app,去寻找你想要的元素和动作


lldb

    这里只需要了解两个lldb命令:

p(print):打印值,比如p app.staticTexts["登录"].exists ,可以得到true/false

po(print object):打印对象。上例中使用的就是po

5.只执行某个用例(比如整体测试的时候失败的用例)

xcodebuild test-without-building \

-workspace PreciousMetals.xcworkspace \

-scheme PreciousMetalsDevUITests \

-destination 'platform=iOS,name=李鹏SuperXperia' \ //真机-destination表示方法,模拟器是iOS Simulator

 -only-testing:PreciousMetalsDevUITests/TestHomeTab  //甚至可以继续拼接/+指定的函数名称

    name 的取值就是手机真机的设置里面的「关于本机」的名字。

二、Xcodebuild 命令与特性

(待续)

1.parallel test:多虚拟机测试

同时开启多个设备进行测试。


每个虚拟机使用独立的数据容器,不使用原始模拟器文件,而是使用生成的模拟器副本。

并行数量worker count=3时,如图效果



平行测试的支持范围:

    a. 支持iOS和tvOS的模拟器的UI测试和单元测试

    b. 支持macOS的单元测试


2.编译与test过程分离(一次编译,随时测试)

如果软件版本功能相对稳定,短期内需要上线后台服务等。需要多次执行测试。

此时可以只编译一次UITest,然后用到的时候直接测试(不走编译阶段,超级高效!)

为UITest进行build

xcodebuild build-for-testing -scheme tvOS -destination 'platform=tvOS Simulator,id=D6FA2C2A-E297-406A-AA22-624B4834ACB2'

区分build for 模拟器和真机(通过-destination)

例如:

xcodebuild build-for-testing -workspace PreciousMetals.xcworkspace -scheme PreciousMetalsDevUITests -destination 'platform=iOS Simulator,name=iPhone XS,OS=12.1'

不进行build,直接开始测试

xcodebuild test-without-building

例如:

$ xcodebuild test-without-building -xctestrun iOSApp_iphonesimulator.xctestrun -destination 'platform=iOS Simulator,id=6DC4A7BA-EA7F-40D6-A327-A0A9DF82F7F6'

你可能感兴趣的:(XCUITest进阶与技巧)