数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
https://www.runoob.com/w3cnote/yaml-intro.html
测试⽤例执⾏时,有的⽤例需要登陆才能执⾏,有些⽤例不需要登陆。
setup 和 teardown ⽆法满⾜。fixture 可以。默认 scope(范围)function
你与其他测试⼯程师合作⼀起开发时,公共的模块要在不同⽂件中,要在⼤家都访问到的地⽅。
使⽤ conftest.py 这个⽂件进⾏数据共享,并且他可以放在不同位置起着不同的范围共享作⽤。
前提:
执⾏:
步骤:
将登陆模块带@pytest.fixture 写在 conftest.py
场景:
不想原测试⽅法有任何改动,或全部都⾃动实现⾃动应⽤,
没特例,也都不需要返回值时可以选择⾃动应⽤
解决:
使⽤ fixture 中参数 autouse=True 实现
步骤:
在⽅法上⾯加 @pytest.fixture(autouse=True)
场景:
你已经可以将测试⽅法前要执⾏的或依赖的解决了,
测试⽅法后销毁清除数据的要如何进⾏呢?
范围是模块级别的。类似 setupClass
解决:
通过在同⼀模块中加⼊ yield 关键字,yield 是调⽤第⼀次返回结果,
第⼆次执⾏它下⾯的语句返回。
步骤:
在@pytest.fixture(scope=module)。在登陆的⽅法中加 yield,之后加销毁清除的步骤
pip install pytest-ordering 控制用例的执行顺序(重点)
pip install pytest-xdist 分布式并发执行测试用例(重点)
pip install pytest-dependency 控制用例的依赖关系 (了解)
pip install pytest-rerunfailures 失败重跑(了解)
pip install pytest-assume 多重较验(了解)
pip install pytest-random-order 用例随机执行(了解)
pip intall pytest-html 测试报告(了解)
场景:
对于集成测试,经常会有上下文依赖关系的测试用例。
比如 10 个步骤,拆成 10 条 case,这时候能知道到底执行到哪步报错。
用例默认执行顺序:自上而下执行
解决:
可以通过 setup,teardown 和 fixture 来解决。也可以使用对应的插件。
安装:pip install pytest-ordering
用法:@pytest.mark.run(order=2)
注意:多个插件装饰器(>2)的时候,有可能会发生冲突
场景 1:
测试用例 1000 条,一个用例执行 1 钟,一个测试人员执行需要 1000 分 钟。
通常我们会用人力成本换取时间成本,加几个人一起执行,时间就会 缩短。
如果 10 人一起执行只需要 100 分钟,这就是一种布式场景。
场景 2:
假设有个报名系统,对报名总数统计,数据同时进行修改操作的时候有可能出现问题,
需要模拟这个场景,需要多用户并发请求数据。
解决:
使用分布式并发执行测试用例。分布式插件:pytest-xdist
安装及运行: pip install pytest-xdist
注意: 用例多的时候效果明显,多进程并发执行,同时支持 allure
场景:
测试失败后要重新运行 n 次,要在重新运行之间添加延迟时间, 间隔 n 秒再运行。
安装: pip install pytest-rerunfailures
执行:
pytest -vs --reruns 3 test_class.py
pytest -vs --reruns 5 --reruns-delay 1
@pytest.mark.flaky(reruns=5, reruns_delay=2) 用例的装饰器,指定这个用例rerun5次,每次延时2秒
注意:
场景:
一个方法中写多条断言,通常第一条过不去,下面就不执行了。
我们想报错也都执行一下。
安装: pip install pytest-assume
执行:
pytest.assume(1==4)
pytest.assume(2==4)
def pytest_collection_modifyitems(session, config, items:list):
for item in items:
item.name = item.name.encode('utf-8').decode('unicode-escape')
item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')
Allure2 解析过程:
下载地址:
https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/
布署报告:本地搭建一个网站服务(例如:Django)
python manage.py runserver (http://127.0.0.1:8000/)