顾老师安全测试新课,报名地址:html
http://www.hbz100.com/pc/course/courseInfo.do?courseId=182320200226121405459。疫情期间,您在注意身体安全的同时,关注身体安全了吗?500元工做几天的薪酬,让你薪资翻几倍。java
顾翔老师的《软件测试技术实战设计、工具及管理》网上购买地址:python
https://item.jd.com/34295655089.html安全
《基于Django的电子商务网站》网上购买地址:微信
https://item.jd.com/12082665.htmlapp
店铺二维码:框架
来源:51testing
maven
自动化测试用例失败重跑有助于提升自动化用例的稳定性,那咱们来看一下,python和java生态里都有哪些具体作法?ide
怎么作工具
若是是在python生态里,用pytest作测试驱动,那么能够经过pytest的插件pytest-rerunfailures来实现失败用例重跑,具体的使用方式有两种,一种是经过命令行指定pytest --reruns 2 --reruns-delay 1,reruns表示重复运行次数,reruns-delay 表示重复运行是的延迟时间。另外一种方式是经过@pytest.mark.flaky(reruns=2, reruns_delay=1),这种方式通常运用,不想全局全部的测试用例都重跑,只是特定的测试用例须要跑,那就在特定的测试方法上使用这个标记。
若是是在java生态里,用junit作测试驱动,junit5提供了注解@RepeatTest(2),能够试下测试类或者测试方法的重复运行,也能够自定义,经过实现个TestRule接口,来控制测试用例的运行。
public class MyTestClass { public RepeatRule repeatRule = new RepeatRule(); 10) ( public void testMyCode() { //your test code goes here } } import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; ( RetentionPolicy.RUNTIME ) ({ METHOD, ANNOTATION_TYPE }) public Repeat { int value() default 1; } import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; public class RepeatRule implements TestRule { private static class RepeatStatement extends Statement { private final Statement statement; private final int repeat; public RepeatStatement(Statement statement, int repeat) { this.statement = statement; this.repeat = repeat; } public void evaluate() throws Throwable { for (int i = 0; i < repeat; i++) { statement.evaluate(); } } } public Statement apply(Statement statement, Description description) { Statement result = statement; Repeat repeat = description.getAnnotation(Repeat.class); if (repeat != null) { int times = repeat.value(); result = new RepeatStatement(statement, times); } return result; } } |
还有就是若是使用到了maven能够添加一个rerunFailingTestsCount参数,不过这个是控制全部的用例了。
为何要让失败用例重跑呢
由于自动化通常都会在测试环境或者其余非线上的环境,因为环境的不稳定可能会致使测试用例莫名其妙的失败,是用例的稳定性大打折扣。这个时候加入失败重跑机制,可以在必定范围内提升测试用例的稳定性,作出更多的产出。
什么样的自动化用例要进行失败重跑
接口自动化测试用以建议能够加入这种失败重跑,而对于UI接口接口自动化,失败重跑的话,以为意义不大,由于每每当用例的失败的时候,要么是因为界面元素没加载出来,要么是用例的逻辑有问题,要么是意外的弹窗影响,这个时候应该让错误尽早的抛出来,好尽快的修复,而不是在哪儿一个劲的重试,没啥用。UI自动化应该作好显式和隐式等待。
什么样的失败用例应该重跑
在测试框架中,最好能区分出什么样的异常时服务异常,什么是测试框架自己的异常,对于服务异常能够适当重试,对于框架异常不进行重跑,直接抛出。断言失败固然更不须要重跑。因此在控制测试用例执行的时候,不要一古脑儿的全都重跑,有选择性的,既要保证稳定性,还要保证效率,让自动化发挥价值。
总结
测试要作到有的放矢,在合适的时候作合适的事情,自动化测试的价值就是由于它能快速的检查系统,若是由于重试致使运行的时间成倍增长,是没有任何意义的,还不如抛出错了,尽快去解决。并且自动化测试用例的运行顺序也要控制,处于业务前方的接口尽可能先跑,处于业务后方的接口尽可能后跑。好比登录接口和下单接口,登录接口属于业务靠前的,下单是靠后的,通常在测试下单接口的时候都要初始化登录状态,这个时候会调用登录接口,在测试用例批量执行的时候,能够先让登录接口测试用例先跑,若是这个接口有问题,那么其余须要登录接口配合的用例全都会失败,那这样后面的用例就不用跑了,这样会节省不少的时间。
顾翔老师与云测学院联合推出:软件测试分析与设计,请点击https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不一样观念欢迎与顾翔老师交流!
本文分享自微信公众号 - 软件测试培训(iTestTrain)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。