首页 > 其他分享 >pytest 的简单介绍

pytest 的简单介绍

时间:2024-12-14 19:30:19浏览次数:5  
标签:插件 介绍 assert pytest 测试 简单 test def

官方文档:pytest 文档

1. pytest 概述

pytest 是一个功能强大的 Python 测试框架,旨在简化单元测试和功能测试的编写与执行。它不仅支持简单的单元测试,还能进行更复杂的测试,如数据驱动的测试、并发测试等。pytest 支持自动化发现测试、丰富的断言和灵活的插件机制,深受开发者和测试人员的喜爱。

2. 安装 pytest

要使用 pytest,你首先需要安装它,可以通过 pip 安装:

pip install pytest

3. 测试函数与测试类

在 pytest 中,测试函数通常以 test_ 开头,而测试类则是以 Test 开头。这是 pytest 的约定俗成规则。

  • 测试函数:测试用例应该是普通的 Python 函数,且函数名以 test_ 开头。

    def test_addition():
        assert 1 + 1 == 2
    
  • 测试类:如果需要组织多个相关的测试函数,可以使用测试类。测试类中的每个方法也需要以 test_ 开头。

    class TestMath:
        def test_addition(self):
            assert 1 + 1 == 2
    
        def test_subtraction(self):
            assert 2 - 1 == 1
    

4. 断言 (Assertion)

pytest 使用 Python 的内建 assert 语句来进行断言,而不是像其他测试框架那样使用专门的断言函数。pytest 会在断言失败时提供详细的错误信息,使调试更加容易。

def test_addition():
    assert 1 + 1 == 2

当断言失败时,pytest 会显示断言的表达式、实际结果和期望结果,帮助开发者快速定位问题。

5. 测试执行与输出

你可以使用 pytest 命令运行测试。假设你有一个测试文件 test_example.py,可以通过以下命令执行测试:

pytest test_example.py

pytest 会自动发现以 test_ 开头的函数并运行它们。默认情况下,pytest 会显示测试的简要输出,显示每个测试是否通过(.)、失败(F)或被跳过(s)。

如果想要更详细的输出,可以使用 -v(verbose)选项:

pytest -v test_example.py

6. 测试夹具 (Fixtures)

测试夹具是 pytest 的一大亮点。它们提供了一种在测试执行前准备资源、在测试执行后清理资源的机制。通过 @pytest.fixture 装饰器来定义夹具。

例如,创建一个数据库连接的夹具:

import pytest

@pytest.fixture
def db_connection():
    # 假设这是连接数据库的代码
    db = create_database_connection()
    yield db
    db.close()  # 测试结束后关闭数据库连接

在测试函数中,pytest 会自动识别并提供 db_connection 作为参数:

def test_query(db_connection):
    result = db_connection.execute("SELECT * FROM users")
    assert len(result) > 0

7. 参数化 (Parametrize)

pytest 支持测试函数的参数化。使用 @pytest.mark.parametrize 装饰器可以自动生成多组测试数据,避免编写重复的测试代码。

例如,测试加法函数:

import pytest

@pytest.mark.parametrize("a, b, expected", [
    (1, 1, 2),
    (2, 2, 4),
    (3, 3, 6),
])
def test_add(a, b, expected):
    assert a + b == expected

这样可以一次性运行多组测试,避免重复编写相似的测试代码。

8. 测试跳过与期望失败

  • 跳过测试:有时你可能需要跳过某个测试,例如在某些条件下(如操作系统版本不符合要求)。可以使用 @pytest.mark.skip@pytest.mark.skipif 来跳过测试。

    @pytest.mark.skip(reason="Test is not relevant for this version")
    def test_old_feature():
        pass
    
  • 期望失败:如果你知道某个测试会失败,并且希望 pytest 将其标记为失败而不是引发错误,可以使用 @pytest.mark.xfail

    @pytest.mark.xfail
    def test_buggy_feature():
        assert 1 + 1 == 3
    

9. 测试插件与扩展

pytest 拥有丰富的插件生态系统,可以扩展框架的功能。例如,pytest-cov 插件可以用来测量测试覆盖率,pytest-django 用于测试 Django 应用,pytest-mock 用于提供更强大的 mock 功能。

安装插件的例子:

pip install pytest-cov

使用插件:

pytest --cov=my_module test_my_module.py

10. 并行测试

pytest 支持并行执行测试,可以通过插件如 pytest-xdist 来实现。这样能够加快测试执行速度,尤其是在测试用例很多时非常有用。

安装并行插件:

pip install pytest-xdist

执行并行测试:

pytest -n 4  # 使用4个进程并行执行测试

11. 总结

pytest 是一个非常强大的测试框架,它不仅能够简化单元测试的编写,还支持许多高级功能,如夹具、参数化测试、并行测试等。通过灵活的插件机制,pytest 还能满足各种测试需求。希望这次的讲解能让你更好地理解 pytest,并能在项目中高效地使用它进行自动化测试。

标签:插件,介绍,assert,pytest,测试,简单,test,def
From: https://blog.csdn.net/qq_73454087/article/details/144358671

相关文章

  • Burp Suite 1 功能介绍 (泷羽sec)
    声明学习视频来自B站UP主泷羽sec,如涉及侵泷羽sec权马上删除文章。笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负这节课旨在扩大自己在网络安全方面的知识面,了解网络安全领域的见闻,了解学习哪些知识对于我们渗透......
  • 单ubuntu22.04系统工作台降级版本重装ubuntu20.04(全网最详细-简单易懂)
        由于前段时间在配置开源框架时候,官方支持18.04或者20.04,但是本人ubuntu系统是22.04,故运行中问题层出,故想着重装一下系统,把版本降到常用的20.04(推荐),在网上找相关单ubuntu系统重装的内容的时候,发现类似的完整过程居然没有,大多数都是关于Windows双系统的安装,所以笔者决......
  • Pytest接口自动化测试框架Python自动化测试开发
    一、引言在软件开发过程中,接口测试是确保软件各个组件之间数据传输和功能交互正常工作的重要环节。通过接口测试,可以提高软件的整体质量和稳定性。Pytest是一个流行的Python自动化测试框架,提供了丰富的断言方法和灵活的测试组织结构,使得编写接口测试用例变得简单而高效。本文将详......
  • 项目8:简单数字华容道 --- 《跟着小王学Python·新手》
    项目8:简单数字华容道—《跟着小王学Python·新手》《跟着小王学Python》是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬......
  • 07相关软件的安装以及HTML介绍
    一、内容回顾这个软件从1.0就开始收费了,这里使用这个版本这里将侧边栏打开这个typora软件支持Markdown的格式,markdown格式是我们经常会使用到的笔记格式的形式,后缀名是md这种语法在整理笔记是比较方便的1、标题加上#号表示是标题,这个和H1,H2...标签类似加上不同的井号个数......
  • 转载:【AI系统】并行训练基本介绍
    分布式训练是一种模型训练模式,它将训练工作量分散到多个工作节点上,从而大大提高了训练速度和模型准确性。虽然分布式训练可用于任何类型的AI模型训练,但将其用于大模型和计算要求较高的任务最为有利。本篇幅将围绕在PyTorch2.0中提供的多种分布式训练方式展开,包括并行训练,如:数......
  • 转载:【AI系统】模型转换基本介绍
    模型转换的主要任务是实现模型在不同框架之间的流转。随着深度学习技术的发展,训练框架和推理框架的功能逐渐分化。训练框架通常侧重于易用性和研究人员的算法设计,提供了分布式训练、自动求导、混合精度等功能,旨在让研究人员能够更快地生成高性能模型。而推理框架则更专注于针对特......
  • 转载:【AI系统】AI 框架基础介绍
    什么是AI算法?什么是神经网络?神经网络有什么用?为什么神经网络需要训练?什么是模型?AI框架有什么用?AI框架能解决什么问题?上面的几个问题其实还挺有挑战的,也是本文需要回答的一个问题。下面来对一些基础概念进程澄清:首先深度学习是机器学习研究领域中的一种范式,而深度学习的概念源......
  • 转载:【AI系统】模型压缩基本介绍
    随着神经网络模型的复杂性和规模不断增加,模型对存储空间和计算资源的需求越来越多,使得部署和运行成本显著上升。模型压缩的目标是通过减少模型的存储空间、减少计算量或提高模型的计算效率,从而在保持模型性能的同时,降低模型部署的成本。模型压缩的目标可以概括为以下几点:减少模......
  • 转载:【AI系统】并行训练基本介绍
    分布式训练是一种模型训练模式,它将训练工作量分散到多个工作节点上,从而大大提高了训练速度和模型准确性。虽然分布式训练可用于任何类型的AI模型训练,但将其用于大模型和计算要求较高的任务最为有利。本篇幅将围绕在PyTorch2.0中提供的多种分布式训练方式展开,包括并行训练,如:数......