python - 测试输出在 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 参数来禁用捕获但没有成功。
解决方案
问题是groovy sh 脚本命令的returnStdout 参数:
returnStdout(可选)如果选中,则任务的标准输出将作为步骤值作为字符串返回,而不是打印到构建日志中。(标准错误,如果有的话,仍然会打印到日志中。)您经常需要在结果上调用 .trim() 以去除尾随的换行符。类型:布尔值
所以我只是从 sh 脚本命令中删除该选项。
推荐阅读
- selenium - Selenium - OpenFileDialog 中的 FileNotFound
- colormap - 具有平滑过渡的 16 位灰度值的颜色映射
- pandas - 合并两个数据框但在 Pandas 中得到一个空数据框
- hyperledger-fabric - Hyperledger Fabric 中的“无身份”错误
- java - List.clear() 与参考重新分配性能
- javascript - 如何在 JSON 文件中编写 onclick 函数
- camunda - 如何在嵌入的 HTML 表单中预选一个选项?
- git - 错误:1400410B:SSL 例程:CONNECT_CR_SRVR_HELLO:错误的版本号
- javascript - Node.js 在回调中将阿拉伯语转换为问号
- java - Kafka Spring 与 sasl 的集成授权