本文注重自动化测试用例并行方案的设计,忽略了具体代码实现的细节。代码实现细节大家利用网络资源可以轻松搜索到相关内容!
目前业界主流提升测试效率的方案如下:
1.自动化测试脚本并行运行;
2.编写自定义类库解决自动化api无法提供的功能或者对工具提供的api进行二次封装,核心就是增强脚本健壮性;
自动化脚本执行完毕后,自动发送测试报告给相关责任人,使其第一时间了解自动化测试结果;
自动化测试提升
关于自动化测试中编写脚本和结果确认的效率提升,往往都需要大量的编码工作,核心就是两点:
1.增强测试脚本的稳定性,尽量避免因为自动化测试脚本的质量问题导致自动化测试执行失败。
2.自动化测试结束后,能够在第一时间,通知相关责任人,以便快速做出决策。
在这里我重点介绍一下自动化测试脚本并行运行方案:
多端并行
web端,本质通过使用Selenium Grid实现:
多浏览器
移动端,本质通过启动多个Appium Server,每个Appium server连接一个设备。可以在同一台机器上启动多个Appium Server(每个server有不同的端口)。可以使用Selenium Gird控制appium server。
多手机终端
脚本并行
有了多端并行运行的技术方案,那么下一个问题就是让我们的测试用例并发的在多端中运行。这里以Java的TestNG为例作为讲解,TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。TestNG表示下一代(Next
Generation)。 TestNG类似于JUnit(特别是JUnit
4),但它不是JUnit框架的展。TestNG在处理用例并发方面较Junit4优势明显。通常,在TestNG的执行中,测试的级别由上至下可以分为suite
-> test -> class ->
method,箭头的左边元素跟右边元素的关系是一对多的包含关系。这里的test指的是testng.xml中的test
tag,而不是测试类里的一个 Test标签
Suite并行
一般情况下,一个testng.xml只包含一个suite。如果想起多个线程执行不同的suite,官方给出的方法是:通过命令行的方式来指定线程池的容量。
java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml
即可通过三个线程来分别执行testng1.xml、testng2.xml、testng3.xml。
实际上这种情况在实际中应用地并不多见,我们的测试用例往往放在一个suite中,如果真需要执行不同的suite,往往也是在不同的环境中去执行,届时也自然而然会做一些其他的配置(如环境变量)更改,会有不同的进程去执行。因此这种方式不多赘述。
test, class, method并行
test,class,method级别的并发,可以通过在testng.xml中的suite tag下设置,如:
它们的共同点都是最多起5个线程去同时执行不同的用例。
它们的区别如下:
tests级别:不同test tag下的用例可以在不同的线程执行,相同test tag下的用例只能在同一个线程中执行。
classs级别:不同class tag下的用例可以在不同的线程执行,相同class tag下的用例只能在同一个线程中执行。
methods级别:所有用例都可以在不同的线程去执行。
这里推荐class级别的并行。因为这种方案最容易实现不同的class分配到不同的selenium grid中运行测试用例的并行需求。