python执行过程打印,如何在pytest运行过程中看到正常的打印输出?

乔在接受的答案中提出了一个评论 ,他问道:

有没有办法打印到控制台并捕获输出,以便它显示在junit报告中?

在UNIX中,这通常被称为开球 。 理想情况下,开球而不是捕捉将是py.test默认。 非理想情况下,无论py.test还是任何现有的第三方py.test插件( 我知道,无论如何 )支持开球 – 尽pipePython平凡支持开箱即用 。

猴子补丁py.test做任何不支持的东西是不平凡的。 为什么? 因为:

大多数py.testfunction被locking在一个不打算从外部导入的私有_pytest包之后。 试图在不知道自己在做什么的情况下这样做通常会导致公共pytest包在运行时引发模糊的exception。 非常感谢py.test。 真的强大的build筑,你到了那里。

即使你真的想搞清楚如何以安全的方式修改私有的_pytest API,你必须在运行由外部py.test命令运行的公共pytest包之前这样做。 你不能在一个插件(例如,你的testing套件中的一个最高级的conftest模块)中做到这一点。 当py.test懒洋洋地dynamic地导入你的插件的时候,任何想要猴子打补丁的py.test类都已经被实例化了,而且你没有权限访问这个实例。 这意味着,如果你想让你的猴子补丁有意义的应用,你不能再安全地运行外部的py.test命令。 相反,您必须使用自定义的setuptools test命令来包装该命令的运行(按顺序):

Monkey-patches private _pytest API。

调用公共pytest.main()函数来运行py.test命令。

这个答案monkey-patches py.test的-s和--capture=no选项捕获stderr而不是 stdout。 默认情况下,这些选项既不捕获stderr也不捕获stdout。 当然,这不是开球。 但是,每一次伟大的旅程都是从五年中每个人都忘记的乏味前传开始的。

为什么这样做? 我现在要告诉你。 我py.test驱动的testing套件包含慢速functiontesting。 显示这些testing的标准输出是有帮助和可靠的,防止leycec达到killall -9 py.test时,另一个长时间运行的functiontesting不能做任何事情,连续数周。 但是,显示这些testing的stderr可以防止py.test在testing失败时报告exception回溯。 这是完全无益的。 因此,我们强制py.test捕获stderr而不是 stdout。

在我们开始之前,这个答案假定你已经有一个自定义的setuptools test命令调用py.test。 如果你不这样做,请参阅py.test编写良好的良好实践页面的手册集成部分。

不要安装pytest-runner ,第三方setuptools插件提供一个自定义的setuptools test命令,同时调用py.test。 如果已经安装了pytest-runner,则可能需要卸载该pip3软件包,然后采用上面链接的手动方法。

假设您按照上面强调的“ 手动积分”中的说明进行操作 ,那么您的代码库应该包含一个PyTest.run_tests()方法。 修改这个方法类似于:

class PyTest(TestCommand): . . . def run_tests(self): # Import the public "pytest" package *BEFORE* the private "_pytest" # package. While importation order is typically ignorable, imports can # technically have side effects. Tragicomically, that is the case here. # Importing the public "pytest" package establishes runtime # configuration required by submodules of the private "_pytest" package. # The former *MUST* always be imported before the latter. Failing to do # so raises obtuse exceptions at runtime... which is bad. import pytest from _pytest.capture import CaptureManager, FDCapture, MultiCapture # If the private method to be monkey-patched no longer exists, py.test # is either broken or unsupported. In either case, raise an exception. if not hasattr(CaptureManager, '_getcapture'): from distutils.errors import DistutilsClassError raise DistutilsClassError( 'Class "pytest.capture.CaptureManager" method _getcapture() ' 'not found. The current version of py.test is either ' 'broken (unlikely) or unsupported (likely).' ) # Old method to be monkey-patched. _getcapture_old = CaptureManager._getcapture # New method applying this monkey-patch. Note the use of: # # * "out=False", *NOT* capturing stdout. # * "err=True", capturing stderr. def _getcapture_new(self, method): if method == "no": return MultiCapture( out=False, err=True, in_=False, Capture=FDCapture) else: return _getcapture_old(self, method) # Replace the old with the new method. CaptureManager._getcapture = _getcapture_new # Run py.test with all passed arguments. errno = pytest.main(self.pytest_args) sys.exit(errno)

要启用这个猴子补丁,运行py.test,如下所示:

python setup.py test -a "-s"

现在将捕获Stderr但不是 stdout。 漂亮!

把上面的猴子补丁扩展到发球台和stderr是一个充满空闲时间的阅读练习。

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

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

相关文章

cfar恒虚警matlab实现,一种用于距离副瓣抑制的自适应恒虚警方法与流程

本发明涉及脉冲压缩雷达数字信号处理技术领域。背景技术:在传统的真空管体制雷达中,由于发射占空比受限,通过设计较低的雷达重复发射频率实现远距离的目标探测,但由于发射的是简单的脉冲调制波形,重复频率降低和脉宽加…

修改oracle数据连接数据库,如何修改oracle数据库的连接数

如何修改oracle数据库的连接数查询数据库当前进程的连接数:select count(*) from v$process;查看数据库当前会话的连接数:elect count(*) from v$session;查看数据库的并发连接数:select count(*) from v$session where statusACTIVE;查看当前…

oracle导出中文utf8乱码,ORACLE导入导出后发生中文乱码的原因及解决办法

从数据库服务器上使用exp导出时显示如下:[oraclekf15-1]:/users/oracle>$ exp username/passwdkf15-1/i1000 tablestable_name filetable_name_unix.dmp satisticsnone buffer1000000Export: Release 10.2.0.4.0 - Production on 星期四 8月 26 16:37:08 2010Cop…

基于matlab的图解粒度参数计算,基于MATLAB的图解粒度参数计算

摘要粒度特征是沉积物的基本特征之一。计算沉积物粒度参数的方法主要有矩法和图解法两种,其中图解法必须通过手工作图求累积曲线,是一项相当繁杂的劳动,不利于计算大量样品。文中提出的方法将图解求沉积物样品的累积曲线百分位数的过程转化为…

oracle判断数据出现交叉,Oracle!你必须要知道的Knowledge points(一)

一、入门oracle有四个用户,分别为sys、system、sysman和scott,其中sys是oracle权限最高的用户,类似于Linux系统的root,scott是示例用户,上课就以这个用户里的三张员工表empno、dept、salgrade作为示例来授课。启动服务1. 快捷键ct…

php上传中文图片,用PHP处理图片文件的上传

这篇文章主要介绍了关于用PHP处理图片文件的上传&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下1.html文件form表单注意。enctype属性代码&#xff1a;<?php require(../../public/common/config.php);$sqlClass "s…

nodejs+php+aes加密解密,php,crypto_php与nodejs的加密数据互通,php,crypto,node.js - phpStudy...

php与nodejs的加密数据互通nodejs的加密解密代码示例如下&#xff1a;#!/usr/bin/env nodevar crypto require(crypto);//解密function decode(cryptkey, iv, secretdata) {vardecipher crypto.createDecipheriv(aes-256-cbc, cryptkey, iv),decoded decipher.update(secret…

360 php offer,审批终于通过了,从面试到拿到奇虎360的offer已经失…

审批终于通过了&#xff0c;从面试到拿到奇虎360的offer已经失业两周了( •͈ᴗ⁃͈)ᓂ- - -♡&#xfeff;小运营大太阳&#xff1a;沾沾喜气程序猿.南兰&#xff1a;沾沾喜气360员工&#xff1a;欢迎来到酒仙桥第一养老院美团点评员工&#xff1a;[害羞]沾沾喜气盗圣白展堂&a…

linux中的进程权限是,Linux中权限,进程,服务的简单操作

1.权限存在意义- rw-r-r-r-- 1 root root 216 May 12 2017 /mnt/rht[1] [2] [3] [4] [5] [6] [7] [8][1] 文件类型-普通文件d目录l软链接ssocketc文件权限[2] 文件权限rw-|r--|r--u g ouuserggroupoo…

linux 中断 进程,linux中断分上下部分原因

中断处理程序在处理中断时起到了关键作用&#xff0c;也是一个中断程序必不可少的部分。不过&#xff0c;现如今的中断处理流程都会分为两部分&#xff1a;上半部分(top half)和下半部分(bottom half)。为什么要将一个中断分为如此两部分&#xff1f;下面的几个经典原因可以很好…

linux 运行eclipse,解决Linux下Eclipse启动错误

下载Eclipse后一打开就报错&#xff1a;JVM terminated. Exit code-1-Xms40m-Xmx256m-XX:MaxPermSize256m-Djava.class.path/usr/local/eclipse/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar-os linux-ws gtk-arch x86-showsplash /usr/local/eclipse//pl…

linux家庭云服务器,linux服务器云(linux家用云服务器)

可以。注&#xff1a;云服务器有Linux版本&#xff0c;实际上就是Linux在本地环境放到了云上公网环境中&#xff0c;其它操作都是一样的。云主机是集群服务器开发出的虚拟的机器&#xff0c;所以&#xff0c;这个因素不用考虑就问题不大。需要linux系统直接在预装系统安装就可以…

linux13位时间戳,Kotlin 处理Linux时间戳

思路1. 获取时间可以采用的方式有直接获取系统时间System.currentTimeMillis()或者使用Calendar类获取时间2. 处理时间在使用Calendar时&#xff0c;可以直接由Calendar的set方法对于时间进行设置由于Calendar的时间格式并不是我们希望得到的Linux时间戳格式&#xff0c;所以我…

linux脚本done报错,linux – 如何在shell脚本中处理错误/异常?

下面是我在bash中执行的脚本.它工作正常.fileexist0for i in $( ls /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done); domv /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done /data/read-only/clv/daily/archieve-wip/fil…

linux 建立交叉编译环境变量,ARM-Linux-gcc-4.4.3交叉编译环境终于搭建

Linux交叉编译环境终于搭建完成具体步骤&#xff1a;0、软件请到友善之臂的官网下载1、解压tar zxvf arm-linux-gcc-4.4.3-20100728.tar.gz-C/(别make了&#xff0c;直接解压后就可以)2、设置环境变量&#xff1a;首先vi ~/.bashrc然后在最后加上exportPATH$PATH:/opt/Friendly…

查询linux版本信息 sp,查看Linux系统版本和内核信息

Linux查看Linux系统版本信息1. 查看内核版本1) 方法一&#xff1a;登录到linux执行cat /proc/version[[email protected]_32bit_ip12 ~]$ cat /proc/versionLinux version 2.6.18-194.el5 ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Fri Apr…

linux环境对xml的影响,Linux下XPath对xml解析

#ifndef CONF_XML_H#define CONF_XML_H// xml文件Z在《Linux下获取xml调试信息等级》里有#include #include #include #include #include #include #include #include #define ROOT "root" //根节点#define SON_1 "can0" //儿子节点1#define SON_2 "c…

linux系统下压缩文件,Linux系统下文件的压缩.打包与解压

处理 .zip 文件的 zip 和 unzipzip 和 unzip 程序位于 /usr/bin 目录中&#xff0c;它们和 MS - DOS 下的 pkzip、pkunzip 以及 MS-windows 的 Winzip 软件功能一样、可将文件压缩成 .zip 文件以节省硬盘空间&#xff0c;而当需要的时候再将压缩文件解开。压缩文件的 zip 命令z…

c语言程序执行完main函数后,一个c程序在执行main函数之前和main之后都做了那些事情啊该如何解决...

当前位置:我的异常网 C语言 一个c程序在执行main函数之前和main之后都做了那些一个c程序在执行main函数之前和main之后都做了那些事情啊该如何解决www.myexceptions.net 网友分享于&#xff1a;2013-04-17 浏览&#xff1a;19次一个c程序在执行main函数之前和main之后都做了…

c语言stm32串口控制单片机,实用STM32的串口控制平台的实现

假设我要编写一个自己的指令脚本&#xff0c; 来读取MCU的关键信息&#xff0c;关键字为mcu&#xff0c; 文件命名为shell_mcu.c&#xff1b; 当输入“mcu rd 0”时显示MCU的FLASH大小&#xff0c;输入“mcu rd 1”时读取MCU的唯一ID信息。shell_mcu.c源代码&#xff1a;/*****…