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.pswp.cn/news/529821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529821.shtml
英文地址,請注明出處:http://en.pswp.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;/*****…