py.test 拆解查看测试是否失败并打印子进程输出

2024-03-18

如果测试失败,我想在 py.test 拆解中打印子进程输出 - 或将其发送到任何其他人类可读的输出。是否可以在拆卸时检查测试是否失败?还有其他方法可以仅在测试失败期间获取子进程命令的输出吗?

My code:

"""Test different scaffold operations."""
import subprocess

import pytest
from tempfile import mkdtemp


@pytest.fixture(scope='module')
def app_scaffold(request) -> str:
    """py.test fixture to create app scaffold."""

    folder = mkdtemp(prefix="websauna_test_")

    cmdline = ["..."]

    worker = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    worker.wait(timeout=5.0)

    if worker.returncode is not None:
        raise AssertionError("scaffold command did not properly exit: {}".format(" ".join(cmdline)))

    def teardown():
        worker.terminate()
        # XXX: Hard to capture this only on failure for now
        print(worker.stdout.read().decode("utf-8"))
        print(worker.stderr.read().decode("utf-8"))

    request.addfinalizer(teardown)

您可以使用捕获测试中异常的函数来装饰测试。如果出现异常,记录进程输出:

import functools
import subprocess

import pytest


def catch_exception(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        worker = kwargs['app_scaffold']
        try:
            return func(*args, **kwargs)
        except Exception as e:
            print('stdout:', worker.stdout.read().decode("utf-8"))
            print('stderr:', worker.stderr.read().decode("utf-8"))
            raise
    return wrapper


@pytest.fixture(scope='module')
def app_scaffold(request) -> subprocess.Popen:
    """py.test fixture to create app scaffold."""
    cmdline = ["echo", "something"]

    worker = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    worker.wait(timeout=5.0)

    return worker


@catch_exception
def test_foo(app_scaffold):
    assert False

该代码遗漏了示例中的一些细节,但我认为它应该包含处理案例所需的所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

py.test 拆解查看测试是否失败并打印子进程输出 的相关文章

  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • ctypes 错误:libdc1394 错误:无法初始化 libdc1394

    我正在尝试将程序编译为共享库 我可以使用 ctypes 在 Python 代码中使用该库 使用以下命令该库可以正常编译 g shared Wl soname mylib O3 o mylib so fPIC files pkg config
  • Python 是解释型的还是编译型的,或者两者兼而有之?

    据我了解 An 解释的语言是由解释器 将高级语言转换为机器代码然后执行的程序 实时运行和执行的高级语言 它一次处理一点程序 A compiled语言是一种高级语言 其代码首先由编译器 将高级语言转换为机器代码的程序 转换为机器代码 然后由执
  • 如何在VIM中设置文件的正确路径?

    每当我击中 pwd在 vim 中命令总是返回路径C Windows system32 即使我在桌面上的 Python 文件中 所以每当我跑步时 python 命令返回 python can t open file Users myname
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • 在相同任务上,Keras 比 TensorFlow 慢

    我正在使用 Python 运行斩首 DCNN 本例中为 Inception V3 来获取图像特征 我使用的是 Anaconda Py3 6 和 Windows7 使用 TensorFlow 时 我将会话保存在变量中 感谢 jdehesa 并
  • Python、subprocess、call()、check_call 和 returncode 来查找命令是否存在

    我已经弄清楚如何使用 call 让我的 python 脚本运行命令 import subprocess mycommandline lumberjack sleep all night work all day subprocess cal
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • Werkzeug 中的线程和本地代理。用法

    首先 我想确保我正确理解了功能的分配 分配本地代理功能以通过线程内的模块 包 共享变量 对象 我对吗 其次 用法对我来说仍然不清楚 也许是因为我误解了作业 我用烧瓶 如果我有两个 或更多 模块 A B 我想将对象C从模块A导入到模块B 但我
  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • Django - 提交具有同一字段多个输入的表单

    预警 我对 Django 以及一般的 Web 开发 非常陌生 我使用 Django 托管一个基于 Web 的 UI 该 UI 将从简短的调查中获取用户输入 通过我用 Python 开发的一些分析来提供输入 然后在 UI 中呈现这些分析的可视
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • 带有 RotatingFileHandler 的 Python 3 记录器超出 maxBytes 限制

    我使用以下代码来限制日志文件的大小 最小示例 import logging from logging handlers import RotatingFileHandler Set up logfile and message loggin
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • 从列表python的单个列表中删除子列表

    我已经经历过从列表列表中删除子列表 https stackoverflow com questions 47209786 removing sublists from a list of lists 但当我为我的数据集扩展它时 它不适用于我
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • 使 saxon-c 在 Python 中可用

    我刚刚读到 Saxon 现在可用于 Python 这非常有趣而且很好 但是任何人都可以写一篇关于如何使其可用于 Python Anaconda WingIDE 或类似的教程吗 我习惯于使用 pip 或 conda 安装 并指向一个包 轮子以
  • xcode 5 问题:“iOS 模拟器无法安装应用程序”

    我刚刚将我的 xcode 版本升级到 5 0 运行应用程序 2 3 次后 它给我这样的错误 iOS模拟器无法安装应用程序 这在旧的 xcode 中工作正常 当我重置模拟器时 它工作正常 但这一次又一次令人恼火 谁能告诉我真正的问题是什么 我
  • DateTimePicker 显示今天的日期而不是显示其实际值

    我们在表单上的自定义用户控件上有几个 DateTimePicker 它们是可见的 但未启用 仅用于显示目的 当加载 UserControl 时 DateTimePicker 会从来自 DataSet 的 DataRow 分配值 该 Data
  • 什么时候需要在 Ruby C 扩展中声明易失性值?

    我找不到太多关于何时适合声明的文档VALUE as volatileRuby 扩展中以避免过早对正在使用的对象进行垃圾回收 这是我到目前为止所学到的 有人可以填空吗 When volatile does not需要使用 在 C 对象成员中
  • 获取线程的输出

    您认为获取线程工作结果的最佳方式是什么 想象一个线程执行一些计算 如何警告主程序计算已完成 您可以每隔 X 毫秒轮询一些名为 作业完成 的公共变量或顺便说一句 但是您会收到比可用结果更晚的结果 主代码将浪费时间等待它们 另一方面 如果您使用
  • 如何从文件(即 SVG)创建 CGPath

    是否可以从给定文件创建 CGPath SVG 是首选 但任何东西都可以 袖珍SVG https github com arielelkin PocketSVG会将 SVG 文件转换为 UIBezierPath 从中您可以获得 CGPath
  • Mac OS X 上的 Heroku Local 和 PHP

    目前 除了始终在线的 apache 代理 php fpm 之外 我只使用额外的终端选项卡来手动启动工作进程和时钟进程 当我开始使用heroku时 我尝试了heroku local 但它的设置打败了我 现在我想再试一次 我在 High Sie
  • 在 Keras 中,LSTM 状态何时在 model.predict 调用中重置?

    该模型将 LSTM 作为第一层 当调用 model predict 时 假设您传递了几个样本 gt sam np array 5 6 3 6 6 3 5 6 3 gt model predict sam array 0 23589483 0
  • 为什么 ShutdownHookThread 'setDaemon true'

    我最近需要向我拥有的 Scala 应用程序添加一个关闭钩子 我发现 Scala 为此提供了一个帮助程序 称为关闭钩子线程 http www scala lang org api 2 9 0 index html scala sys Shut
  • 为什么我的 Office 365 OAuth2 刷新令牌总是很快过期?

    我知道 Office 365 刷新令牌会在用户更改密码时过期 但我发现我的客户几乎每周都会过期 在 Azure 中设置 OAuth2 应用程序时是否存在配置错误 通常 访问令牌持续 1 小时 刷新令牌持续 14 天 根据文件授权码授予流程
  • 异步读取进程输出时的延迟

    我正在使用 NET 和 C 启动一个进程并异步读取它的输出 我的问题是 在我的程序读取输出之前似乎存在延迟 如果我在命令行上运行可执行文件 则在它开始运行时立即有输出 但是 当我使用代码运行它时 在进程退出之前不会调用 ReadOutput
  • iOS 的 Libgdx 项目在模拟器上通过 robovm 编译时显示 libgdx 启动画面?

    如何删除出现在 iOS 模拟器上但未出现在 Android 模拟器中的 libgdx 启动画面 我正在通过 robovm 编译我的 libgdx 项目 Thanks 您将需要替换 RoboVM iOS 项目的 数据 文件夹中的各种 默认 图
  • 通用类作为基会导致 XAML 错误

    我有课程customer and product 他们的相似之处在于班级Base Record 然而 其中的类型Base Record总是取决于它是否是customer or product 因此 我有Base Record一般创建的 立刻
  • Azure 逻辑应用:将 HTTP 标头密钥值提取到变量中

    我是逻辑应用程序的新手 我的逻辑应用收到一个 POST 调用 该调用在 HTTP 标头中具有键值 我希望将其提取到变量中以便稍后在工作流中进行处理 设置变量操作似乎只能访问触发器主体 我尝试以下方法通过表达式访问标头 但无法接收该值 Set
  • SSRS 在报告末尾给出空白页[重复]

    这个问题在这里已经有答案了 我的报告末尾出现了一个空白页SSRS 2005 我有页眉徽标和页脚日期值 并且我已将两者设置为打印最后一页 False 但最后一页仍然是空白的 有什么想法如何消除它吗 谢谢 此解决方案适用于 SSRS 2008
  • Angular 2 中的被动链接 - 等效项

    在 Angular 1 x 中 我可以执行以下操作来创建一个基本上不执行任何操作的链接 a href My Link a 但在 Angular 2 中 相同的标签会导航到应用程序库 Angular 2 中的等效标签是什么 Edit 它看起来
  • 在 VScode 中禁用 R-linting

    在下图中 您可以看到很多 linting highlights 例如 行不应超过 80 个字符 我正在尝试禁用 修改这些 但我不知道如何操作 使用this https learn microsoft com en us visualstud
  • select 不显示所选值

    我有一个用于新建操作和编辑操作的表单 其中一个字段是选择框 编辑时选择应显示数据库中的值 这就是我现在所拥有的 但它显示 基本 作为值 而不是 高级 作为数据库值存储 对于如何进行这项工作有什么建议吗 您应该将所选选项传递给选择的选项 ht
  • 如何通过给定条件和总和合并多行?

    我有包含 ID 时间和状态列的长格式数据 我希望通过 s 2 和 s 3 将一些状态合并到 ID 中 并对时间列进行求和 假设我有数据 ID state time 1 s 1 4 1 s 2 6 1 s 3 7 2 s 1 2 2 s 2
  • py.test 拆解查看测试是否失败并打印子进程输出

    如果测试失败 我想在 py test 拆解中打印子进程输出 或将其发送到任何其他人类可读的输出 是否可以在拆卸时检查测试是否失败 还有其他方法可以仅在测试失败期间获取子进程命令的输出吗 My code Test different scaf