- pytest安装
- pip install pytst
- 测试用例的识别与运行
- 测试文件名规范
- test_*.py
- *_test.py
- 测试用例识别
- Test*开头的类所包含的所有test_*的方法(测试类不可以包含__init__方法)
- 不在类中的所有test_*方法
- pytest也可以执行unittest框架写的用例和方法
- pytest-rerunfailures-- 执行失败重新运行
- pytest-rerunfailures安装-- pip install pytest-rerunfailures
- 执行
- pytest --reruns 3 -v -s test_class.py-- 执行失败重试三次
- pytest -v --reruns 5 --reruns-delay 1 test_class.py-- 每次失败后间隔1s再重新运行
- pytest-assume-- 一个方法中有多个断言,当断言失败后,仍要程序继续执行时使用
- pip install pytest-assume-- 安装
- 执行
- pytest.assume(1==4)
- pytest.assume(2==4)
- pytest.main()-- 运行当前py文件中所有用例
- pytest.main("-v -x 类名")
- pytest.main(['-v','-s','类名'])
- 生命周期
- 模块级(setup_module/teardown_modeule)优先级最高 一个py文件为一个module
- 函数级(setup_function/teardown_function)只对函数用例生效,class之外的为函数
- 类级(steup_class/teardown_class)只在类中生效,
- 方法级(setup_method/teardown_method)方法中生效,优先级高于setup/teardown
- 类里面额(setup/teardown)运行在调用方法的前后
- pytest-fixture-- 标记是否需要前置操作,如:有的用例需要登录后测试,有的不需要登录后时用到
- 用法-- 在方法前加 @pytest-fixture()
- @pytest-fixture()
- def login():
- print(‘调用登录')
- def test_case1(login):
- pass
- def test_case2():
- pass
- def test_case3(login):
- pass
- 上述代码,login被标记为是否被前置调用,case1与case3为需要前置操作再执行,case2为不需要前置操作即可执行
- conftest.py-- 进行数据共享,通用的可以放在这个文件中
- 前置@pytest-fixture() 可写在配置文件中,自动被调用
- 文件名不可更改,必须为conftest.py
- 不需要import,pytest用例会自行查找
- 全局配置与前置执行,都可以写在这个文件中
- conftest.py与运行的用例要在同一个package中,并且有__init__.py的文件
- yield关键字-- 执行收尾,需要返回值需要使用adddinalizer
- 用法--在方法前加 @pytest-fixture(scope=module)--scope(作用域)
- @pytest-fixture(autouse==True)
- 在所有用例中执行被标记的方法
- @pytest-fixture(params=[1,1,1,'aaa'])
- def test_demo(request)--通过request获取传递的参数:
- return request.param
- 多参数传值
- @pytest.mark.parametrize("test_input,excepted",[("3+5",8),("2+5",7),(7*5,30)])
- def test_eval(test_input, excepted):
- asscert ecal(test_input) == expected
- ****indirect=Ture-- 把传递的参数当函数执行,即参数名为函数名
- @pytest.mark.parametrize(参数名,参数内容,indirect=Ture)
- @pytest.mark.skpi("注释内容")-- 跳过此用例
- @pytest.mark.skpiif(条件,reson=="条件不符合,不执行"
- @pytest.mark.xfail-- 标记为可能会失败,xfail/xpass,配合nameerror判断是否是真的fail
- pytest -s test_mark.pu -m -- m指令标志用例分类,在用例前标记@pytest.mark.[标签名字],可以将用例分类,执行时按照用例分类批量执行
- pytest -s test_mark.py -m ios
- pytest -s test_mark-py -m android
- pytest-xdist-- 多线程并行与分布式执行
- pip install pytest-xdist
- pytest -n 3 -- -n 3 为多个CPU内核并行数量
- 在多个终端下一起执行
- pytest-html -- 测试报告生成
- pip install pytest-html
- pytest -v -s --html=report.html --self-contained-html --生成html报告
|