⾃动化测试效率提升⽅案
本⽂注重⽤例并⾏⽅案的设计,忽略了具体代码实现的细节。代码实现细节⼤家利⽤⽹络资源可以轻松搜索到相关内容!
⽅案概述
⽬前业界主流提升测试效率的⽅案如下:
⾃动化测试脚本并⾏运⾏;
在多终端同时跑脚本;
编写⾃定义类库解决⾃动化api⽆法提供的功能或者对⼯具提供的api进⾏⼆次封装,核⼼就是增强脚本健壮性;
⾃动化脚本执⾏完毕后,⾃动发送测试报告给相关责任⼈,使其第⼀时间了解⾃动化测试结果;
⽅案如下图所⽰:
脚本稳定
编写⾃定义类库解决⾃动化⽆法提供的功能或者对⼯具提供的api进⾏⼆次封装。主要解决的问题包括:动态元素识别、页⾯加载延迟、⽹络延迟、脚本失败重试。总之尽量避免因为⾃动化测试脚本的质量问题导致⾃动化测试执⾏失败。这就需要⾃动化脚本编写⼈员有很强的编码功底。
多端并⾏
web端,本质通过使⽤Selenium Grid实现:
多浏览器
移动端,本质通过启动多个Appium Server,每个Appium server连接⼀个设备。可以在同⼀台机器上启动多个Appium Server(每个server有不同的端⼝)。可以使⽤Selenium Gird控制appium server。
多⼿机终端
脚本并⾏
有了多端并⾏运⾏的技术⽅案,那么下⼀个问题就是让我们的测试⽤例并发的在多端中运⾏。我们这⾥以Java的TestNG测试框架为例作为讲解。TestNG在处理⽤例并发⽅⾯是⾮常⽅便的。
TestNG有多种并发⽅式⽀持,主要包括:⽅法的并发,class级的并发,和test级的并发,它们的区别如下:
tests级别:不同test tag下的⽤例可以在不同的线程执⾏,相同test tag下的⽤例只能在同⼀个线程中执⾏。
classs级别:不同class tag下的⽤例可以在不同的线程执⾏,相同class tag下的⽤例只能在同⼀个线程中执⾏。
methods级别:所有⽤例都可以在不同的线程去执⾏。
xml⽂件中配置如下
<suitename="Testng Parallel Test"parallel="tests"thread-count="5">
<suitename="Testng Parallel Test"parallel="classes"thread-count="5">
<suitename="Testng Parallel Test"parallel="methods"thread-count="5">
<suitename="My suite" parallel="instances" thread-count="5">
实践中,很多时候我们在测试类中通过dependOnMethods/dependOnGroups⽅式,给很多测试⽅法的执⾏添加了依赖,以达到期望的执⾏顺序。TestNG能在多线程情况下依然遵循既定的⽤例执⾏顺序去执⾏。有些时候,我们需要对⼀个测试⽤例,⽐如⼀个http接⼝,执⾏并发测试,即⼀个接⼝的反复调⽤。在
@Test标签中指定threadPoolSize和invocationCount可以实现该需求。
例如:@Test(threadPoolSize=5,invocationCount=10)
其中threadPoolSize表明⽤于调⽤该⽅法的线程池容量,该例就是同时起5个线程并⾏执⾏该⽅法;invocationCount表⽰该⽅法总计需要被执⾏的次数。该例⼦中5个线程同时执⾏,当总计执⾏次数达到10次时停⽌。
实例如下:
写两个类 ThreadCase1和ThreadCase1
1public class ThreadCase1 {
2
3 @Test
4
thread技术5public void m1()throws InterruptedException {
6
7 Thread.sleep(1000);
8
9 System.out.println("*****"+Thread.currentThread().getId());
10
11 assertTrue(true);
12
13 }
14
15 @Test
16
17public void m2()throws InterruptedException {
18
19 Thread.sleep(1000);
20
21 System.out.println("*****"+Thread.currentThread().getId());
22
23 assertTrue(false);
24
25 }
26
27 @Test
28
29public void m3()throws InterruptedException {
30
31 Thread.sleep(1000);
32
33 System.out.println("*****"+Thread.currentThread().getId());
34
35 assertTrue(true);
36
37 }
38
39}
40
41public class ThreadCase2 {
42
43 @Test
44
45 public void m1()throws InterruptedException {
46
47 Thread.sleep(1000);
48
49 System.out.println("*****"+Thread.currentThread().getId());
50
51 assertTrue(true);
52
53 }
54
55 @Test
56
57 public void m2()throws InterruptedException {
58
58
59 Thread.sleep(1000);
60
61 System.out.println("*****"+Thread.currentThread().getId());
62
63 assertTrue(false);
64
65 }
66
67 @Test
68
69public void m3()throwsInterruptedException {
70
71 Thread.sleep(1000);
72
73 System.out.println("*****"+Thread.currentThread().getId());
74
75 assertTrue(true);
76
77 }
78
79}
在配置⽂件中指定parallel为class,thread-count值为2
<!DOCTYPE suite SYSTEM "/testng-1.0.dtd"> "TestngParallel Test"parallel="classes "thread-count="2"> "case1">
<classes>
"st5.ThreadCase1"/>
"st5.ThreadCase2"/>
</classes>
</test>
</suite>
查看运⾏结果:3292ms完成测试,如果不使⽤多线程则⾄少需要6s 原创不易,如果⽂章帮到了你,欢迎点赞、转发,让更多的朋友受益!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论