如果想分布式执行用例,用例设计必须遵循以下原则:
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-parallel
比
pytst-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个进程运行
p
ytest 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次,但一旦发生故障就会停止