12.fixture带参数传递
场景:测试离不开数据,为了数据灵活,一般数据都是通过参数传的
解决:fixture通过固定参数request传递;
步骤:在fixture中增加@pytest.fixture(params=[1,2,3,'linda'])在方法参数写request
如下图,运行结果:
参数传入的可以是列表是元祖
如下图,eval将字符串str当成有效的表达式来求值,并返回结果:
当我们测试登录或者搜索这种同样的场景需要不同的数据时,就可以使用这种参数组合的方法:
运行结果如下:
方法名作为参数,indrect=True,可以把传过来的参数当函数执行
运行结果如下图:
13.mark中的skip与xfail
skip使用场景
调试时不想运行这个用例
标记无法在某些平台上运行的测试功能
在某些版本中执行,其他版本中跳过
当前的外部资源不可用时跳过(如果测试数据是从数据库中取到的,连接数据库的功能如果返回结果未成功就跳过,因为执行也都报错)
解决:
@pytest.mark.xfail跳过这个测试用例,可以加条件skipif,在满足条件下才希望通过,否则跳过这个测试。
skipif
xfail场景:
功能测试尚未实施或者未修复的错误,当测试通过时尽管预计会失败(标记为@pytest.mark.xfail),它是一个xpass将在测试摘要中报告
你希望测试由于某种情况而就应该失败
解决:
@pytest.mark.xfail
skip的使用:
@pytest.mark.xfail的使用:
14.使用自定义标记mark只执行某部分用例
场景:
只执行符合要求的某一部分用例,可以把一个web项目划分为多个模块,然后指定模块名称执行
app自动化时,如果想android和ios公用一套代码,也可以使用标记功能,表明哪些是ios用例,哪些是android的,运行代码时指定mark名称运行就可以
解决:
在测试用例方法上加@pytest.mark.webtest
执行:
-s 参数:输出所有测试用例的print信息
-m:执行自定义标记的相关用例pytest -s test_mark.py
pytest -s test_mark.py -m=webtest
pytest -s test_mark.py -m apptest
pytest -s test_mark.py -m "not ios"
执行pytest -v -s test_case/test_fix.py -m=search命令 ,还可以使用and、or、not 这些逻辑符指定运行哪些标签,运行结果:
如何去掉warning呢? 可以在conftest.py文件中添加标签,以上运行的时候就不会提示warning:找不到这些名字了;在conftest.py文件中加入pytest_configure函数,注意⚠️一定要使用这个函数中的markers遍历,也必须是
pytest_configure文件名的函数
15.多线程并行与分布式执行
场景:
测试用例1000条,一个用例执行1分钟,一个测试人员执行需要1000分钟,通常我们会用人力成本换取时间成本
加几个人一起执行,时间就会缩短,如果10人一起执行只需要100分钟,这就是一种并行测试,分布式场景
解决:
pytest分布式执行插件:pytest-xdist,多个cpu或主机执行前提:用例之间都是独立的,没有先后顺序,随机都能执行,可重复运行不影响其他用例
安装:
pip3 install pytest-xdist
多个cpu并执行用例,直接加-n 3是执行并行数量:pytest -n 3
在多个终端下一起执行
16.生成html测试报告