【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 的官方文档。

相关推荐
悠哉悠哉愿意10 分钟前
【机器学习学习笔记】线性回归实现与应用
笔记·学习·机器学习
大筒木老辈子15 分钟前
Linux笔记---计算机网络概述
linux·笔记·计算机网络
无为之士18 分钟前
君正交叉编译链工具mips-gcc540-glibc222-64bit-r3.3.0.smaller.bz2编译st-device-sdk-c
c语言·开发语言
源力祁老师1 小时前
深入分析 json2(新)与标准的 jsonrpc的区别
开发语言
小wanga1 小时前
C++知识
java·开发语言·c++
学渣676561 小时前
文件传输工具rsync|rust开发环境安装|Ascend实验相关命令
开发语言·后端·rust
木心爱编程2 小时前
C++容器内存布局与性能优化指南
开发语言·c++·性能优化
我是渣哥2 小时前
Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
java·开发语言·jvm·后端·算法·职场和发展·性能优化
THMAIL2 小时前
机器学习从入门到精通 - 机器学习调参终极手册:网格搜索、贝叶斯优化实战
人工智能·python·算法·机器学习·支持向量机·数据挖掘·逻辑回归
你我约定有三2 小时前
java--写在 try 中的创建连接
java·开发语言