Pytest插件pytest-repeat重复执行

安装

pip install pytest-repeat

doc

https://pypi.org/project/pytest-repeat/

https://github.com/pytest-dev/pytest-repeat

  • 2020年10月31日最后一次更新
  • 最新版本0.9.1
  • 其他没啥内容,就一些简单的使用方法,也在侧面上说明这个插件是比较简单的

使用方法

第一种用法:装饰器 @pytest.mark.repeat(次数)

  • 示例代码

    import pytest
    @pytest.mark.repeat(3)
    def test_a01():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv',__file__])
  • 示例输出

    collecting ... collected 3 items
    
    test_demo.py::test_a01[1-3] FAILED
    test_demo.py::test_a01[2-3] FAILED
    test_demo.py::test_a01[3-3] FAILED ================================== FAILURES ===================================
    ________________________________ test_a01[1-3] ________________________________ @pytest.mark.repeat(3)
    def test_a01():
    > assert 1==2
    E assert 1 == 2 test_demo.py:4: AssertionError
    ________________________________ test_a01[2-3] ________________________________ @pytest.mark.repeat(3)
    def test_a01():
    > assert 1==2
    E assert 1 == 2 test_demo.py:4: AssertionError
    ________________________________ test_a01[3-3] ________________________________ @pytest.mark.repeat(3)
    def test_a01():
    > assert 1==2
    E assert 1 == 2 test_demo.py:4: AssertionError
    =========================== short test summary info ===========================
    FAILED test_demo.py::test_a01[1-3] - assert 1 == 2
    FAILED test_demo.py::test_a01[2-3] - assert 1 == 2
    FAILED test_demo.py::test_a01[3-3] - assert 1 == 2
    ============================== 3 failed in 0.10s ==============================
  • 从结果看,重复插件的使用会让你的用例变成多个(这点未必是你想要的,要注意)

第二种用法:命令行参数

  • 语法

    pytest --count=3 test_demo.py
  • 示例代码

    import pytest
    def test_a01():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv','--count=5',__file__])
  • 输出跟上面第一个用法的是一样的

  • 但装饰器是要装饰在每个测试用例上的,而命令行的做法就是一把梭,全部运行多次。

第三种用法:结合repeat-scope运行

  • 如果我们要对多个测试函数进行重复运行,要么加多个装饰器,要么用命令行参数

  • 但是上述两种方法都是A重复,B重复这样,无法做到AB-AB-AB的模式

  • 如果要实现组合重复运行,那就要用到该插件提供的另外一个参数--repeat-scope

  • --repeat-scope类似于pytest fixture的scope参数,--repeat-scope也可以设置参数: sessionmoduleclass或者function(默认值)

    • function(默认)范围针对每个用例重复执行,再执行下一个用例
    • class 以class为用例集合单位,重复执行class里面的用例,再执行下一个
    • module 以模块为单位,重复执行模块里面的用例,再执行下一个
    • session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等
  • 示例代码1(不加repeat-scope):A运行2次,B运行2次

    import pytest
    
    def test_a():
    assert 1==2 def test_b():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv','--count=2',__file__])
    #运行结果 AABB
    =========================== short test summary info ===========================
    FAILED test_demo.py::test_a[1-2] - assert 1 == 2
    FAILED test_demo.py::test_a[2-2] - assert 1 == 2
    FAILED test_demo.py::test_b[1-2] - assert 1 == 2
    FAILED test_demo.py::test_b[2-2] - assert 1 == 2
    ============================== 4 failed in 0.11s ==============================
  • 示例代码(加repeat-scope):A-B运行2次

    import pytest
    
    def test_a():
    assert 1==2 def test_b():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv','--count=2','--repeat-scope=module',__file__]) # ABAB
    =========================== short test summary info ===========================
    FAILED test_demo.py::test_a[1-2] - assert 1 == 2
    FAILED test_demo.py::test_b[1-2] - assert 1 == 2
    FAILED test_demo.py::test_a[2-2] - assert 1 == 2
    FAILED test_demo.py::test_b[2-2] - assert 1 == 2
    ============================== 4 failed in 0.11s ==============================
  • 如果--repeat-scope=session在此处的效果是一样的

  • 这个插件的--repeat-scope=并没有同步fixture的scope(多了个package)

说在最后

  • Pytest-repeat.py的部分源码

    def pytest_addoption(parser):
    parser.addoption(
    '--count',
    action='store',
    default=1,
    type=int,
    help='Number of times to repeat each test') parser.addoption(
    '--repeat-scope',
    action='store',
    default='function',
    type=str,
    choices=('function', 'class', 'module', 'session'),
    help='Scope for repeating tests')

Pytest插件pytest-repeat重复执行的更多相关文章

  1. linux命令之 repeat 重复执行命令

    $ vim ~/.bashrc function repeat() { number=$1 shift echo $@ for n in $(seq $number); do $@ done } $ ...

  2. 重复执行用例(pytest-repeat)

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或 ...

  3. Pytest系列(13)- 重复执行用例插件之pytest-repeat的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常在做功能测试的时候,经常 ...

  4. Pytest系列(十三)- 重复执行之pytest-repeat的使用

    写在前面 这个插件,可以帮助我们很好的解决自动化测试过程中的一些偶线性bug难以复现的问题,但前提是,当前自动化脚本是独立的,不依赖任何其他脚本.个人觉得还是失败重运行的一种体现,就和TestNG是一 ...

  5. pytest文档27-pytest分布式执行(pytest-xdist)

    前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟.如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候, 我们会用测试人力成本换取时间成本,这个时候多找 ...

  6. Pytest(6)重复运行用例pytest-repeat

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来. 自动化运行用例时候,也会出现偶然的bug,可以针对单个用例, ...

  7. pytest文档58-随机执行测试用例(pytest-random-order)

    前言 通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果. pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码 ...

  8. Pytest测试框架(一):pytest安装及用例执行

    PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多.自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能. 安装 pip install -U pytest  ...

  9. Pytest(16)随机执行测试用例pytest-random-order

    前言 通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果. pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码 ...

  10. 二、为什么要选用pytest以及 pytest与unittest比较

    为什么要选择pytest,我看中的如下: 写case,不需要像unittest那样,创建测试类,继承unittest.TestCase pytest中的fixture(类似于setUp.tearDow ...

随机推荐

  1. 树上启发式合并(dsu on tree)

    树上启发式合并属于暴力的优化,复杂度O(nlogn) 主要解决的问题特点在于: 1.对于树上的某些信息进行查询 2.一般问题的解决不包含对树的修改,所有答案可以离线解决 算法思路:这类问题的特点在于父 ...

  2. Lakehouse架构指南

    你曾经是否有构建一个开源数据湖来存储数据以进行分析需求? 数据湖包括哪些组件和功能? 不了解 Lakehouse 和 数据仓库 之间的区别? 或者只是想管理数百到数千个文件并拥有更多类似数据库的功能但 ...

  3. ES文件浏览器局域网传输文件分析

    软件下载链接 1.前言 我之前从手机上传输到电脑上一些apk进行分析,都是使用es文件浏览器这款软件获取 app,传输方面使用QQ,这样很麻烦,走外网流量暂且不提,总是感觉浪费掉了局域网这个环境.简单 ...

  4. 程序员面试干货:漫谈计算机网络:数据链路层 ----- 数据链路路在何方? --从点对点数据传输 到 "广泛撒网,重点捕获"的局域网

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...

  5. day16 正则表达式 & 反射 & Java内存模型(JMM)

    day16 class 1)获取一个类的所有信息(变量.方法.构造方法) 2)创建类对象newInstance() Field 1)访问变量或给变量赋值 Method 1)执行具体类对象的指定方法 3 ...

  6. 【SQL进阶】【CASE/IF、COUNT/SUM、多条记录拼接为一个内容】Day03:聚合分组查询

    〇.今日内容概述 一.聚合函数 1.SQL类别高难度试卷得分的截断平均值[去最高最低分求平均] 自己的想法 SELECT tag, difficulty, ROUND((SUM(score)-MIN( ...

  7. 协程- gevent模块

    协程 1.什么是协助:在单线程下实现并发效果 2.协程的原理: 通过代码监听IO操作一旦遇到 IO 操作就立刻切换下一个程序 让cpu一直在工作 这样就可以一直占用CPU的效率 提高程序执行效率 切换 ...

  8. vba + ado +sql 连接数据库的常用操作方式

    vba + ado +sql 连接Access.MySQL.Oracle Private Sub Connection_DBA() '********************************* ...

  9. 链接脚本中 AT> 的作用

    缘由 这两天在梳理芯片的启动流程, 研究到了链接脚本(样本为stm32cube ide 中的 stm32f407 的 flash 链接脚本). 产生了一个疑问AT>是什么? 答案 AT>就 ...

  10. Python报AttributeError: module 'string' has no attribute 'join'解决方法

    报:AttributeError: module 'string' has no attribute 'join' 属性错误:模块"string"没有属性"join&qu ...