Pytest --capture 参数详解:如何控制测试执行过程中的输出行为

ops/2024/12/5 4:54:15/

--capture 选项用于控制测试用例执行过程中标准输出(stdout)和标准错误输出(stderr)的捕获行为。


--capture 的选项值:
fd(默认)
捕获文件描述符级别的输出(stdout 和 stderr)。
使用此模式,所有的标准输出和标准错误都会被捕获,即使它们来自 C 扩展模块。
sys
捕获 Python 层级的 sys.stdout 和 sys.stderr。
no
不捕获输出,标准输出和错误直接显示在终端中。
tee-sys
将 sys.stdout 和 sys.stderr 的输出同时捕获并输出到终端(类似于实时查看日志的效果)。此选项在调试时非常有用。
使用方式:
可以在运行 pytest 时通过命令行指定:

pytest --capture=fd          # 默认行为
pytest --capture=sys         # 仅捕获 Python 层级输出
pytest --capture=no          # 不捕获输出,实时打印
pytest --capture=tee-sys     # 同时捕获并输出到终端

示例:
假设有一个测试文件 test_example.py:

import sysdef test_print():print("This is a test for stdout.")sys.stderr.write("This is a test for stderr.\n")assert True

1. 默认模式 (fd):
运行命令:

pytest --capture=fd

输出:标准输出和错误不会直接显示在终端中,而是只在失败时打印或保存在日志中。
2. 不捕获模式 (no):
运行命令:

pytest --capture=no

输出:标准输出和标准错误会实时显示在终端中。
3. tee-sys 模式:
运行命令: 

pytest --capture=tee-sys

输出:标准输出和标准错误会实时显示在终端中,同时也会被捕获。


配置到 pytest.ini:
如果想始终使用某种捕获行为,可以将其添加到 pytest.ini 文件:

[pytest]
addopts = --capture=tee-sys

以下是我本地在执行过程中指定tee-sys时终端的输出:

---Captured log call--- 下面是网络请求的日志和执行的日志,即使用logging记录的日志。 

总结:
--capture 是一个灵活的选项,用于控制标准输出和错误的捕获方式。
在调试时,--capture=no 或 --capture=tee-sys 通常更方便,能实时看到日志输出。


http://www.ppmy.cn/ops/139184.html

相关文章

智能合约开发框架--Hardhat

Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。它可以帮助开发人员管理和自动化构建智能合约和dApps过程中固有的重复性任务,并围绕这一工作流程轻松引入更多功能。这意味着hardhat在最核心的地方是编译、运行和测试智能合约。 一、Hardhat的优点 Deb…

负载均衡指南:Nginx与HAProxy的配置与优化

在现代网络应用中,负载均衡是确保高可用性和高性能的关键技术。通过将流量分配到多台服务器上,负载均衡器能够有效提升系统的处理能力,并防止单点故障。本文将详细介绍两种常见的负载均衡器——Nginx和HAProxy的配置与优化方法,并…

iOS——MVC、MVP、MVVM

MVC MVC模式是将应用程序分成三个部分的一种架构模式,一般分为:Model(模型),View(视图),Controller(控制器)。各部分功能如下: Model:负责数据的管理,包括数据的结构和逻辑处理,以…

Ubantu系统非root用户安装docker教程

非root用户没有超级权限,根据docker安装教程安装完毕会发现无法拉取镜像,或者每次运行docker都需要加上sudo,输入密码验证。 解决办法如下: 1、创建docker用户组 sudo groupadd docker2、将非root用户(当前用户&am…

Linux - 前端程序员常用的 Linux 命令

一、 CentOS (Community Enterprise Operating System) Linux 系统中一切皆文件 社区企业操作系统,是Linux 发行版本之一,来自于 Red Hat Enterprise Linux 依照 开源代码 规定释出的源代码编译成的。 由于出自同样的源码,因此有些要求高度稳…

【NLP高频面题 - LLM架构篇】大模型使用SwiGLU相对于ReLU有什么好处?

【NLP高频面题 - LLM架构篇】大模型使用SwiGLU相对于ReLU有什么好处? 重要性:★★★ 💯 NLP Github 项目: NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化…

SQLite:DDL(数据定义语言)的基本用法

SQLite:DDL(数据定义语言)的基本用法 1 主要内容说明2 相关内容说明2.1 创建表格(create table)2.1.1 SQLite常见的数据类型2.1.1.1 integer(整型)2.1.1.2 text(文本型)2…

Simulink的SIL软件在环测试

以基于模型的设计(MBD)的软件开发时,需要进行SIL(软件在环测试)。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中,用在需要将控制器生成移植到硬件前,把控制器的模块生成代码&…