Pytest系列(十三)- 重复执行之pytest-repeat的使用
写在前面
这个插件,可以帮助我们很好的解决自动化测试过程中的一些偶线性bug难以复现的问题,但前提是,当前自动化脚本是独立的,不依赖任何其他脚本。个人觉得还是失败重运行的一种体现,就和TestNG是一样的,下面我们来一起感受下这个插件的使用吧。
环境准备
- py.test版本 ≥ 2.8
- Python 2.7、3.4+
安装插件
pip3 install pytest-repeat -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
如何使用
结合《生成HTML报告插件之pytest-html的使用》这篇文章,还是结合输出的html报告来看比较直观。
1、举个例子
# -*- coding: utf-8 -*-
# @Time : 2020/11/29 8:52
# @Author : longrong.lang
# @FileName: test_repeat.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_repeat():
import random
num = random.randint(1, 9)
print(f"\n输出随机数:{num}")
assert num == 2
2、结合失败重跑,并输出报告
使用示例如下:
# 使用下面哪条命令都可执行
pytest --html=report.html --self-contained-html -s --reruns=5 --count=3 test_repeat.py
pytest --html=report.html --self-contained-html -s --reruns=5 --count 3 test_repeat.py
执行效果如下:

生成html报告如下:

注意:
- reruns=5:意思是失败重运行5次
- count=3:意思是重复执行3次
3、仅重复执行
使用示例如下:
# 使用下面哪条命令都可执行
pytest --html=report.html --self-contained-html -s --count=3 test_repeat.py
pytest --html=report.html --self-contained-html -s --count 3 test_repeat.py
执行效果如下:

很明显这里显示的只是重复执行3次
4、重复测试直到失败
这在我们实际测试中,就很受用了,验证偶现问题,可以反复运行相同的测试脚本直到失败,可以将pytest的 -x 选项与pytest-repeat结合使用,以强制测试运行程序在第一次失败时停止。
使用示例如下:
py.test --count=1000 -x test_repeat.py
执行效果如下:

5、使用注解的形式来实现重复执行
使用 @pytest.mark.repeat(count)标记在测试方法即可,这和TestNg的 @Test(invocationCount = 5)是一样的。
示例代码如下:
@pytest.mark.repeat(3)
def test_repeat2():
print("\n 测试脚本")
执行效果如下:

repeat-scope的使用
命令行参数
作用:可以覆盖默认的测试用例执行顺序,类似fixture的scope参数
- function:默认,范围针对每个用例重复执行,再执行下一个用例
- class:以class为用例集合单位,重复执行class里面的用例,再执行下一个
- module:以模块为单位,重复执行模块里面的用例,再执行下一个
- session:重复整个测试会话,即所有测试用例的执行一次,然后再执行第二次
1、重复执行class里面的用例
即class中的测试方法,不存在混合情况,示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/29 10:07
# @Author : longrong.lang
# @FileName: test_repeatClass.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
class TestRepeatClass1(object):
def test_repeat1(self):
print("\n repeat 1。。。。。。。。。")
class TestRepeatClass2(object):
def test_repeat2(self):
print("\n repeat 2。。。。。。。。。")
命令行执行:
pytest -s --count=2 --repeat-scope=class test_repeatClass.py
执行效果如下:

2、以模块为单位,重复执行模块里面的用例
可以理解为混合,既有类也有单独的测试方法,示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/29 10:07
# @Author : longrong.lang
# @FileName: test_repeatClass.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_repeat1():
print("test_repeat1")
class TestRepeatClass1(object):
def test_repeat1(self):
print("\n repeat 1。。。。。。。。。")
执行命令:
pytest -s --count=2 --repeat-scope=moudle test_repeatClass.py
执行效果如下:

兼容性问题
pytest-repeat不能与unittest.TestCase测试类一起使用。无论--count设置多少,这些测试始终仅运行一次,并显示警告
系列参考文章:
https://www.cnblogs.com/poloyy/category/1690628.html
Pytest系列(十三)- 重复执行之pytest-repeat的使用的更多相关文章
- Pytest系列(9) - 参数化@pytest.mark.parametrize
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest允许在多个级别启 ...
- Pytest系列(14)- 配置文件pytest.ini的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest配置文件可以改变 ...
- Pytest系列(13)- 重复执行用例插件之pytest-repeat的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常在做功能测试的时候,经常 ...
- Pytest系列(1) - 快速入门和基础讲解
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 目前有两种纯测试的测试框架, ...
- Pytest系列(一)初次了解
在之前,我分享过unittest系列,后来有很多人问我,能不能出pytest的教程,正好最近在整理pytest相关的资料,那么,就趁着这个机会,去和大家分享一下pytest系列. pytest是一个非 ...
- Pytest系列(4) - fixture的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面一篇讲了setup.te ...
- Pytest系列(7) - skip、skipif跳过用例
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest.mark.sk ...
- Pytest系列(八) - 自定义标记mark的使用
一.前言: pytest 支持自定义标记,自定义标记方便用例模块划分,也可以理解方便管理,配合标记参数 -m使用 二.示例代码 # -*- coding: utf-8 -*- # @Time : 20 ...
- Pytest 系列(27)- allure 命令行参数
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 先看看 allure 命令的帮助文 ...
随机推荐
- java关键字之abstract
Java 允许类,借口或成员方法具有抽象属性. abstract 修饰的类叫做抽象类,该类不能被实例化. abstract 修饰的方法叫抽象方法,抽象方法只有声明部分,没有具体的方法体. 接口总是 ...
- node.js+express框架 修改后自启【不需要再执行start】
我们每次修改完后都需要重新启动下才能刷新,就很麻烦'nodemon'解决了这个问题. 这里直接进行全局安装 npm install -g nodemon 安装到本地 npm install nodem ...
- SSM使用Ueditor
富文本编辑器(UEditor) 1. 下载UEditor富文本编辑器 建议下载 utf8-jsp 版本的,结构目录如下: 下载地址:链接:https://pan.baidu.com/s/1Nq0oJB ...
- Java反射复习笔记
目录 反射 获取反射的三种方式: Class对象的功能 获取 成员变量/成员变量们 获取 成员方法/成员方法们 获取构造方法们 获取全类名 Field:成员变量 Method:成员方法 Constru ...
- c#练习习题:while循环
2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人? int count = 80000; int year = 2006; while (count ...
- SQL2005数据库可疑的解决方法
sqlserver数据库标注为可疑的解决办法 一般引起可疑的原因是突然断电,服务器死机,强制关机导致正在运行的数据库文件损坏,需要进行修复.方法一:USE MASTER GOSP_CONFIGURE ...
- 程序员注意【自verycd.com的JavaAmg77 】
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...
- RoekerMQ4.x可视化控制台安装
1.下载 https://github.com/apache/rocketmq-externals 2.解压文件tar -zxvf rocketmq-externals-master.zip 3.移动 ...
- 关于“Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.”
Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the c ...
- JS之DOM(一)
一.DOM简介 什么是DOM?简单地说,DOM是是针对HTML和XML文档的一个API,一套对文档的内容进行抽象和概念化的方法. 学习过ORM的同学可能知道ORM是将数据库中的表映射到类,建立一个表和 ...