一.使用前景
一般app开发完成后,打出ipa包,供测试mm下载安装测试。测试mm会打开app进行各种按键切换手势动作(其实主要就是UI交互操作),很是繁琐,尤其是回归测试,会做很多重复的工作。
为了减轻测试mm的压力,苹果在ios9后,引入和UI测试相关API。开发就可以比把较固定的和通用的测试用例做成UI测试用例,一键运行所有用例,极大的减轻了测试mm的工作压力。
运行用例效果图如下(红×就是用例不通过的):
二.给工程添加UI测试模块
ios9后,XCTEST框架增加了UI测试相关的API(UI测试) <语言是oc或swift语言>
1.新建的时候选择如下模块
2.如果新建的时候完了,也可以如下方法添加(添加target)
3.创建好后默认代码解释
4.命名规范 ui测试用例要以test开头命名
-(void)testExample1
{
XCUIApplication *app = [[XCUIApplication alloc] init];
[app.buttons[@"自选"] tap];
XCUIElement *textField = [app.textFields elementBoundByIndex:0];
XCTAssert(textField.exists);
[textField tap];
[textField typeText:@"500"];
[app.buttons[@"计算"] tap];
//添加自己的测试代码(断言)
XCUIElement *lbl = app.staticTexts[@"计算结果=45"];
XCTAssert(lbl.exists);
}
三.具体编码过程
一般先用脚本录制工具(UI Recording)进行简单逻辑的代码生成,之后在对代码进行修改,添加断言或循环操作之类的
1.脚本录制工具(UI Recording)
录制脚本源码(默认应该会有错误)
2.修改脚本
四.代码编写和修改
-
头文件相关类
2.UI测试常用的API(理解子元素和后代元素的层次关系)
//所有后代元素
-(XCUIElementQuery*)descendantsMatchingType:(XCUIElementType)type;
//直接子元素
-(XCUIElementQuery*)childrenMatchingType:(XCUIElementType)type;
//模拟文本框输入
-(void)typeText:(NSString*)text;
//模拟单机
-(void)tap;
3.常用场景
3.1判读是否含有指静态文本
XCUIApplication* app = [[XCUIApplicationalloc] init];
//获得当前界面中的表视图
XCUIElement* tableView = [app.tableselementBoundByIndex:0];
XCUIElement* cell1 = [tableView.cells elementBoundByIndex:0];
//法1 推荐使用
XCTAssert(cell1.staticTexts[@"Welcome"].exists);
//法2
XCTAssert([[cell1 descendantsMatchingType:XCUIElementTypeStaticText] objectForKeyedSubscript:@"Welcome"].exists);
3.2点击导航栏上的回退按钮
XCUIApplication* app = [[XCUIApplication alloc] init];
//点击添加“增加”按钮,跳转到增加界面
[app.navigationBars[@"导航栏"].buttons[@"back"] tap];
4.使用的时候注意点
4.1.如果是xib可以用苹果的辅助功能
XCUIElement *textField = app.textFields[@"revenueTxt"];
因为我用的是代码生成的,用的是如下方法替代
XCUIElement *textField = [app.textFields elementBoundByIndex:0];
五.具体使用例子
1.数据库(查增删)UI测试用例
源代码下载:https://pan.baidu.com/s/1c1EtCcg
2.简单效果图
3.注意UI用例测试如果不是很独立,相互之间有联系,出现红x不一定代表代码逻辑有问题,有时候可能是很多用例有先后顺序,需要具体评估(造点数据,在重新运行下用例就可以)
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。