如何在 pytest 中将自定义部分添加到终端报告

2023-12-09

In pytest,当测试用例失败时,您会在报告中看到以下类别:

  • 失败详情
  • 捕获的标准输出调用
  • 捕获的 stderr 调用
  • 捕获的调用日志

pytest report

我想添加一些额外的自定义部分(我有一个并行运行的服务器,并且希望在专用部分中显示该服务器记录的信息)。

我怎样才能做到这一点(如果可能的话)?

Thanks


NOTE:

我目前在源代码中找到了以下内容,但不知道这是否是正确的方法

nodes.py

class Item(Node):
    ...
    def add_report_section(self, when, key, content):
        """
        Adds a new report section, similar to what's done internally
        to add stdout and stderr captured output:: 
        ...
        """

报告.py

class BaseReport:
    ...

    @property
    def caplog(self):
        """Return captured log lines, if log capturing is enabled

        .. versionadded:: 3.5
        """
        return "\n".join(
            content for (prefix, content) in self.get_sections("Captured log")
        )

要将自定义部分添加到终端输出,您需要附加到report.sections列表。这可以在以下位置完成pytest_report_teststatus直接 hookimpl,或间接在其他钩子中(通过钩子包装器);实际的实现在很大程度上取决于您的特定用例。例子:

# conftest.py

import os
import random
import pytest

def pytest_report_teststatus(report, config):
    messages = (
        'Egg and bacon',
        'Egg, sausage and bacon',
        'Egg and Spam',
        'Egg, bacon and Spam'
    )

    if report.when == 'teardown':
        line = f'{report.nodeid} says:\t"{random.choice(messages)}"'
        report.sections.append(('My custom section', line))


def pytest_terminal_summary(terminalreporter, exitstatus, config):
    reports = terminalreporter.getreports('')
    content = os.linesep.join(text for report in reports for secname, text in report.sections)
    if content:
        terminalreporter.ensure_newline()
        terminalreporter.section('My custom section', sep='-', blue=True, bold=True)
        terminalreporter.line(content)

测试示例:

def test_spam():
     assert True

def test_eggs():
     assert True


def test_bacon():
     assert False

运行测试时,您应该看到My custom section底部的标题为蓝色,并包含每个测试的消息:

collected 3 items

test_spam.py::test_spam PASSED
test_spam.py::test_eggs PASSED
test_spam.py::test_bacon FAILED

============================================= FAILURES =============================================
____________________________________________ test_bacon ____________________________________________

    def test_bacon():
>        assert False
E        assert False

test_spam.py:9: AssertionError
---------------------------------------- My custom section -----------------------------------------
test_spam.py::test_spam says:   "Egg, bacon and Spam"
test_spam.py::test_eggs says:   "Egg and Spam"
test_spam.py::test_bacon says:  "Egg, sausage and bacon"
================================ 1 failed, 2 passed in 0.07 seconds ================================
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 pytest 中将自定义部分添加到终端报告 的相关文章

  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • 将 Pandas 列中的列表拆分为单独的列

    这是我在 pandas 数据框中的 特征 列 Feature Cricket 82379 Kabaddi 255 Reality 4751 Cricket 15640 Wildlife 730 LiveTV 13 Football 4129
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • 如何通过字符串匹配加速 pandas 行过滤?

    我经常需要过滤 pandas 数据框df by df df col name string value 并且我想加快行选择操作 有没有快速的方法可以做到这一点 例如 In 1 df mul df 3000 2000 3 reset inde
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如

随机推荐

  • Class#getClassLoader 什么时候返回 null?

    假设我有一些 Java 代码 public class Widget whatever 以及一些类加载的代码Widget ClassLoader widgetLoader Widget class getClassLoader Can wi
  • Angular2 使用对象数组排序管道

    如何使用对象数组在 angular2 中制作排序管道 原始问题 我有一个 TODO 列表 Todo 我想在每次进行一些更改时对其进行排序 我希望已完成的待办事项显示在列表底部 Todo 对象有一个名为 completed 的属性 它存储一个
  • 如何在 vbscript 中解压受密码保护的文件?

    我对 VBScript 还很陌生 我对我想要实现的目标做了一些广泛的研究 甚至找到了该怎么做的例子 但无法让它正常工作 在我的完美世界中 我需要解压缩从第三方供应商发送到文件夹的所有压缩文件 将解压缩的文件导入到不同的文件夹中 然后删除压缩
  • 读取缓冲的二进制文件(带查找)

    假设我需要读取巨大的整数二进制文件 一个方便的方法是 FileInputStream fi new FileInputStream file BufferedInputStream bi new BufferedInputStream fi
  • 查找当前 EntityManagerFactory 的当前持久化单元

    我注意到打电话createEntityManagerFactory null 将使用配置文件中的默认持久性单元 PU 有时 类路径在部署时真的很混乱 我真的很想查看给定 EntityManagerFactory 的当前 PU 的名称 有什么
  • 使用discord.py 让机器人响应图像

    使用discord py 进行机器人编码的新手 正如标题所示 我希望有人能告诉我如何让机器人响应某人发送的图像 无论是从互联网粘贴还是从计算机上传 当然 您可以使用 attachments client event async def on
  • 我需要一个正则表达式将美国电话号码转换为链接

    基本上 输入字段只是一个字符串 人们以各种格式输入电话号码 我需要一个正则表达式来查找这些数字并将其转换为链接 输入示例 201 555 1212 201 555 1212 201 555 1212 555 1212 这就是我想要的 a h
  • socket.error: [Errno 48] 地址已在使用中

    我正在尝试从 mac 终端使用 python 设置服务器 我导航到文件夹位置并使用 python m SimpleHTTPServer 但这给了我错误 socket error Errno 48 Address already in use
  • 使用 Gspread 在文件夹中创建电子表格

    我无法找到有关如何使用 Gspread 在某个 Google Drive 目录中创建 GSheet 的任何文档 我检查了文档并查看了一些后端代码 我目前正在使用下面的代码来创建电子表格 worksheet sh add worksheet
  • 如何将Asterisk服务器与外部关系数据库(例如mysql)集成?

    我的目标 客户端 SIP电话 我使用3CX电话 拨号到asterisk服务器 asterisk然后连接外部关系数据库 与asterisk服务器不在同一位置 如果数据库响应某些内容 asterisk服务器播放语音文件 预定义的 gsm 文件
  • 传递 URL 中包含“%”的参数?

    例如 在传递我的网址时something 8000 something jsp param1 update param2 1000 param3 SearchString param4 3 我收到以下错误 Bad Request Your
  • 将每个组中的行替换为第一行值。熊猫集团

    这是一个数据框 df pd DataFrame A foo foo bar bar bar B 1 2 2 4 1 下面是我想要的样子 这就是我的尝试和失败的方法 groups df groupby A groups apply lambd
  • 使用 jQuery 滚动到某个元素

    我有这个input元素
  • 如何从 C++ 更改 Windows shell (cmd.exe) 环境变量?

    我想编写一个程序 在调用它的 shell cmd exe 实例中设置环境变量 我的想法是 我可以在这个变量中存储一些状态 然后在后续调用中再次使用它 我知道有像 SetEnvironmentVariable 这样的命令 但我的理解是这些命令
  • 在 msi 自定义操作中执行时,MsiOpenDatabaseW 引发访问冲突

    我有一个代码可以修改cached 不是正在安装的 msi 安装程序数据库工作正常在独立 exe 中执行时 但是当它从 msi 自定义操作中运行时 我遇到了非常奇怪的访问冲突 const auto msiProductCode GetProd
  • 为迷宫墙添加碰撞

    有人可以帮我向我的精灵添加碰撞点吗 我过去有一个代码 我在图像上分层了位图 但相同的代码不能很好地集成用于物理绘制线条 而不是检测图像上黑色 灰色的位置 import random import pygame pygame init WHI
  • ExtractAssociatedIcon 返回 null

    我正在使用ExtractAssociatedIcon检索文件图标的方法 我的希望是检索用户在资源管理器窗口中看到的相同图标 public static Icon GetIcon string fileName try Icon icon I
  • 导入错误:没有名为“请求”的模块

    尝试运行 Python 脚本时出现此错误 我已经下载了 requests 1 2 0 文件夹 但我不知道如何处理它 我尝试运行下载中包含的 setup py 文件 但它只是打开命令终端一秒钟然后关闭 我从 Windows 桌面运行 Pyth
  • 网格中不相交路径的近似算法

    我最近遇到了这个问题 我想我可以在这里分享它 因为我无法得到它 我们给定一个 5 5 的网格 编号为 1 25 以及一组 5 对点 它们是网格上路径的起点和终点 现在我们需要为这 5 对点找到 5 条对应的路径 这样两条路径就不会重叠 另请
  • 如何在 pytest 中将自定义部分添加到终端报告

    In pytest 当测试用例失败时 您会在报告中看到以下类别 失败详情 捕获的标准输出调用 捕获的 stderr 调用 捕获的调用日志 我想添加一些额外的自定义部分 我有一个并行运行的服务器 并且希望在专用部分中显示该服务器记录的信息 我