首页 > 解决方案 > 测试输出在 Jenkins 构建日志中不可见

问题描述

我想看到来自 jenkins 构建日志中的 python 测试的标准输出。我在 sh 脚本内的 Jenkins 管道中运行 pytest (==5.3.1):

stage('unit tests') {            
     print "starting unit tests"
     sh script: """
         source env-test/bin/activate && \
         python -m pytest -x -s src/test/test*.py
     """, returnStdout: true, returnStatus: true
}

请注意,我正在使用虚拟环境(env-test)运行我的测试。不幸的是,Jenkins 日志没有显示我在测试中发送的输出:

def test_it(self):
   print('\nhello world')
   self.assertTrue(True)

但它只显示初始调用:

+ python -m pytest -x -s src/test/testModel.py
[Pipeline] }
[Pipeline] // stage

而我本地的 pycharm ide 和 gitbash 显示所有输出:

============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-5.3.1, py-1.8.0, pluggy-0.13.1 --     C:\...\Anaconda3\python.exe
cachedir: .pytest_cache
rootdir: C:\...\src\test
collecting ... collected 1 item

testModel.py::TestModel::test_it
PASSED                                  [100%]
hello world

============================== 1 passed in 0.57s ==============================

pytest 文档正在讨论捕获 stdout/stderr 输出。所以我尝试使用 -s 参数来禁用捕获但没有成功。

标签: pythonpython-3.xjenkinspyteststdout

解决方案


问题是groovy sh 脚本命令的returnStdout 参数:

returnStdout(可选)如果选中,则任务的标准输出将作为步骤值作为字符串返回,而不是打印到构建日志中。(标准错误,如果有的话,仍然会打印到日志中。)您经常需要在结果上调用 .trim() 以去除尾随的换行符。类型:布尔值

所以我只是从 sh 脚本命令中删除该选项。


推荐阅读