目前Pytest是最受欢迎的测试框架,今天就给大家推荐几款实用又好上手的插件,赶快往下看,肯定有你的菜!!!

01


Pytest-ordering


作用:控制测试用例的执行顺序

使用:

       1.安装:pip install pytest-ordering

     2.在测试用例上通过装饰器的形式标注:通过指定order,如@pytest.mark.run(order);或者指定标签;

实例:



pytest以package为单位怎么分布式执行 pytest ordering_用例

如上图所示,可以指定order为阿拉伯数字,也可直接用标签,如@pytest,mark.last代表指定最后一个运行。



pytest以package为单位怎么分布式执行 pytest ordering_执行顺序_02

同时在源码中也指定了其他一些运行顺序(上图),我们可以直接使用这些索引值快速指定用例的执行顺序,提高运行效率。

02


Pytest-dependency


作用:管理用例的依赖关系

使用:       

       1.安装:pip install pytest-dependency

       2.用@pytest.mark.dependency()装饰指定被依赖对象;执行的用例需要指定依赖对象,入参可以是一个对象,也可以是多个对象的集合;

实例:



pytest以package为单位怎么分布式执行 pytest ordering_依赖关系_03

如图,指定test_b执行前依赖test_a,若test_a运行失败则直接跳过test_b;同时如果依赖多个对象时,depends传入list。



pytest以package为单位怎么分布式执行 pytest ordering_依赖关系_04

同时,我们也可以为被依赖对象指定别名name,这样就化简了用例名冗长时的不便。

看到这里你可能会疑惑,pytest-order与pytest-dependency是差不多的功能吗?当然不是咯,让我们仔细揣摩下“顺序关系”和“依赖关系”。顺序关系,是A执行完B再执行,也就是说无论A是否通过,B都会执行;而依赖关系是指:A依赖B,那么当且只有A执行通过后才能执行B,字面意思就是如果B执行失败,那么就不执行A了。

【Tips】考虑到依赖关系不容易维护,所以当用例量较大时不推荐使用哦!

03


Pytest-xdist


作用:多线程并发与分布式执行,适用于当用例量较大想提高运行速度或

        者需要压力测试的场景

使用:

       1.安装:pip install pytest-xdist

       2.命令行运行:pytest -n  num ,其中num表示开启指定线程数;

实例:



pytest以package为单位怎么分布式执行 pytest ordering_pytest源码_05

上图在不开启线程的情况下正常执行三个用例需要耗费5.18s;



pytest以package为单位怎么分布式执行 pytest ordering_pytest源码_06

通过pytest -n auto 会自动识别系统的cpu数目,从上图运行结果,可以看到是假双核的。在对比不进行分布式运行下,这次运行时间就缩短了很多。



pytest以package为单位怎么分布式执行 pytest ordering_pytest源码_07

此外,也可以指定线程数,如pytest - n 3,表示指定开启3个线程。(由于小编设备单核,所以实际运行的时候并没有开启3个线程)

Tips】通过上面的实例可以看出,pytest-xdist对电脑性能有较大的依赖;更重要的一点,使用时要确保用例之间没有依赖关系、顺序关系,也就是说每个用例是可以独立重复运行的,因为分布式执行是同时随机将用例分配到不同线程中,如果用例之间有关系肯定会影响到运行结果(此处敲黑板!)

04


Pytest-assume


作用:多重校验。当一个用例中存在多个校验点时,如果直接用assert,

       若遇到断言失败则不会继续执行,而assume则刚好弥补了这一缺陷。

使用:

       1.安装 pip install pytest-assume

       2.代码格式:pytest.assume(x == y)

实例:



pytest以package为单位怎么分布式执行 pytest ordering_依赖关系_08

在上图实例中,入参了三组数据,每组进行了三个断言。其中以(1-0)为例,捕获了两处断言失败的异常,由此可以看出,即使第一处断言失败也不影响后面的程序再执行下去,这样更方便我们日常的调试。



pytest以package为单位怎么分布式执行 pytest ordering_用例_09

同时支持上下文管理器,这样代码看起来更优雅些。但要注意的是,每个with中只支持一个断言,如果第一个断言失败则不进行后续断言(这样的写法等效于assert了)。

以上就是今天小编要分享的插件了,是不是简单又实用?那么赶快去实操一波吧。后续仍会再给大家带来更多好玩好用的插件,敬请期待吧!