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

有没有办法打印到控制台并捕获输出,以便它显示在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是一个充满空闲时间的阅读练习。

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

  1. windows运行对话框_如何在Windows运行对话框中添加文本快捷方式?

    windows运行对话框 Windows comes prepackaged with a ton of handy run-dialog shortcuts to help you launch a ...

  2. python执行shell命令查看输出_python 运行 shell 命令并捕获输出_python_酷徒编程知识库...

    这个问题的答案取决于你使用的python 版本. 最简单的方法是使用 subprocess.check_output 函数:>>> subprocess.check_output([ ...

  3. java 执行js selenium_如何在Selenium WebDriver Java中使用JavaScript

    根据您之前的问题,我想您想要从Java的WebDriver运行JavaScript代码段.如果我错了,请纠正我. WebDriverJs实际上是"只是"另一种WebDriver语言 ...

  4. python执行oracle的sql语句_在oracledb中执行SQL脚本一次执行一条语句

    假设我有一个sql脚本,如下所示:--split statement 1 ALTER TABLE abs ADD (make VARCHAR2(2 byte), model varCHAR2(12 B ...

  5. OpenAI gym:将gym运行过程保存为gif

    执行CartPole-v1程序,并将运行过程存储为gif 参考链接 参考1 参考2 代码: import gym import matplotlib.pyplot as plt from matplo ...

  6. DirectShow程序运行过程简析

    这段时间一直在学习陆其明老师的<DirectShow开发指南>一书,书中对DirectShow的很多细节讲解清晰,但是却容易让人缺少对全局的把握.在学习过程中,整理了关于DirectSho ...

  7. python执行cmd系统命令获取返回值的几种方式

    python 执行shell命令 注:python3.X模块中以废弃commands该模块,使用subprocess模块在本文下面增加解说 本篇介绍如何使用python在cmd上执行shell命令 用 ...

  8. python执行过程打印_Python-并发编程(进程)

    接下来我们用几天的时间说一说python中并发编程的知识 一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作 ...

  9. html显示python执行的结果_批量执行用例,且结果显示在html中,python控制台也会显示运行过程...

    下载HTMLTestRunner.py放到python安装目录的Lib下: 如下以登录为例,创建不同的.py文件, ========================================== ...

最新文章

  1. 安装 kubernetes-dashboard
  2. Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目
  3. ascii码为0的字符_2.4 序列之字符串
  4. 【数据结构和算法笔记】遍历生成树
  5. 《python基础教程》笔记之 字符串
  6. 78、无线网络设备知识大汇总,值得收藏学习!
  7. wps垂直排列标题与文本_如何垂直设置wps文本
  8. 使用MATLAB App Design 工具设计一个 简易App
  9. java实现阿里云图片文字识别
  10. 服务器在raid5下做系统ghost备份,转 浅析在RAID5下做系统ghost备份
  11. QMediaplayer详解以及简易音乐播放实现
  12. 工业机器人技术全解析,值得收藏!
  13. 【转】关于“手动重新生成注册表性能计数器”的问题
  14. 基于springboot jpa驾校管理系统源码
  15. linux64是大端还是小端,大端和小端区别-linux
  16. 用html制作表白网站制作 超炫酷的七夕情人节表白网页代码
  17. ST电机库v5.4.4源代码分析(10): MCWB应用中的一个小技巧
  18. 公式e=1+1/1!+1/2!+1/3!+......,求 e 的近似值,当下一项的值精度小于10的-6次方时停止累加运算。
  19. sql server查询表数据大小
  20. 南京邮电大学智慧云校园,业务上线速度提升60%

热门文章

  1. 广东制造按下加速键  千家中小企业上阿里云工业互联网
  2. 云数据库精华问答 | 现有数据库优化到云环境有什么好处​?
  3. 10 张令人喷饭的程序员漫画
  4. linux:根据关键字或日期查找日志
  5. CentOS Linux 7.7 安装kafka zookeeper
  6. mysql主从复制排错
  7. 第3篇:Flowable-IDM详述
  8. 一文带你初识---虚拟dom
  9. 学java要算法吗_学习java不可不知的几种算法
  10. java类验证和装载顺序_Java类的加载机制和双亲委派模型