• pytest的一些实用插件实践


    1.多重校验 pytest-assume

    简单的校验assert,虽然可以写多个assert

        def test_add1(self):
            assert add(2,3)==5
            assert add(1,3)==3
            assert add(2,5)==7
    

    由于第二个断言失败,那么下面的断言就不会执行。
    所以如果需要多个断言,都执行就需要第三方插件 pytest-assume
    安装命令:

    pip install pytest-assume
    

    示例:

        def test_add2(self):
            pytest.assume(add(1,2)==3)
            pytest.assume(add(1,4)==3)
            pytest.assume(add(2,2)==4)
    

    这边即使第二个断言失败了,第三个断言还是会继续执行。

    2.设定执行顺序 pytest-ordering

    对于一些上下文依赖的,有时候可能需要设定一些特定执行顺序,pytest的ordering插件,就很好的解决了这个问题
    安装命令

    pip  install  pytest-ordering
    

    示例脚本如下:

    def test_order1():
        print ("first test")
        assert True
    
    def test_order2():
        print ("second test")
        assert True
    

    没有加上ordering,执行顺序是 test_order1----test_order2,如图:

     
    before.png

    加上顺序之后

    @pytest.mark.run(order=2)
    def test_order1():
        print ("first test")
        assert True
    @pytest.mark.run(order=1)
    def test_order2():
        print ("second test")
        assert True
    

    结果如下:

     
    after.png

    5.失败重跑 pytest-rerunfailures

    失败用例重跑,个人觉得这个是非常实用的插件。
    举个例子:
    在做UI自动化,如selenuim或者appium时,遇到某些元素未能及时显示,导致点击失败,如果加上重跑,那么将有效提高报告的准确性。
    安装命令:

    pip install pytest-rerunfailures 
    

    示例脚本

    class TestRerun():
    
        @pytest.mark.run(order=2)
        @pytest.mark.flaky(reruns=5)
        def test_random(self):
            print(1)
            pytest.assume((random.randint(0,4)+3)==5)
    
        @pytest.mark.run(order=3)
        def test_random2(self):
            '''
            不加mark 命令行中
            pytest -sq demo_rerun.py --reruns 5
            :return:
            '''
            print(2)
            pytest.assume((random.randint(0,4)+3)==5)
    
        @pytest.mark.run(order=1)
        @pytest.mark.flaky(reruns=6, reruns_delay=2)
        def test_example(self):
            print(3)
            assert random.choice([True, False])

    执行命令:

    pytest -sq demo_rerun.py --reruns 5
    pytest -sq demo_rerun.py --reruns 5  --reruns-delay 1
    

    二者的区别是,下面在每次重跑之前会等待 1 s
    同时也可以在脚本中指定定义重跑的次数,这个时候在运行的时候,就无需加上 --reruns 这个参数

    @pytest.mark.flaky(reruns=6, reruns_delay=2)
        def test_example(self):
            print(3)
            assert random.choice([True, False])
    
     

    对比可以看出,执行顺序发生了变化

  • 相关阅读:
    第八章 对象
    第七章 压缩列表
    第六章 整数集合
    Java中的Unsafe
    站在Java的角度看LinkedList
    Java内部类详解
    浅析Java中的final关键字
    ConcurrentHashMap
    阻塞队列
    线程池的使用和实现
  • 原文地址:https://www.cnblogs.com/peng-lan/p/11511569.html
Copyright © 2020-2023  润新知