zoukankan      html  css  js  c++  java
  • 五、pytest插件分享

    1、关于pytest的插件说明

    插件,其实就是一种辅助工具。pytest的插件,其实就是在测试过程中,起到辅助的作用。例如:指定用例执行顺序、多重校验、失败重跑、、等等。关于pytest更多的第三方插件,详情可见http://plugincompat.herokuapp.com/

    2.assume插件使用介绍

    assume 插件 安装方法:pip install pytest-assume(需要有 python 环境和 pytest 环境)

    assume:assume 插件就是一个断言工具,和 pytest 自带的断言区别就在于:断言失败不会阻塞后面的用例

    demo:

    import time

    import pytest

    import random

    # 普通断言

    def func(x):

       return x + 1

    def test_answer():

       assert func(3) == 5

       assert func(3) == 5

       assert func(3) == 5

    普通的 assert 断言,在第一条用例出现错误时,就不会继续执行。

    # assume断言

    def test_answer():

        pytest.assume(3==3)

       pytest.assume(4 == 3)

       pytest.assume(5 == 3)

       pytest.assume(6 == 3)

    assume 断言和 assert 断言唯一不同的地方就在于,即使第一条用例未通过,也会继续往下执行

    适用场景:

    如果,用例需要顺序执行,则不推荐使用 assume 断言。假设,B用例需要A用例通过后才能继续操作,如果使用 assume 断言,则不管A用例是否通过,都会继续执行B用例。这样的结果是不符合我们自动化测试的预期的。所以,如果是顺序执行的用例,还是使用 assert 断言比较好。

    但是,有另外一种需求。比方说:对整个 web 页面进行自动化操作,功能与功能之间并没有很多联系,那此时就必须使用 assume 断言。可以设想,如果因为某个页面元素没有加载出来,导致该用例失败,则后面的用例也无法再继续进行测试。解决办法只有重新再跑一遍,这样的做法很浪费时间资源。

    所以,两种断言方式,选择哪一种,看个人具体需求。用例与用例之间,没有依赖关系的,则使用 assume 断言,有依赖关系的,使用 assert 断言

    3.rerunfailures插件使用介绍

    rerunfailures 插件 安装方法:pip install pytest-rerunfailures(需要有 python 环境和 pytest 环境)

    rerunfailures:rerunfailures 插件,顾名思义,失败重跑。在做UI自动化当中,最常见的问题就是页面加载超时。如果因为加载超时而定位不到元素,最后导致用例失败,这用例失败得很冤。所以我们需要再给用例一次机会,当用例执行成功后,即使还有剩余执行次数,也不会再继续执行。简单的说:执行结果 == False,rerunfailures生效,执行结果 == True,rerunfailures失效

    demo:

    import time

    import pytest

    import random

    class TestRerun():

        @pytest.mark.flaky(reruns=10)

        def test_random(self):

            pytest.assume((random.randint(0,3)+4)==10)

        def test_random2(self):

            '''

            不加mark 命令行中添加:--reruns 5

            :return:

            '''

            pytest.assume((random.randint(0,4)+6)==5)

        @pytest.mark.flaky(reruns=6, reruns_delay=2)

        def test_example(self):

            print(3)

            assert random.choice([True, False])

    1、在修饰符内传参@pytest.mark.flaky(reruns=10)

    这是给下面的用例声明了,如果该用例失败了,可以再执行,总共可重复执行10次,10次过后还失败,则不再允许重复执行。

    2、没有修饰符

    如果没有修饰符,一样是可以让用例重复执行的。只需要在命令行中加入 --reruns N 即可。例如:pytest --reruns 5:这声明了,所有用例,如果失败了,可以再执行,总共可重复执行10次,10次过后还失败,则不再允许重复执行。但使用命令行声明的话,需要注意一点:该声明是全局生效,也就是说,所有用例执行失败,都可以重复执行5遍。

     

    3、指定重试时间@pytest.mark.flaky(reruns=6, reruns_delay=2)

    如果在修饰符内传参: reruns_delay=2,则说明指定了重试时间。每次失败后,间隔 2 再次执行

    4.ordering插件使用介绍

    ordering 插件 安装方法:pip install pytest-ordering(需要有 python 环境和 pytest 环境)

    ordering:ordering 插件在调试中使用较多。如果我们的用例有依赖性,并且是顺序执行的,使用常规方法调试会比较麻烦。举个例子:后面所有的用例都必须依赖A用例,只有当A用例执行通过,后面的所有用例才能执行。但除了A用例外,其他用例并没有依赖关系,每次调试都需要重头到位跑一遍,这个过程太浪费时间资源,所以就需要使用 ordering 插件指定用例执行顺序。简单的说,就是打乱原先的顺序,让用例照着我们想要的顺序去执行。

    demo:

    import time

    import pytest

    import random

    g@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

    用法其实超级简单,就在修饰符中传参 order=N 即可。ordering 插件的场景在介绍中已经说的很明白了,个人可根据需求,判断是否需要使用 ordering 插件。

    5.总结

    pytest还有很多很多的插件,但是使用这些插件的时候,建议做一些封装工作。如果没有封装直接调用,时间长了,会造成代码沉冗。插件虽好,但建议合理使用。

    以后发现更多优秀的插件,本人会继续分享。

     
  • 相关阅读:
    【笔记】初探KNN算法(2)
    【笔记】初探KNN算法(3)
    将onenote快速复制粘贴到博客园后台
    【笔记】numpy.array基础(2)
    【笔记】matplotilb数据可视化基础
    【笔记】numpy.array的常用基本运算以及对数据的操作
    【笔记】初探KNN算法(1)
    关于解决numpy使用sklearn时的警告问题
    【笔记】读取数据以及简单的数据探索
    【笔记】numpy.array基础(3)
  • 原文地址:https://www.cnblogs.com/hlsam/p/13152738.html
Copyright © 2011-2022 走看看