测试框架pytest教程(11)-pytestAPI

常量

pytest.__version__ #输出pytest版本

 

 

pytest.version_tuple #输出版本的元组形式

 

 

功能

pytest.approx

`pytest.approx` 是一个用于进行数值近似比较的 pytest 断言工具。

在测试中,有时候需要对浮点数或其他具有小数部分的数值进行比较。然而,由于浮点数精度限制,直接使用相等判断可能会导致测试不稳定或失败。这时,就可以使用 `pytest.approx` 工具来进行近似比较。

`pytest.approx` 可以用于比较单个值或列表、字典等数据结构的值。

以下是 `pytest.approx` 的常见用法示例:

```python
import pytestdef test_approx():assert 0.1 + 0.2 == pytest.approx(0.3)def test_list_approx():assert [0.1, 0.2, 0.3] == pytest.approx([0.1, 0.2, 0.3])def test_dict_approx():assert {"a": 0.1, "b": 0.2} == pytest.approx({"a": 0.1, "b": 0.2})
```

在上述示例中,第一个测试用例使用 `pytest.approx(0.3)` 来判断 `0.1 + 0.2` 是否近似于 `0.3`。第二个测试用例使用 `pytest.approx([0.1, 0.2, 0.3])` 来比较两个列表是否近似相等。第三个测试用例使用 `pytest.approx({"a": 0.1, "b": 0.2})` 来比较两个字典是否近似相等。

`pytest.approx` 在进行比较时会考虑到浮点数的精度问题,具有一定的容错性。可以通过设置 `rel` 和 `abs` 参数来调整容忍度。例如 `pytest.approx(0.3, rel=1e-3, abs=1e-5)` 可以设置相对误差不超过 `1e-3`,绝对误差不超过 `1e-5`。

pytest.fail

`pytest.fail` 是一个用于强制测试用例失败的 pytest 断言工具。

在某些情况下,您可能希望在测试中明确主动地使测试用例失败,而不是依赖其他断言条件或业务逻辑来触发失败。

`pytest.fail` 函数可以用于在测试中显式地引发 AssertionError,导致当前测试用例立即失败。

以下是 `pytest.fail` 的示例用法:

```python
import pytestdef test_fail():pytest.fail("Test case intentionally fails")
```

在上述示例中,`test_fail` 函数调用 `pytest.fail("Test case intentionally fails")` 来强制使测试用例失败,并提供一个可选的错误信息。

当测试运行到 `pytest.fail` 调用时,将引发 `AssertionError`,并且测试用例会立即失败。测试运行将停止,并且不会执行该用例后续的代码。

`pytest.fail` 函数还支持其他参数,例如 `pytrace=True` 用于显示堆栈跟踪信息,`skip=True` 用于标记测试用例为跳过状态。

请注意,在正常的测试编写中,尽量避免过多使用 `pytest.fail`,它应该被视为一种辅助工具,用于某些特殊场景下的测试目的。

pytest.skip

`pytest.skip` 是一个用于跳过测试用例的 pytest 断言工具。

在某些情况下,您可能希望在测试中主动跳过某些用例,而不是执行它们。`pytest.skip` 函数可以用于在测试运行时标记测试用例为跳过状态,告诉 pytest 不要执行这些用例。

以下是 `pytest.skip` 的示例用法:

```python
import pytest

def test_skip():
    pytest.skip("This test case is skipped intentionally")
```

在上述示例中,`test_skip` 函数调用 `pytest.skip("This test case is skipped intentionally")` 来标记测试用例为跳过状态,并提供一个可选的跳过说明。

当测试运行到 `pytest.skip` 调用时,该用例将被跳过,在测试报告中被标记为跳过状态。测试运行将继续进行,并且不会执行该用例后续的代码。

`pytest.skip` 函数还支持其他参数,例如 `allow_module_level=True` 用于允许跳过整个模块。

请注意,在正常的测试编写中,应该根据测试需要谨慎使用 `pytest.skip`。它通常用于某些特殊场景下,例如在某些条件不满足时跳过某些用例,或者在暂时无法实现某些功能时跳过相关的测试。

pytest.importorskip

`pytest.importorskip` 是一个 pytest 工具,用于在测试中动态导入所需的模块,如果导入失败则跳过测试用例。

有时,测试用例可能依赖于外部模块或库,如果在运行测试用例之前无法导入所需的模块,则这些用例可能会失败。为了避免因为缺少依赖而导致测试用例无法执行,您可以使用 `pytest.importorskip` 来跳过这些用例。

以下是 `pytest.importorskip` 的示例用法:

```python
import pytest

def test_dependency():
    module = pytest.importorskip("module_name")
    # 使用module进行进一步的测试
```

在上述示例中,`test_dependency` 函数使用 `pytest.importorskip` 导入名为 "module_name" 的模块。如果无法导入该模块,则测试用例将被跳过,不会执行后续的代码。

`pytest.importorskip` 函数会尝试导入指定的模块,如果导入失败,则会引发 `pytest.skip` 异常,该异常会被 pytest 捕获,并将相应的测试用例标记为跳过状态。

请注意,`pytest.importorskip` 可以接受其他参数,用于控制导入的行为,例如 `minversion` 参数用于指定要求的最低版本号,`reason` 参数用于提供跳过用例的说明。

无法导入,该条用例跳过 

pytest.xfail

预期用例失败

pytest.exit

`pytest.exit` 函数是 pytest 的一个工具,用于在测试运行期间提前退出测试过程。

在某些情况下,您可能希望在测试执行过程中主动退出,而不继续执行后续的测试用例。`pytest.exit` 函数可以用于在测试运行时提前终止测试过程。

以下是 `pytest.exit` 的示例用法:

```python
import pytest

def test_exit():
    pytest.exit("Testing is interrupted")
```

在上述示例中,`test_exit` 函数调用 `pytest.exit` 来提前终止测试执行,并提供一个可选的退出信息。

当测试运行到 `pytest.exit` 调用时,测试过程将立即终止,当前运行的测试用例将被中断,后续的测试用例将不会执行。同时,测试报告中会记录异常退出信息。

请注意,使用 `pytest.exit` 函数需要小心,并且只应在特殊情况下使用。正常情况下,测试用例应该按照规定的顺序执行,并且尽量避免意外退出测试过程。

pytest.main

执行入口

pytest.param

`pytest.param` 是 pytest 提供的一个装饰器函数,用于给测试参数化过程中的每个参数提供自定义的元数据。

在 pytest 中,参数化是一种技术,用于在执行同一个测试函数时,多次运行该函数,并为每次运行传递不同的参数组合。`pytest.param` 装饰器函数可以为每个参数组合提供自定义的元数据,这些元数据可以在测试报告中提供更多的信息。

以下是 `pytest.param` 的示例用法:

import pytest@pytest.mark.parametrize("param", [pytest.param("good", marks=pytest.mark.first),pytest.param("morning", marks=pytest.mark.second)
])
def test_param(param):assert len(param) > 0

在上述示例中,`test_param` 函数通过 `@pytest.mark.parametrize` 装饰器实现参数化。`pytest.param` 函数用于为每个参数提供自定义的元数据。在示例中,第一个参数值 "value1" 标记为 `pytest.mark.first`,第二个参数值 "value2" 标记为 `pytest.mark.second`。

通过为每个参数组合提供自定义的元数据,您可以在测试报告中识别和过滤特定的用例,以及运行自定义的处理逻辑,比如添加标记、过滤用例等。

请注意,使用 `pytest.param` 装饰器需要在参数化过程中使用 `@pytest.mark.parametrize` 装饰器进行配合。

pytest.raises

`pytest.raises` 是 pytest 提供的一个上下文管理器,用于检查测试用例中是否引发了指定的异常。

在测试过程中,有时您可能会希望测试某些代码在特定情况下是否会引发预期的异常。`pytest.raises` 上下文管理器可以帮助您捕获和断言这些异常。

以下是 `pytest.raises` 的示例用法:

```python
import pytest

def test_raises():
    with pytest.raises(Exception):
        # 在此处编写可能引发异常的代码
        raise Exception("An error occurred")
```

在上述示例中,`test_raises` 函数使用 `with pytest.raises(Exception):` 语句块来标识捕获异常的范围。在 `with` 代码块中,您可以编写可能引发异常的代码。在示例中,我们手动引发了一个 `Exception` 类型的异常。

当代码块中引发了指定类型的异常时,`pytest.raises` 将捕获该异常,测试将继续进行,并进行后续的断言。如果代码块中没有引发指定类型的异常,`pytest.raises` 将引发一个断言错误,测试将被标记为失败。

通过使用 `pytest.raises`,您可以确保代码在预期情况下引发了异常,并可以对异常进行进一步的检查和断言。

请注意,`pytest.raises` 还支持对异常对象进行断言,例如检查异常的具体信息、属性等。可以通过使用 `as` 关键字来捕获异常对象,并对其进行断言。

fixture

record_property

`record_property` 是 pytest 的一个内置函数,用于在测试运行期间记录自定义的属性。

在测试过程中,您可能希望记录一些额外的信息或元数据,以便于后续分析和报告。`record_property` 函数提供了一种将自定义属性与测试用例关联起来的方法。

以下是 `record_property` 的示例用法:


def test_example(record_property):record_property("priority", "high")record_property("severity", "medium")# 编写测试断言...assert 1 + 1 == 2

在上述示例中,`record_property` 函数被用于记录两个自定义的属性:`priority` 和 `severity`。这些属性与测试用例 `test_example` 相关联。

在运行测试时,`record_property` 函数将记录这些属性值,并将其与该测试用例关联。这些属性值将显示在测试报告中,可以帮助您更好地理解和分析测试结果。

通过记录适当的属性,您可以为测试结果提供更多的上下文,例如标记测试的优先级、严重性级别等。这对于组织和分析大规模测试套件非常有用。

`record_property` 函数可以在测试用例的任何位置调用,以记录所需的属性。通常,它在测试用例顶部作为一种常见的做法,以便更容易找到和识别相关属性。

record_testsuite_property

 记录testsuite的属性

def test_foo(record_testsuite_property):record_testsuite_property("ARCH", "PPC")record_testsuite_property("STORAGE_TYPE", "CEPH")

request

`request` 是 pytest 中的一个固定参数,用于访问测试用例运行时的上下文信息和功能。

在 pytest 的测试用例中,可以通过使用 `request` 参数来获取有关当前测试用例和测试运行环境的信息。`request` 参数是一个固定的 pytest fixture,可以在测试用例函数或其他 fixture 中使用。

以下是一些常见的 `request` 对象的用法:

1. 获取当前测试用例的名称:

def test_example(request):test_name = request.node.nameprint(f"Running test: {test_name}")# 其他测试断言和操作...

2. 获取当前测试用例的标记信息:

import pytest@pytest.mark.smoke
def test_example(request):marker = request.node.get_closest_marker("smoke")if marker:print("This test is marked as smoke test")# 其他测试断言和操作...

3. 获取测试用例函数的 docstring:

def test_example(request):"""这是一个test"""docstring = request.node.function.__doc__print(f"Test function docstring: {docstring}")# 其他测试断言和操作...

 

 

4. 访问配置文件中的自定义参数:

def test_example(request):my_param = request.config.getoption("--my-param")print(f"My custom parameter: {my_param}")# 其他测试断言和操作...

通过使用 `request` 对象,您可以在测试用例运行时获得更多的上下文信息,并根据需要执行各种操作,例如获取标记、访问配置等。

对象

Item

在 pytest 中,`Item` 类代表着一个测试项目,可以是一个测试用例、一个测试集合或一个测试模块。`Item` 类是 pytest 框架中的一个重要概念,用于管理和操作测试项目的相关信息和行为。

`Item` 类的实例包含了诸如测试项目的名称、位置、标记、参数、测试路径等信息。它也提供了一组方法和属性,用于操作和访问测试项目的各个方面。

以下是 `Item` 类的一些常见方法和属性:

1. `name` - 返回测试项目的名称。

```python
def test_example(item):
    print(f"Test name: {item.name}")
```

2. `nodeid` - 返回测试项目的唯一标识符。

```python
def test_example(item):
    print(f"Node ID: {item.nodeid}")
```

3. `get_closest_marker(name)` - 返回最接近的标记对象。

```python
import pytest

@pytest.mark.smoke
def test_example(item):
    marker = item.get_closest_marker("smoke")
    if marker:
        print("This test is marked as smoke test")
```

4. `get_marker(name)` - 返回与指定名称匹配的第一个标记对象。

```python
import pytest

@pytest.mark.slow
@pytest.mark.smoke
def test_example(item):
    marker = item.get_marker("smoke")
    if marker:
        print("This test is marked as smoke test")
```

5. `keywords` - 返回测试项目的关键字。

```python
def test_example(item):
    print(f"Test keywords: {item.keywords}")
```

`Item` 类还提供了其他一些方法和属性,用于获取和操作测试项目的参数、位置、路径以及与测试框架相关的信息。

config

在 pytest 中,`Config` 类是一个重要的概念,它代表了 pytest 的配置对象。`Config` 类提供了访问和配置 pytest 运行时的各种选项和参数的方法和属性。

`Config` 对象可以通过在自定义的 pytest 插件中使用 `pytest_configure(config)` 钩子函数中的 `config` 参数来获取。

下面是 `Config` 类的一些常见方法和属性:

1. `getoption(name)` - 获取命令行选项或配置文件中的选项的值。

def pytest_configure(config):my_option = config.getoption("--my-option")print(f"My option value: {my_option}")

2. `addinivalue_line(name, value)` - 在配置文件中添加一行配置。

def pytest_configure(config):config.addinivalue_line("markers", "smoke: mark a test as a smoke test.")

3. `getini(name)` - 获取配置文件中的值。

def pytest_configure(config):my_value = config.getini("my_option")print(f"My value from config file: {my_value}")

4. `getoption(name, default=None)` - 获取命令行选项或配置文件中的选项的值,如果不存在则返回指定的默认值。

def pytest_configure(config):my_option = config.getoption("--my-option", default="default_value")print(f"My option value: {my_option}")

除了上述示例外,`Config` 类还提供了许多其他有用的方法和属性,用于访问和配置 pytest 的各种选项和功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.JS教程

文章目录 Node.JSNode.js学习指南一、Node.js基础1.认识Node.js2.开发环境搭建3. 模块、包、commonJS3.1、为什么要有模块化开发?3.2、CommonJS规范3.3、 modules模块化规范写法 总结 Node.JS Node.js学习指南 服务端开发底层平台周边生态 学习前提 JavaScript、E…

Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

一、简介 Rspack CLI 官方文档。 rspack.config.js 官方文档。 二、创建 vue 项目 创建项目(文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式,根据需求进行选择) # npm 方式 $ npm create rspacklatest# yarn 方式 $ yarn create…

html动态爱心代码【二】(附源码)

目录 前言 效果演示 内容修改 完整代码 总结 前言 七夕马上就要到了,为了帮助大家高效表白,下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐,可用于520,情人节,生日,表白等场景&#xff0c…

Android 面试之Glide做了哪些优化?

前言 Glide可以说是最常用的图片加载框架了,Glide链式调用使用方便,性能上也可以满足大多数场景的使用,Glide源码与原理也是面试中的常客。 但是Glide的源码内容比较多,想要学习它的源码往往千头万绪,一时抓不住重点.…

shell脚本免交互

一.Here Document免交互 1.免交互概述 使用I/O重定向的方式将命令列表提供给交互式程序 是一种标准输入&#xff0c;只能接收正确的指令或命令 2.格式&#xff1a; 命令 <<标记 ....... 内容 #标记之间是传入内容 ....... 标记 注意事项 标记可以使用任意的合法…

mybatisplus批量写入

1.新建MybatisPlusConfig /*** MybatisPlusConfig.*/ Configuration MapperScan("com.test.mapper") public class MybatisPlusConfig {/*** 自定义批量插入 SQL 注入器.*/Beanpublic InsertBatchSqlInjector insertBatchSqlInjector() {return new InsertBatchSqlI…

WPF 项目中 MVVM模式 的简单例子说明

一、概述 MVVM 是 Model view viewModel 的简写。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面清晰分离。 几个概念的说明&#xff1a; model :数据&#xff0c;界面中需要的数据&#xff0c;最好不要加逻辑代码view : 视图就是用户看到的UI结构 xaml 文件viewModel …

一文了解汽车芯片的分类及用途介绍

汽车芯片按其功能可分为控制类&#xff08;MCU和AI芯片&#xff09;、功率类、传感器和其他&#xff08;如存储器&#xff09;四种类型。市场基本被国际巨头所垄断。人们常说的汽车芯片是指汽车里的计算芯片&#xff0c;按集成规模可分为MCU芯片和AI芯片&#xff08;SoC芯片&am…

Lua之Lua源文件批量转换为luac字节码文件

准备的工具&#xff1a;luac.exe CSDNhttps://mp.csdn.net/mp_download/manage/download/UpDetailed Unity版: using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public static class Bat…

(学习笔记-调度算法)进程调度算法

进程调度算法也称 CPU 调度算法&#xff0c;毕竟进程是由 CPU 调度的。 当 CPU 空闲时&#xff0c;操作系统就选择内存中标的某个 [就绪状态] 的进程&#xff0c;将其分配给 CPU。 什么时候会发生CPU调度呢&#xff1f;通常有以下情况&#xff1a; 当进程从运行状态转换到等待…

BATPowerShell实现本地文件自动上传FTP服务器

运维工作中&#xff0c;经常需要一些脚本来实现自动化&#xff0c;今天分享本地文件自动上传FTP的两种解决办法&#xff1a; 一、使用BAT自动上传FTP 使用批处理&#xff08;BAT&#xff09;命令文件将本地文件夹内容上传到FTP服务器需要使用Windows自带的命令行工具&#xf…

【卷积神经网络】经典网络之 LeNet-5, AlexNet 与 VGG-16

随着计算机硬件的升级与性能的提高&#xff0c;运算量已不再是阻碍深度学习发展的难题。卷积神经网络&#xff08;Convolution Neural Network&#xff0c;CNN&#xff09;是深度学习中一项代表性的工作&#xff0c;其雏形是 1998 年 LeCun 提出的 LeNet-5 模型。如今&#xff…

Python爬虫——scrapy_日志信息以及日志级别

日志级别&#xff08;由高到低&#xff09; CRITICAL&#xff1a; 严重错误 ERROR&#xff1a; 一般错误 WARNING&#xff1a; 警告 INFO&#xff1a; 一般警告 DEBUG&#xff1a; 调试信息 默认的日志等级是DEBUG 只要出现了DEBUG或者DEBUG以上等级的日志&#xff0c;那么这些…

[oneAPI] 基于BERT预训练模型的SQuAD问答任务

[oneAPI] 基于BERT预训练模型的SQuAD问答任务 Intel Optimization for PyTorch and Intel DevCloud for oneAPI基于BERT预训练模型的SQuAD问答任务语料介绍数据下载构建 模型 结果参考资料 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Int…

回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本…

【24择校指南】华东师范大学计算机考研考情分析

华东师范大学(B) 考研难度&#xff08;☆☆☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分数人数统计&#xff09;、院校概况、23考试科目、23复试详情、各科目及专业考情分析。 正文2563字&#xff0c;预计阅读&#xff1a;3分钟。 2023考情概况…

机器学习深度学习——NLP实战(自然语言推断——注意力机制实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;自然语言推断——数据集&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…

C# 读取pcd、ply点云文件数据

最近研究了下用pcl读取点云数据&#xff0c;又做了个C#的dll&#xff0c;方便读取&#xff0c;同样这个dll基于pcl 最新版本1.13.1版本开发。 上次做的需要先得到点云长度&#xff0c;再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下&a…

Docker详解

文章目录 Docker详解一、Docker简介什么是容器 &#xff1f;容器技术有哪些优点 &#xff1f;什么是Docker &#xff1f;Docker的特点Docker的使用场景 二、Docker的基本组成Docker 客户端 / 守护进程Docker Image 镜像Docker Container 容器Docker Registry 仓库 三、Docker 依…

嵌入式系统中如何选择RTC电池?

RTC&#xff08;Real Time Clock&#xff09;是一种用于提供系统时间的独立定时器&#xff0c;它可以在系统断电或低功耗模式下继续运行&#xff0c;只需要一个后备电池作为供电源。在嵌入式系统中&#xff0c;选择合适的RTC电池时非常关键的&#xff0c;它会影响系统时间的准确…