C++项目使用pytest自动化测试
pytest是python语言的自动化测试框架,在C++项目中也可以使用其对模块或接口上进行测试,弥补googletest的不足之处。
1. pytest的主要优点
- 按照一定的顺序和规则去执行测试用例,并生成结果
- 统计测试进度,耗时,通过率等数据,并生成测试报告。
- (相对于googletest)更方便的使用https等通信模块
2. pytest使用规则
官网:https://docs.pytest.org/en/stable/index.html
2.1 命名规则
- 测试文件必须
test_
开头 - 测试类命名必须以
Test
开头- 并且不能有init函数
- 测试方法必须test开头(函数也一样)
2.2 用例的前置和后置函数
pytest提供了模块级、函数级、类级、方法级的setup/teardown,比Unittest的setup/tearDowm方法更活
- 模块级setup_module/teardown_module:开始于模块始末,全局
- 类级setup_class/teardown_class:只在类中前后运行一次(类中)
- 函数级setup_function/teardow_function:只对函数用例生效(不在类中)
- 方法级setup_method/teardown_method:开始于方法始末(在类中)
- 类里面的setup/teardown:运行在调用方法的前后
3. 使用示例
3.1 pytest安装
作为python组件进行安装:pip install pytest
3.2 目录结构
init文件为空文件(大概是python规范,python文件夹目录下必须要有的),test_sample.py中存在着测试用例。
- test
-- __init__.py
-- test_sample.py
3.3 用例示范
同官网示例
# content of test_sample.py
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
3.4 执行用例
执行用例后,可以清晰看到执行结果,以及失败的详细原因。
$ pytest test/test_sample.py
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-7.x.y, pluggy-1.x.y
rootdir: /home/sweet/project
collected 1 item
test_sample.py F [100%]
================================= FAILURES =================================
_______________________________ test_answer ________________________________
def test_answer():
> assert inc(3) == 5
E assert 4 == 5
E + where 4 = inc(3)
test_sample.py:6: AssertionError
========================= short test summary info ==========================
FAILED test_sample.py::test_answer - assert 4 == 5
============================ 1 failed in 0.12s =============================
4. 常用的命令参数
-
pytest [目录名称]
可以递归执行目录下的所有用例 -
–collect-only 仅罗列出命令将要执行哪些用例
$ pytest test --collect-only =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-7.x.y, pluggy-1.x.y rootdir: /home/sweet/project collected 1 item <Package test> <Module test_sample.py> <Function test_answer> ========================= 1 tests collected in 0.01s ==========================
-
-v 参数输出执行用例的详细信息
-
-s 输出代码中的print信息
-
-x 遇到失败用例立即退出
-
–maxfail=[num] 允许最多产生的错误数量
5. 项目上的扩展应用
- 可以安装pytest-html生成网页版的测试报告
- 安装方式:pip install pytest-html
- 执行pytest命令时,增加–html=[文件名称或文件路径],输出中会有html的生成路径
- 可以安装pytest-allure插件,提高测试用例的可读性。如为测试用例添加测试说明/步骤并展示在测试报告中,生成更加美观的测试报告
- 安装方式:pip install pytest-allure
- 使用方式:
- 为pytest的主函数添加参数,设置好报告生成地址
import pytest if __name__ == '__main__': pytest.main([r'--alluredir=test_report\allure'])
- 执行allure serve [报告地址],即可生成精美的测试报告
- 为pytest的主函数添加参数,设置好报告生成地址
- pytest中可以使用requests进行http https的请求发送
- 使用方式官网有很详细的文档介绍:https://requests.readthedocs.io/en/latest/
- pytest中可以使用urllib进行http https的请求发送
- urlopen中增加content参数可以配置证书
- 下载文件的接口没有提供content参数,可以通过设置默认证书方式添加。后续提供示例
- 可以配置执行用例失败后,不进行环境清理(正常测试活动中,会构造很多临时文件,用例出错时,很难定位)
- 官网示例:https://docs.pytest.org/en/7.4.x/example/simple.html#post-process-test-reports-failures
- 另外,官网也有很多其他的使用场景:https://docs.pytest.org/en/7.4.x/example/index.html