Pytest是一款功能强大的Python测试框架,支持简单的单元测试和复杂的功能测试。它允许开发者编写简洁的测试代码,提供了丰富的断言库,并且可以轻松地扩展。Pytest具有自动发现测试、参数化测试、插件系统等特性,使其成为Python社区广泛使用的测试工具之一。

Pytest的基本应用

Pytest的基本应用(一)_pytestPytest的基本应用(一)_pytest(图片来源网络,侵删)

Pytest是一个Python的测试框架,它可以帮助我们编写简洁且富有表达力的测试代码,Pytest有很多优点,它可以轻松地集成到现有的Python项目中,可以扩展,并且具有丰富的第三方插件生态系统,我们将介绍Pytest的基本应用。

安装Pytest

我们需要安装Pytest,可以使用pip来安装:

pip install pytest

编写一个简单的测试用例

我们编写一个简单的测试用例,假设我们有一个名为calc.py的文件,其中包含一个add函数

calc.py
def add(a, b):
    return a + b

我们可以创建一个名为test_calc.py的文件来编写测试用例:

test_calc.py
import pytest
from calc import add
def test_add():
    assert add(1, 2) == 3
    assert add(1, 1) == 0
    assert add(0, 0) == 0

在这个测试用例中,我们使用了pytest.mark.parametrize装饰器来为我们的测试函数提供多组输入参数和预期结果,这样,我们就可以一次性测试多组数据了。

Pytest的基本应用(一)_pytestPytest的基本应用(一)_pytest(图片来源网络,侵删)

运行测试用例

现在我们可以运行测试用例了,在命令行中,切换到test_calc.py所在的目录,然后运行以下命令:

pytest test_calc.py

如果所有的测试用例都通过,那么你会看到类似下面的输出:

============================= test session starts ==============================
platform linux Python 3.7.3, pytest5.2.1, py1.8.0, pluggy0.13.0
rootdir: /path/to/your/project
collected 3 items
test_calc.py .....                                                         [100%]
============================== 3 passed in 0.03s ===============================

这意味着我们的测试用例全部通过了。

使用断言

在Pytest中,我们可以使用Python的内置assert语句来进行断言,我们可以在test_calc.py文件中添加一个新的测试用例来测试add函数的返回值类型:

def test_add_return_type():
    result = add(1, 2)
    assert isinstance(result, int)

这个测试用例会检查add函数的返回值是否为整数类型,如果返回值不是整数类型,那么这个测试用例就会失败。

Pytest的基本应用(一)_pytestPytest的基本应用(一)_pytest(图片来源网络,侵删)

使用fixtures

Pytest还提供了一种名为“fixtures”的功能,它可以帮助我们管理测试数据和环境,我们可以使用pytest.fixtures.mark.usefixtures装饰器来定义一个名为sample_data的fixture:

import pytest
from calc import add
@pytest.fixtures.mark.usefixtures("sample_data")
def test_add(sample_data):
    assert add(sample_data[0], sample_data[1]) == sample_data[2]

在这个例子中,我们定义了一个名为sample_data的fixture,它会返回一个包含三个元素的元组:两个加数和一个预期结果,然后我们在test_add函数中使用了这个fixture,这样,我们就可以轻松地为我们的测试函数提供不同的输入参数和预期结果了。

FAQs

Q1: 我可以在Pytest中使用Python的内置unittest模块吗?

A1: 是的,你可以在Pytest中使用Python的内置unittest模块,Pytest兼容了unittest的大部分功能,并且提供了更多的扩展性和灵活性,你可以将unittest的测试类和方法与Pytest一起使用,而无需进行任何修改

Q2: 我如何查看每个测试用例的详细输出?

A2: 你可以使用v选项来查看每个测试用例的详细输出。

pytest v test_calc.py

这将显示每个测试用例的名称、状态和持续时间等信息。

下面是一个简单的介绍,展示了_pytest(通常简称为 Pytest)的基本应用之一,即作为Python的测试框架的常用命令和功能。

命令/功能 描述
pytest 执行当前目录下的所有测试,遵循默认的pytest命名规则(即以test_开头或以_test结尾的文件和函数)。
pytest test_module.py 执行指定模块的测试。
pytest test_dir/ 执行指定目录下所有测试。
pytest k "expression" 仅运行与表达式匹配的测试,pytest k "MyClass and not method"
pytest m MARKER 运行使用了特定标记的测试,pytest m smoke
pytest v 输出更详细的测试信息,包括每个测试函数的名称。
pytest collectonly 只收集测试,不执行它们,可以用来检查哪些测试会被运行。
pytest x 遇到第一个失败就停止测试。
pytest maxfail=num 当达到指定的失败数量时停止测试。
pytest setupplan 显示哪些setup和teardown方法将被调用,但不执行测试。
pytest durations=NUM 打印测试耗时最长的NUM个测试。
pytest junitxml=PATH 生成JUnit XML格式的测试报告。
pytest html=PATH 生成HTML格式的测试报告。
pytest pdb 在测试失败时自动进入PDB调试器。
pytest cov=MODULE 激活代码覆盖率报告,只检查指定的模块。
pytest doctestmodules 运行所有模块内的doctest测试。
pytest cacheclear 清除之前缓存的结果。
pytest exitfirst x 选项相同,遇到第一个失败即退出测试。
pytest lastfailed 仅重新运行上次失败的测试。
pytest fixture=FIXTURENAME 显示关于指定fixture的信息。

请注意,这个介绍只是提供了 Pytest 的一些基本应用,Pytest 还支持许多其他选项和高级功能,可以通过其官方文档进行了解。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。