首页 > 其他分享 >Pytest插件pytest-repeat重复执行

Pytest插件pytest-repeat重复执行

时间:2023-01-28 11:55:54浏览次数:55  
标签:__ 插件 repeat py assert pytest test

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')
    

标签:__,插件,repeat,py,assert,pytest,test
From: https://www.cnblogs.com/wuxianfeng023/p/17070034.html

相关文章

  • maven中插件plugin和依赖dependency的区别
    maven中插件plugin和依赖dependency的区别https://www.cnblogs.com/Melo-ccyfy/p/15005089.html ......
  • MybatisPlus分页插件
    MybatisPlus分页插件@ConfigurationpublicclassMybatisPlusConfig{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisP......
  • Microsoft Edge浏览器Tampermonkey(油猴)插件的安装与使用
    打开MicrosoftEdge浏览器,点开此链接,安装油猴Tampermonkey下载安装好之后选择在工具栏中显示效果就是这样点击获取新脚本搜索学习通找到这个,并点击安装会......
  • vue学习之-----移动端插件FastClick
    1、为什么要使用fastclick(1)移动端的浏览器,默认会在用户点击屏幕300ms延迟之后,才会触发点击事件【为了检查用户是否在做双击】,为了能立即响应用户的点击事件,所以有了fastcl......
  • Repeater控件分列显示
     今天有学生问如何用Repeater控件进行分列显示,以前进行分列显示时,要么完全自定义输出,要么使用DataList控件,可就是没有用过Repeater控件,又懒得动脑了,从网上搜了一下,得到如下......
  • 你知道这个提高 Java 单元测试效率的 IDEA 插件吗
    前言2023年我们公司主抓代码质量,所以单元测试必不可少,而且都写到了年底的绩效目标中了。在考虑如何达成这个目标的过程中,我发现了一个关于单元测试的IDEA插件——SquareTe......
  • vue学习之----- 图片懒加载插件【vue-lazyload】
    1、用npm安装npmivue-lazyload2、main.js中绑定到vue对象上 3、在需要懒加载的img标签上把src换成v-lazy 4、懒加载的意义:(1)显示在屏幕之外的图片不加载,图片......
  • 关于我写了一个vite插件那些事
    为什么要写这个插件解决了什么问题在我们开发的过程中有​​开发模式​​​和​​生产模式​​​,那有些测试代码会在开发模式的时候使用,在生产环境要删掉,一般是手动删除,另......
  • jQuery复习(动画效果/插件机制/jQuery文档的结构图)
    动画效果在一定的时间内,不断改变元素样式slideDown()/slideUp()/slideToggle()fadeOut()/fadeIn()/fadeToggle()show()/hide()/toggle()animate({结束时的样式},......
  • idea中使用插件操作mysql、redis
    idea中使用插件操作mysqlidea右侧选择Database 输入连接信息 可以写sql并执行  idea中使用redis插件操作redis安装插件 安装“Redis” 输入连接......