pytest插件的7种用法

yizhihongxing

下面是有关pytest 插件的 7 种用法的攻略:

1. 钩子函数

pytest 插件可以通过钩子函数来在测试用例运行过程中执行特定的代码。常见的钩子函数有 pytest_load_initial_conftestspytest_addoptionpytest_collection_modifyitems 等。

例如,我们可以通过编写 pytest_addoption 钩子函数来为 pytest 添加自定义命令行参数。具体实现方法如下:

# conftest.py
def pytest_addoption(parser):
    parser.addoption("--myoption", action="store", default="default", help="my custom option")

在上面的代码中,我们使用 pytest_addoption 钩子函数为 pytest 添加了一个叫做 --myoption 的命令行参数。这个参数可以在 pytest 运行时传入,如下所示:

pytest --myoption hello pytest

执行上述命令后,pytest 会将参数传递给钩子函数,我们可以在测试用例中通过 request.config.getoption("--myoption") 获取该参数的值。例如:

# test_demo.py
def test_myoption(request):
    assert request.config.getoption("--myoption") == "hello"

在上面的测试用例中,我们调用了 request.config.getoption 方法来获取传入的 --myoption 参数,并使用 assert 语句来断言该参数的值是否为 "hello"。

2. 插件配置

pytest 插件可以通过 pytest.ini 文件来配置。你可以在 pytest.ini 文件中添加诸如 addoptsmarkerspython_files 等标志和选项,以配置插件的行为。

例如,下面是一个 pytest.ini 文件的示例:

[pytest]
addopts = -v
markers =
     slow: mark test as slow running.

在上面的示例中,我们使用 addopts 选项来指定了运行 pytest 时的参数,该参数告诉 pytest 打印详细日志。同时,我们还添加了一个名为 slow 的标记,以告诉 pytest 运行速度较慢的测试用例。

3. 自定义fixture

pytest 插件也可以通过自定义 fixture 来扩展 pytest 的功能。你可以编写自己的 fixture 函数,并将其与测试用例一起使用。

例如,下面是一个自定义 fixture 的示例:

# conftest.py
import pytest

@pytest.fixture
def myfixture():
    print("I am a fixture!")

在上面的代码中,我们定义了一个名为 myfixture 的 fixture 函数,该函数在每个测试用例执行前都会被调用,并打印一条消息。

# test_demo.py
def test_myfixture(myfixture):
    pass

上述测试用例使用了 myfixture fixture,因此在运行时会首先执行 myfixture 函数,之后再运行测试用例本身。

4. 自定义 Markers

pytest 插件还可以添加自定义 Markers。Markers 是与测试用例相关的标识,可用于过滤、分组和标记测试结果。

例如,下面是一个自定义 Marker 的示例:

# conftest.py
import pytest

@pytest.mark.my_marker
def test_example():
    assert True

在上面的代码中,我们定义了一个名为 my_marker 的 Marker,并将其应用于名为 test_example 测试用例。

在运行 pytest 时,你可以使用 -m 选项来执行某些具有特定 Marker 的测试用例,如下所示:

pytest -v -m my_marker

该命令运行名为 test_example 的测试用例,因为该测试用例被标记了 my_marker 标识。

5. 自定义CLI命令

pytest 插件还可以添加自定义的 CLI 命令,这样你可以快速执行定制化的任务。

例如,下面是一个自定义 CLI 命令的示例:

# conftest.py
def pytest_addoption(parser):
    parser.addoption("--mycli", action="store_true", help="run my custom cli command")

def pytest_cmdline_main(config):
    if config.getoption("--mycli"):
        print("My custom cli command is running!")
        return 0

在上面的代码中,我们定义了一个叫做 mycli 的自定义 CLI 命令。当使用 --mycli 参数运行 pytest 时,pytest 会调用 pytest_cmdline_main 函数并打印出一条消息。

6. 插件之间交互

pytest 插件可以通过钩子实现相互作用,这样你可以编写插件来扩展其他插件的功能,或者插件之间通过共享数据和行为来增强 pytest 的功能。

例如,下面是一个插件之间交互的 Markdown 插件的示例:

# conftest.py
def pytest_configure(config):
    markdown_plugin = config.pluginmanager.getplugin("markdown")
    if markdown_plugin:
        markdown_plugin.add_transform("example", lambda value: f"<p>{value}</p>")

在上面的代码中,我们定义了一个 pytest_configure 钩子,通过 config.pluginmanager.getplugin 获取 markdown 插件实例。之后,我们使用 add_transform 方法为 markdown 插件添加了一个新的转换器,将 example 标记转换为 <p> 标签。

现在,当你在 markdown 文件中写入以下内容时:

This is an [example].

该插件会将其转换为:

<p>This is an example.</p>

7. 自定义收集规则

pytest 插件还可以添加自定义的收集规则,以自定义 pytest 收集测试用例的方式。自定义收集规则是通过修改 pytest 的默认行为,在未经特别标记的情况下,收集或排除特定的测试用例集。可以编写自己的 collector,然后通过 pytest_collect_file 来指定采集规则。

例如,下面是一个名为 test_demo.py 的示例测试用例文件和一个自定义的收集规则:

# conftest.py
import pytest

class MyCustomCollector(pytest.File):
    def collect(self):
        if "my_marker" in self.config.getini("markers"):
            return super().collect()
        else:
            return []

def pytest_collect_file(path, parent):
    if path.ext == ".py":
        return MyCustomCollector(str(path), parent=parent)

在上面的代码中,我们定义了一个名为 MyCustomCollector 的自定义 collector,它通过判断模块是否包含 my_marker 标记来决定是否收集测试用例。接着,在 pytest_collect_file 函数中我们将上述 collector 应用到了所有的 .py 文件中。

运行 pytest 时,如果指定了 my_marker 标记,则 pytest 将收集所有测试用例;否则,pytest 将不会执行测试用例。

以上是关于 pytest 插件的 7 种用法的详细攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytest插件的7种用法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • vs code 配置python虚拟环境的方法

    下面是详细讲解“vs code 配置python虚拟环境的方法”的完整攻略。 什么是Python虚拟环境 Python虚拟环境是指在一个系统中运行的独立Python环境,其各自的环境变量、依赖包、Python解释器、工具等都是独立的。为什么要使用Python虚拟环境?我们知道在Python应用程序开发中,开发环境与生产环境的配置可能会不同,部署环境与测试环境…

    python 2023年5月19日
    00
  • Python字符串(String)类型

    Python中的字符串类型 字符串(String)指的是一个或多个字符的组合。在Python这门语言中,字符串必须由双引号""或者单引号”包围,格式如下: "字符串内容"’字符串内容’ 字符串中的内容可以随便书写,包含数字、字母、标点、特殊符号、中文、英文等等。 下面都是合法的字符串: “12342” ‘12345a…

    2022年11月28日
    10
  • Python实现的圆形绘制(画圆)示例

    Python实现的圆形绘制(画圆)示例可以通过Python自带的turtle库进行实现。 步骤一:导入库 在程序的最上方,需要导入turtle库: import turtle 步骤二:创建画布 接下来我们需要创建一个画布,在画布中绘制圆形: my_screen = turtle.Screen() my_screen.bgcolor("white&q…

    python 2023年6月5日
    00
  • python实现人机对战的井字棋游戏

    Python实现人机对战的井字棋游戏 概述 本文将详细讲解如何使用Python语言实现人机对战的井字棋游戏。井字棋游戏是一款简单的棋类游戏,由于其简单易懂、规则简单,非常适合用来练手。在实现本游戏时,我们将使用Python的面向对象编程思想,通过类的定义和方法的调用实现游戏的逻辑。同时,我们也将使用Python的标准库Tkinter实现简单的GUI界面,让游…

    python 2023年5月23日
    00
  • python爬虫入门教程–HTML文本的解析库BeautifulSoup(四)

    下面是该篇文章的完整攻略: 标题 本文主要介绍了Python爬虫中用于解析HTML文本的库BeautifulSoup,包括BeautifulSoup库简介、如何安装、BeautifulSoup的基本用法、BeautifulSoup处理HTML文本中的各种标签及属性、使用BeautifulSoup获取HTML文本中的各种元素等。 安装BeautifulSoup…

    python 2023年5月14日
    00
  • R语言初学者的一些常见报错指南

    R语言初学者的一些常见报错指南 1. “could not find function”错误 这种错误是因为R无法找到你所调用的函数。有几个常见的原因可能导致这种错误: 函数名称拼写错误:请确保你正确地拼写了函数名称并且按照正确的格式使用了括号。 未加载所需的包:有些函数需要加载特定的包才能使用。你可以使用library()函数加载所需的包。 2. “und…

    python 2023年5月13日
    00
  • Python:索引浮点数?

    【问题标题】:Python: indexing floats?Python:索引浮点数? 【发布时间】:2023-04-06 11:44:01 【问题描述】: 我有两组数据,我通过 Python 中的嵌套 for 循环读取它们。我需要使用一个公共数字(时间)匹配两个不同文本文件的行。在这两个文件中,时间的写法不同(例如 21:53:28.339 与 1210…

    Python开发 2023年4月6日
    00
  • Python干货:分享Python绘制六种可视化图表

    Python干货:分享Python绘制六种可视化图表 本篇文章将介绍Python绘制六种常见的可视化图表,分别为折线图、散点图、直方图、条形图、饼图和热力图。其中,折线图和散点图适用于展示数值型和时间序列数据的变化趋势和分布规律;直方图和条形图适用于展示数值型数据的频数分布,两者有所差异;饼图和热力图适用于展示分类数据的占比和相关性。 折线图 折线图展示了数…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部