pytest-xdist/pytest-parallel多进程执行测试用例

如果想分布式执行用例,用例设计必须遵循以下原则:
1.用例之间都是独立的,
2.用例a不要去依赖用例b
3.用例执行没先后顺序,
4.随机都能执行每个用例都能独立运行成功每个用例都能重复运行,不影响其它用例
这跟就我们平常多个人工测试一样,用例都是独立的,可以随机分配不同人员执行,互相不依赖,用例之间也不存在先后顺序
pytest-xdist/pytest-parallel安装及查看是否安装

安装
pip install pytest-xdist
pip install pytest-parallel
查看
pip show pytest-xdist

pytest-xdist
多cpu并行执行用例,直接加个-n参数即可,后面num参数就是并行数量,比如num设置为3
-n auto 自动侦测系统里的CPU数目
-n num 指定运行测试的处理器进程数

> pytest -n 3

正常运行需要消耗时间:7.12 seconds

E:\YOYO\web_conf_py>pytest
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py, inifile:
plugins: xdist-1.23.2, metadata-1.7.0, html-1.19.0, forked-0.2
collected 7 items

baidu\test_1_baidu.py ..                                                 [ 28%]
baidu\test_2.py ..                                                       [ 57%]
blog\test_2_blog.py ...                                                  [100%]

========================== 7 passed in 7.12 seconds ===========================

设置并行运行数量为3,消耗时间:3.64 seconds,大大的缩短了用例时间

E:\YOYO\web_conf_py>pytest -n 3
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py, inifile:
plugins: xdist-1.23.2, metadata-1.7.0, html-1.19.0, forked-0.2
gw0 [7] / gw1 [7] / gw2 [7]          #####代表启动进程数
scheduling tests via LoadScheduling
.......                                                                  [100%]
========================== 7 passed in 3.64 seconds ===========================

使用pytest-xdist插件也能生成html报告,完美支持pytest-html插件

pytest -n 3 --html=report.html --self-contained-html

对比说明:
pytest-parallelpytst-xdist相对好用,功能支持多。
pytst-xdist不支持多线程,而pytest-parallel支持python3.6及以上版本,如果想做多进程并发在linux或者mac上做,在Windows上不起作用(Workers=1),如果做多线程linux/mac/windows平台都支持,进程数为workers的值。
pytest-parallel常用配置命令如下
–workers (optional) *:多进程运行需要加此参数, *是进程数。默认为1。
–tests-per-worker (optional) *:多线程运行, *是每个worker运行的最大并发线程数。默认为1
pytest test.py --workers 3:3个进程运行
pytest test.py --tests-per-worker 4:4个线程运行
pytest test.py --workers 2 --tests-per-worker 4:2个进程并行,且每个进程最多4个线程运行,即总共最多8个线程运行。

【特别注意】:
1.pytest-parallel的workers参数在windows系统下永远是1,在linux和mac下可以取不同值。
2…pytest-parallel加了多线程处理后,最后执行时间是运行时间最长的线程的时间。
3.在windows下想用多进程的选pytst-xdist; 想用多线程的选pytest-parallel

扩展:
重复执行用例:
使用 --count 命令行选项指定要运行测试用例和测试次数

py.test --count=10 test_file.py
pytest baidu/test_1_baidu.py -s --count=5

会第一个用例运行5次 然后运行第二个用例5次 如果希望 第一个用例 第二个用例这样按顺序重复5次 要用到--repeat-scope

pytest tearr_function.py -s --count=5 --repeat-scope=session

如果要在代码中标记要重复多次的用例 可以使用

@pytest.mark.repeat(count)

这样执行用例时候,就不用带上--count参数,只针对test_02重复执行5

pytest tearr_function.py -s

果您正在尝试诊断间歇性故障,那么一遍又一遍地运行相同的测试直到失败是有用的。您可以将pytest-x选项与pytest-repeat结合使用,以强制测试运行器在第一次失败时停止。例如:

> py.test --count=1000 -x test_file.py

这将尝试运行test_file.py 1000次,但一旦发生故障就会停止

你可能感兴趣的:(pytest)