前言
在近几个版本的测试中,经常遇到各种超出预期的状况(如新人开发对业务不熟悉、bug太多不能及时解决、较大项目重构而相关文档资料不全需求不明确等),导致后期回归测试的时间被严重挤压,回归不够充分,每次上线都无比紧脏,生怕一不留神被拉去祭天~~为了能随时应对各种项目中紧急突发状况,提高测试效率,小编通过了解,希望能够通过自动化测试方法,提高回归测试效率,保证产品核心功能的上线质量。 对iOS系统的APP测试而言,Xcode集成的XCTest是再好不过的测试框架了,下面小编来分享一些基于XCTest的自动化测试的认识,希望能对做iOS自动化测试的各位同学有所帮助。
XCTest介绍
XCTest是苹果官方提供的集成在Xcode中的测试框架,用来编写测试代码。Xcode在创建工程时,会默认使用XCTest,并且默认创建了Unit Test(单元测试)和 UI Test(界面测试)两个Target,其中Unit Test主要用于测试代码的大部分基本功能,比如绝大多数Model的类和方法测试,业务逻辑测试,网络接口调用测试等等。UI Test一般会考虑到用户的交互流程,模拟用户的交互操作,利用XCTest的UI记录特性来获取界面上的一些列视图元素和操作事件,然后在测试方法中触发事件。 那么基于XCTest的自动化测试是怎么执行的呢? 1. 创建Test Target 创建Test Target有两种方式,一种是Xcode创建工程时默认创建Test Target;二是自定义添加Test Targe,在导航栏中切换到测试导航菜单,点击左下角“ ”添加Test Target,如下图:
2. 创建Test Class 如果要在Test Target中创建新的Test Class,选中目标Test Target,使用File -> New -> File ,可以看到有UI TestClass和Unit Test Class两种类,如下图:
或者测试用例导航栏,直接右键新建Target和Class:
创建好Test Target和Test Class之后,就可以在Test Class中编写测试代码了。 3.测试代码 创建好的Test Class界面如图,默认给出了代码编写格式,我们只需要在相应位置填写测试代码即可。
在编写测试代码时,你需要知道以下几点: 1)setUp和tearDown setUp:在每个单元测试方法执行之前,XCTest会先执行setUp方法,所以可以把一些测试代码需要用的初始化代码和全局变量写在这个方法里; tearDown:在每个单元测试方法执行完毕后,XCTest会执行tearDown方法,所以可以把需要测试完成后销毁的内容写在这个里,以便保证下面的测试不受本次测试影响。 2)测试用例的命名 所有测试的方法都需要以test为前缀进行命名,比如:
test之后一般会使用这个方法要测试的内容进行命名,直观易懂,比如testHTTPRequest。 对于每一个业务类,我们都会有一个对应的测试类,比如:GMNetService对应GMNetServiceTest,如果类的内容太多,也可以通过Category进行分类。 如果某个方法暂时不想跑测试了,我们可以加一个Disable前缀即可。 3)性能测试 XCTest提供性能测试,主要是针对某个代码块执行的时长,XCTest的性能的测试利用如下格式:
也可以自己设定Baseline来作为测试是否通过的基准,方法如下:
其中,Baseline是计算标准差的参考值,Max STDDEV是最大允许的标准差,底部点击1,2…10可以看到每次运行的结果。 4)测试异步任务 XCTest框架提供了XCTestExpectation来进行异步测试,即可在指定时机使用其fulfill实例方法开始执行断言命令。
5)断言 XCTest使用断言来判断一个测试用例成功或者失败。 最常用的断言: XCTAssert(expression, format...)表示如果expression满足,则测试通过,否则对应format的错误。 还有判断Fail的断言XCTFail(format...) 以及其他常用断言: XCTAssertTrue(expression,format...) XCTAssertFalse(expression,format...) XCTAssertEqual(expression1,expression2, format...) XCTAssertNotEqual(expression1,expression2, format...) XCTAssertEqualWithAccuracy(expression1,expression2, accuracy, format...) XCTAssertNotEqualWithAccuracy(expression1,expression2, accuracy, format...) XCTAssertNil(expression,format...) XCTAssertNotNil(expression,format...) 4.运行测试代码 可以一次运行一组测试用例,点击整个Test文件右侧的三角小图标,如下图:
也可以运行一个测试用例,点击某个测试用例右侧的三角小图标,如下图:
或者某个test开头的实例方法左侧的三角小图标,如下图:
5.查看测试结果 1)代码覆盖率收集 测试运行之前,需要设置收集代码覆盖率,方法:选择Target,然后选择Test模块,勾选Code coverage。
2)测试结果 测试导航栏首行整个test文件右侧数据说明跑了多个test,测试失败个数多少,每个测试用例右侧的绿色对勾和红色叉号分别表示测试通过和测试失败。
Report导航栏可以看到更详细的测试结果,点击Test行可以看到所以测试用例的状态、名称、测试时间,并可与进行筛选查看。
点击test函数右侧的向右小箭头可以进入相应代码行。
点击Coverage行可以看到测试代码的整体覆盖率和每个.m代码文件的代码覆盖率。
点击Log行可以看到测试过程中的日志输出。
接下来就是针对测试结果进行对应的处理了~
结束语
本文小编主要分享了XCTest框架的自动化测试是什么,怎么执行,测试结果代码覆盖率等内容,除此之外,XCTest还可以在服务端进行持续集成自动运行测试,之后小编会给大家详细分享,敬请期待!