首页
学习
活动
专区
工具
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元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com