首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每日一模块:pytest

每日一模块:pytest

日常中每次需求开发完成,都要求写单元测试,以便于在上线前尽量将bug找到,Python单元测试中我使用最多的模块就是pytest, 之前也根据pytest模块封装了一个日常工具我的实用小工具-单元测试模块,感兴趣的可以去看看。

1. 简介

pytest是一个成熟、全功能的Python测试框架,它包含简单的单元测试和复杂的功能测试。pytest具有简洁易读的语法和丰富的插件系统,使得测试编写、执行和扩展都变得简单高效。

2. 安装

使用pip可以轻松安装pytest:

pip install pytest3. 基本用法

创建一个测试文件,以test_开头或者以_test结尾。在测试文件中,编写以test_开头的函数作为测试用例。运行pytest命令来执行测试。

4. 常见方法

4.1 断言方法

•assert:这是最基本的断言,如果其后面的条件为假,测试就会失败。

def test_addition():

assert 1 + 1 == 2

•pytest.approx():用于浮点数精度的处理。

def test_floating_point_addition():

assert 0.1 + 0.2 == pytest.approx(0.3)4.2 跳过测试

• 使用pytest.skip()跳过当前测试。

def test_skipped_test():

pytest.skip("Skipping this test")4.3 预期失败

• 使用pytest.xfail()标记预期失败的测试。def test_not_implemented_yet():

pytest.xfail("This feature is not implemented yet")

4.4 测试参数化4.5 设置和拆收

• 使用setup_module(),teardown_module(),setup_function(),teardown_function(),setup_method(),teardown_method(),setup_class(),teardown_class()来进行测试的设置和拆收。

def setup_module():

print("Setup for the whole module")

def teardown_module():

print("Teardown for the whole module")

def test_example():

assert True4.6 Fixtures

• Fixtures是pytest中更灵活、更强大的设置和拆收机制。

@pytest.fixture

def database():

db = Database()

yield db

db.close()

def test_example(database):

assert database.is_connected()5. 运行测试

在命令行中,使用pytest命令来运行测试。可以加上各种选项来定制测试行为,例如-v用于输出详细结果,-x在遇到第一个失败的测试时停止运行。

pytest -v test_example.py6. 插件和扩展

pytest的强大之处在于其插件系统,通过安装和使用插件,可以扩展pytest的功能,例如添加测试覆盖率报告、生成HTML测试报告等。

6.1 生成html报告

• 插件pytest-html

6.1.1 安装

pip install pytest-html6.1.2 快速使用

# terminal命令行下执行

pytest --html=report.html6.1.3 生产使用

上面命令生成的报告,css是独立的,分享报告的时候样式会丢失,为了更好的分享发邮件展示报告,可以把css样式合并到html里

pytest --html=report.html --self-contained-html6.2 生成测试代码覆盖率报告

• 插件pytest-cov

6.2.1 安装

pip install pytest-cov6.2.2 使用

# terminal命令行下执行

pytest —cov —cov-report=html

pytest 后面选择性的参数如下

• run – 运行Python脚本并测试脚本代码覆盖率。

• report – 报告脚本运行的覆盖率结果。

• html –生成html格式的代码覆盖率报告文件。

• xml – 生成xml格式的代码覆盖率报告文件。

• annotate – 用覆盖结果注释源文件。

• erase – 删除之前收集的覆盖率数据。

• combine – 将多个覆盖率文件合并成一个。

• debug – 调试模式。

Coverage.py使用多种指令实现覆盖率测量任务。可以采用--help子指令来查看指令的具体用法,

例如coverage run –help。7. pytest.ini文件

工作中一般是通过配置文件pytest.ini文件来配置单元测试相关配置的,如生成html报告,覆盖报告,下面提供一个范例。

# pytest.ini文件

[pytest]

python_files = test_*.py  *_test.py

python_classes = Test*

python_functions = test_*

addopts= -vs  --html=./status/report.html --capture=sys --self-contained-html --cov=../ --cov-report=html --cov-report=term-missing -p no:warnings

8. 总结

pytest是一个功能强大的Python测试框架,通过学习和掌握其常见方法,可以更加高效地编写和管理测试用例。此外,通过安装和使用插件,可以进一步扩展pytest的功能,满足各种测试需求。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OCPZER-MS28E67byvK537TMg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券