假如项目中有测试用例1000条,一条测试用例需要执行1分钟,一个测试人员需要1000分钟才能完成一个轮回测试。通常会用人力成本换取时间成本,加几个人的一起执行,时间就会缩短。如果10人一起执行只需要100分钟,这就是一种并行测试,分布式的场景。pytest-xdist是pytest分布式执行插件,可以多个cpu或主机执行,这款插件允许用户将测试并发执行(进程并发),插件是动态决定测试用例执行顺序的,为了保证各个测试能在各个独立线程里正确的执行,应该确保测试用例的独立性。
1.安装
pip install pytest-xdist
多个cpu并行执行用例,需要在pytest后面添加-n参数,如果参数为auto,会自动检测系统的cpu数目。如果参数为数字,则指定运行测试的处理器进程数
pytest -n auto
pytest -n [num]
2.案例
某个项目有200条测试用例,每条测试用例之间没有关联关系,互不影响,需要在短时间内执行完成,可以加上-n参数,使用多个cpu并行测试。
运行方法:
pytest -n 4
进入到项目目录下,执行pytest可以将项目目录下所有测试用例识别出来并且运行,加上-n参数,可以指定4个cpu并发执行。
3.结合pytest-html生成测试报告
测试报告通常在项目中尤为重要,报告可以体现测试人员的工作量,开发人员可以从测试报告中了解缺陷的情况,测试报告为纠正软件存在的质量问题提供依据,为软件的验收和交付打下基础。测试报告根据内容的侧重点,可以分为“版本测试报告”和“总结测试报告”。执行完pytest测试用例,可以使用pytest.HTML插件生成HTML格式的报告。
安装:pip install pytest-html
执行方法:pytest --html=path/to/html/report.html
结合pytest-xdist使用:pytest -v -s -n 3 --html=report.html --self-contained-html
#test_scope1
import pytest
@pytest.fixture(params=[1,2,3])
def data(request):
return request.param
def test_not_2(data):
print(f"测试数据:{data}")
assert data < 5
import pytest
@pytest.fixture(autouse="true")#每个测试函数都会自动调用这个前置函数
def myfixture():
print("this is my fixture")
class TestAutoUse:
def test_one(self):
print("执行test_one")
assert 1+2 == 3
def test_two(self):
print("执行test_two")
assert 1==1
def test_three(self):
print("执行test_three")
assert 1+2 == 2
执行结果
html报告
生成的测试报告最终是HTML格式,报告内容包括标题、运行时间、环境、汇总结果以及用例的通过个数、跳过个数、失败个数、错误个数、期望失败个数,不期望通过个数,重新运行个数,以及错误的详细展示信息。报告会生成在运行脚本的同一路经,需要执行路径田间-html=path/to/html/report.html这个参数配置报告的路径。如果不添加--self-contained-html这个参数,生成报告的css文件是独立的,分享的时候容易数据丢失。