【Python】pytest库的介绍及用法

目录

1、pytest应用场景

2、pytest库-三方库


1、pytest应用场景

pytest不是Python的标准库。它是第三方库,用于编写和组织Python测试用例。你可以使用Python包管理器 pip 来安装它,如 pip install pytest 。尽管它不是Python的一部分,但它仍然是Python测试中的重要工具之一,被广泛应用于各种级别的测试中,从简单的单元测试到复杂的功能测试。其应用场景主要包含以下几个方面:

  1. 单元测试 :对程序的一个小部分或一个函数进行测试,看它是否按照预期进行工作。
  2. 功能测试 :确保软件的某个功能是否工作正常。
  3. 回归测试 :当你的代码有所改动时,pytest可以帮助你确认改动部分是否运行良好,并且改动没有影响到其他部分的功能。
  4. 集成测试 :当我们想同时测试两个或多个组件的集成程度时,pytest可以提供强大的支持及钩子来进行此类操作。
  5. 参数化测试 :pytest提供参数化测试的功能,可以使用相同的测试逻辑或脚本对不同输入数据进行测试,无需撰写多个测试用例。
  6. 假设驱动的开发(TDD/BDD) : pytest非常适用于这类开发模式,你可以首先撰写测试,然后编写满足这些测试的代码。
  7. 持续集成/持续交付 :pytest也被广泛使用在CI/CD的环境中,特别是和 travis-ci, CircleCI, Jenkins 等工具配合时。

此外,pytest拥有很多外挂插件,可以为你的特殊测试需求提供额外的功能,比如并行执行测试、生成覆盖率报告等等。

2、pytest库-三方库

pytest是一个非常强大的测试框架,其能从简单的单元测试到复杂的功能测试以及持续集成的情况给你提供很好的解决方案。

一个简单的使用pytest编写单元测试的例子:

复制代码
# 文件名: test_sample.py
def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

通过命令行 pytest 运行,这将会查找所有名字以 test_ 开头的.py文件,然后运行这些文件中所有名字以 test 开头的函数或方法。在此例中 test_answer 函数将会被运行,单元测试通过断言 assert 来判断被测试函数 func() 是否符合预期。

此外,pytest还有许多高级功能:

  • 配置文件:pytest允许你有一个pytest.ini文件来进行高级配置。
  • fixtures:fixtures是一个设置/清理函数,比如你可能需要在数据库中插入一些数据然后进行测试,测试结束后清理掉这些数据,这些可以通过写一个fixture函数来实现。
  • 参数化:如果你需要对一个函数或方法用多组数据进行测试,可以用pytest的mark.parametrize装饰器实现。
  • 插件和钩子:pytest有很多第三方插件可以用来增强pytest的功能。如pytest-cov可以计算测试覆盖率,pytest-xdist可以分布式执行测试等等。

在pytest库中提供了一系列的功能来支持用户编写和运行测试,以下是其中的一些重要方法和修饰器:

  • pytest.main(args): 这个函数是调用pytest的主入口点,其中args是命令行参数的列表。
  • @pytest.fixture: 这个是pytest的装饰器,标记一个函数作为一个fixture,通常用于设置一些测试开始前需要准备的环境或数据,以及测试结束后需要做的清理工作。
  • @pytest.mark.parametrize: 这个装饰器允许在测试函数或方法中定义多组输入参数和期望的结果,从而实现的参数化测试。
  • @pytest.mark.skip(reason): 装饰器用来跳过一个测试。
  • @pytest.mark.xfail(reason): 装饰器用来标注一个预期会失败的测试。

在pytest的框架下,测试代码通常是以函数或类的形式编写,以"test_"开头。pytest会自动找到这些测试用例并执行。

另外,pytest也提供了一些断言函数,如assert,用来判断测试的结果是否符合预期。

pytest还有很多内置的工具函数和大量的插件支持,例如用于并行运行测试用例的pytest-xdist插件,以及用于生成测试覆盖率报告的pytest-cov插件等。具体可以参考pytest的官方文档了解详情。

以下是使用 pytest 测试工具的一些例子:

  1. pytest.main():在代码中直接运行 pytest

    import pytest

    pytest.main()

  2. @pytest.fixture:创建一个测试环境

    import pytest

    @pytest.fixture()
    def setup_environment():
    # 在这里设置你的测试环境
    print("Setting up the environment")

    def test_func(setup_environment):
    # 在这里写你的测试,它将会在设置好的环境中被执行
    print("Running the test")

  3. @pytest.mark.parametrize:参数化测试

    import pytest

    @pytest.mark.parametrize("test_input, expected_output",
    [(1, 1), (2, 4), (3, 9), (4, 16), (5, 25)])
    def test_square(test_input, expected_output):
    assert test_input**2 == expected_output

  4. @pytest.mark.skip():跳过一个测试

    import pytest

    @pytest.mark.skip(reason="Skip this test")
    def test_func():
    # 这个测试将会被跳过
    pass

  5. @pytest.mark.xfail():标记一个预期会失败的测试

    import pytest

    @pytest.mark.xfail()
    def test_func():
    # 这个测试预期会失败
    assert 1 == 2

在实际使用中,需要根据需要选择和组合使用不同的功能。更多详细的使用方法和最佳实践,建议阅读 pytest 的官方文档。

相关推荐
西柚小萌新2 小时前
【大模型:知识库管理】--Dify接入RAGFlow 知识库
python
新知图书2 小时前
R语言ICU患者死亡率预测实战
开发语言·r语言
博士僧小星2 小时前
在线机考|2025年华为暑期实习&春招&秋招编程题(最新)——第2题_网络整改
python·华为·在线编程·机考·秋招笔试
博士僧小星2 小时前
在线机考|2025年华为暑期实习&春招&秋招编程题(最新)——第1题_物流运输
python·华为·机考·春招·秋招笔试·在线笔试
wennieFan2 小时前
python基础面试练习题
开发语言·python
电院工程师2 小时前
轻量级密码算法CHAM的python实现
python·嵌入式硬件·算法·安全·密码学
阿福不是狗2 小时前
Python使用总结之Linux部署python3环境
linux·开发语言·python
枣伊吕波2 小时前
第十三节:第七部分:Stream流的中间方法、Stream流的终结方法
java·开发语言
一点也不想取名3 小时前
解决 Java 与 JavaScript 之间特殊字符传递问题的终极方案
java·开发语言·javascript
27669582923 小时前
朴朴超市小程序 sign-v2 分析
java·python·小程序·逆向分析·朴朴超市·sign-v2·朴朴