C++项目使用pytest自动化测试

C++项目使用pytest自动化测试

pytest是python语言的自动化测试框架,在C++项目中也可以使用其对模块或接口上进行测试,弥补googletest的不足之处。

1. pytest的主要优点

  1. 按照一定的顺序和规则去执行测试用例,并生成结果
  2. 统计测试进度,耗时,通过率等数据,并生成测试报告。
  3. (相对于googletest)更方便的使用https等通信模块

2. pytest使用规则

官网:https://docs.pytest.org/en/stable/index.html

2.1 命名规则

  1. 测试文件必须test_开头
  2. 测试类命名必须以Test开头
    • 并且不能有init函数
  3. 测试方法必须test开头(函数也一样)

2.2 用例的前置和后置函数

pytest提供了模块级、函数级、类级、方法级的setup/teardown,比Unittest的setup/tearDowm方法更活

  1. 模块级setup_module/teardown_module:开始于模块始末,全局
  2. 类级setup_class/teardown_class:只在类中前后运行一次(类中)
  3. 函数级setup_function/teardow_function:只对函数用例生效(不在类中)
  4. 方法级setup_method/teardown_method:开始于方法始末(在类中)
  5. 类里面的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. 常用的命令参数

  1. pytest [目录名称]可以递归执行目录下的所有用例

  2. –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 ==========================
    
  3. -v 参数输出执行用例的详细信息

  4. -s 输出代码中的print信息

  5. -x 遇到失败用例立即退出

  6. –maxfail=[num] 允许最多产生的错误数量

5. 项目上的扩展应用

  1. 可以安装pytest-html生成网页版的测试报告
    • 安装方式:pip install pytest-html
    • 执行pytest命令时,增加–html=[文件名称或文件路径],输出中会有html的生成路径
  2. 可以安装pytest-allure插件,提高测试用例的可读性。如为测试用例添加测试说明/步骤并展示在测试报告中,生成更加美观的测试报告
    • 安装方式:pip install pytest-allure
    • 使用方式:
      • 为pytest的主函数添加参数,设置好报告生成地址
        import pytest
        if __name__ == '__main__':
            pytest.main([r'--alluredir=test_report\allure'])
        
      • 执行allure serve [报告地址],即可生成精美的测试报告
  3. pytest中可以使用requests进行http https的请求发送
    • 使用方式官网有很详细的文档介绍:https://requests.readthedocs.io/en/latest/
  4. pytest中可以使用urllib进行http https的请求发送
    • urlopen中增加content参数可以配置证书
    • 下载文件的接口没有提供content参数,可以通过设置默认证书方式添加。后续提供示例
  5. 可以配置执行用例失败后,不进行环境清理(正常测试活动中,会构造很多临时文件,用例出错时,很难定位)
    • 官网示例: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

你可能感兴趣的:(#,工具/三方库总结,c++,pytest,开发语言)