自动化测试效率提升方案

105 篇文章 11 订阅
28 篇文章 0 订阅

本文注重自动化测试用例并行方案的设计,忽略了具体代码实现的细节。代码实现细节大家利用网络资源可以轻松搜索到相关内容!

方案概述

目前业界主流提升测试效率的方案如下:

  • 自动化测试脚本并行运行;
  • 在多终端同时跑脚本;
  • 编写自定义类库解决自动化api无法提供的功能或者对工具提供的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

public class ThreadCase1 {

 @Test

public void m1()throws InterruptedException {

     Thread.sleep(1000);

     System.out.println("*****"+Thread.currentThread().getId());

      assertTrue(true);

         }

 @Test

public void m2()throws InterruptedException {

      Thread.sleep(1000);

      System.out.println("*****"+Thread.currentThread().getId());

      assertTrue(false);

         }

 @Test

public void m3()throws InterruptedException {

      Thread.sleep(1000);

      System.out.println("*****"+Thread.currentThread().getId());

      assertTrue(true);

         }

}

public class ThreadCase2 {

  @Test

  public void m1()throws InterruptedException {

          Thread.sleep(1000);

          System.out.println("*****"+Thread.currentThread().getId());

          assertTrue(true);

         }

  @Test

  public void m2()throws InterruptedException {

         Thread.sleep(1000);

         System.out.println("*****"+Thread.currentThread().getId());

         assertTrue(false);

         }

 @Test

public void m3()throwsInterruptedException {

        Thread.sleep(1000);

        System.out.println("*****"+Thread.currentThread().getId());

        assertTrue(true);

         }

}

在配置文件中指定parallel为class,thread-count值为2

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">

"TestngParallel Test"parallel="classes "thread-count="2">

"case1">

 <classes>

"com.my.test5.ThreadCase1"/>

"com.my.test5.ThreadCase2"/>

 </classes>

 </test>

</suite>

查看运行结果:3292ms完成测试,如果不使用多线程则至少需要6s

原创不易,如果文章帮到了你,欢迎点赞、转发,让更多的朋友受益!

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值