1.pytest介绍
- pytest是一个非常成熟的全功能的python测试框架
- 简单灵活,易上手
- 支持参数化
测试用例的skip和xfail,自动失败重试等处理
- 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appium等自动化测试、接口自动化测试(pytest+requests);
- pytest并且具有很多第三方插件,并且可以自定义扩展,比较好用的比如pytest-allure(完美 html测试报告生成),pytest-xdist(多cpu分发)等;
- 可以很好的和jenkins集成
单元框架类似与unitest,但是比unitest更加成熟
pytest文档:https://docs.pytest.org/en/latest/contents.html
第三方库:https://pypi.org/search/?q=pytest
2.pytest安装与依赖
pip install -U pytest U表示升级
pip insetall pytest-sugar ( sugar可以对我们运行的过程界面进行美化)
pip install pytest-rerunfailures( rerunfailures可以重新运行执行出错的测试用例)
pip install pytest-xdist( xdist多任务并发的执行测试用例)
pip install pytest-assume( assume可以在测试用例里面添加断言,通常是断言出错了就不执行了,但是通过用这个包,就可以即使这个断言出错了,也可以继续执行下一个断言)
pip install pytest-html( html可以生成html结果报告)
....
pip list 查看
pytest -h帮助
3.测试用例的识别与运行
- 测试文件
test_*.py
*_test.py
- 用例识别
Test*类包含的所有test_*的方法(测试类不能带有__init__方法)
不在class中的所有的test_*方法
- pytest也可以执行unittest框架写的用例和方法(pytest与unittest的区别,可以参考unittest的使用 https://www.jianshu.com/p/125fd33d55ed)
4.测试用例的识别与运行
终端执行
pytest/py.test
pytest -v (最高级别信息--verbose)打印详细运行日志信息
pytest -v -s 文件名 (s是带控制台输出结果,也是输出详细运行日志)
pytest 文件名.py 执行单独一个pytest模块
pytest 文件名.py::类名 运行某个模块里面的某个类
pytest 文件名.py::类名::方法名 运行某个模块里面某个类里面的方法
pytest -v -k "类名and not方法名" 跳过运行某个测试用例
执行 pytest test_demo.py::Test_cal2,只运行test_sub 方法
执行 pytest test_demo.py::Test_cal::test_muti,只运行test_muti方法
执行 pytest test_demo.py -k "Test_cal and not test_muti" ,只运行test_demo.py中的非test_muti方法
pytest -m[标记名] @pytest.mark.[标记名]将运行这个有标记的测试用例
pytest -x 文件名 一旦运行报错就停止运行
pytest --maxfail=[num] 当运行错误达到num的时候就停止运行(比如冒烟测试,执行多少个失败的用例就打回)
例如:执行pytest --maxfail=1 test_demo.py,就运行到一个错误停止运行了
5.pytest执行-失败重新运行
场景:测试失败后要重新运行n次,要在重新运行只见添加延迟时间,间隔n秒再运行。
安装:pip install pytest-rerunfailures
执行:pytest --reruns 3 -v -s test_demo.py
pytest -v --reruns 3 --reruns-delay 1 test_demo.py (添加延迟时间1s)
6.pytest执行多条断言有失败也都运行
场景:一个方法中写多条断言,通常第一条过不去,下面就不执行了。我们想报错也都执行一下。
安装:
pip install pytest-assume
执行:
pytest.assume(1==4)
pytest.assume(2==4)
6.pycharm中运行
三种运行方式: