1、Pytest 介绍
Pytest是一个基于python的第三方单元测试框架。
要求:Python 3.7+ 或 PyPy3
特点:
- Pytest 是免费和开源的,且入门简单,文档丰富
- 主要用来做接口测试,也可以编写简单到复杂的功能测试
- 编写测试用例方便,使用assert断言
- 使用mark标记管理测试用例
- 使用fixture夹具管理测试前置处理,后置处理
- 支持参数化
- 支持失败重试机制,部分执行,跳过执行,标记失败等
- 支持生成html报告
- 丰富的第三方插件,良好的自定义扩展性
- 兼容其它测试框架,如unittest
- 方便的和持续集成工具集成CI环境,如Jenkins
2、下载和安装
(1)安装pytest
pip install -U pytest
pip安装不了的话可以登录Python第三方库PyPI官网下载pytest · PyPI
(2)查看pytest版本
pytest --version
也可以使用如下方式获取当前的 pytest 版本,结果是字符串:
>>> import pytest
>>> pytest.__version__
'7.0.0'
7.0 版中的新功能。
当前的 pytest 版本,作为一个元组:
>>> import pytest
>>> pytest.version_tuple
(7, 0, 0)
3、编写测试用例
新建test_sample.py文件如下,编写测试用例test_answer,使用assert断言。
# content of test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
测试用例编写规范:
- 测试用例包pakege必须要有__init__.py文件
- 测试文件名必须以“test_”开头或者以”_test”结尾
- 测试类命名以Test开头
- 测试方法必须以“test_”开头
- 使用assert断言
4、运行测试用例
打开test_sample.py所在的文件夹,选中文件路径输入cmd然后按enter键进入cmd窗口,输入命令:pytest。
说明:
- collected 1 item:pytest运行的时候一共收集到了1条测试用例。
- test_sample.py F:标记F,是指测试结果失败,注意Failure和Error的区别。
- [100%] :指测试用例运行的总体进度。
- FAILURES:输出了详细的错误信息,帮助我们分析测试原因,我们可以看到"assert func(3) == 5"这条语句出错了,错误的原因是func(3)=4,然后我们断言func(3) 等于 5。
(1)测试用例收集规则:
- pytest运行的时候,默认会收集当前目录及其子目录中,所有test_*.py或*_test.py文件中以"test_"开头的测试函数。
(2)测试用例运行结果标记符:
- 点号,表示用例通过
- F 表示失败 Failure
- E 表示用例中存在异常 Error
- S 表示用例被跳过 Skip
- x 小写的 x 表示预期失败 xfail
- X 大写的 X 表示预期失败,但是通过了
5、生成测试报告
使用pytest-html插件可以生成HTML格式的测试报告。
运行命令如下:
pytest --html=report.html
打开测试报告:
6、学习网站推荐
这是个印度佬创建的网站,不得不说这个教程对于初学pytest的人来说非常友好,基本上花个半天时间跟着教程练习一遍就能快速入门pytest的基本功能了。
Full pytest documentation — pytest documentation
这是Pytest官网教程,适合作为参考手册使用,如果你想深入了解某个API的功能都可以找到对应教程来学习。
这是大佬翻译的官网教程,建议作为官网教程的参考。
reference:
Full pytest documentation — pytest documentation