这里有 tests.py 包含:
import sys
sys.stdout = open('log2.log', 'w')
class TestH5Client:
def test_something(self):
print("Start")
assert True
print("End")
def teardown_class(cls):
print("OK")
我正在使用以下 shell 命令运行我的测试
pytest tests.py::TestH5Client::test_something >>log.log
我希望该日志.log包含测试运行和log2的信息.log包含所有打印,但log2.log为空
日志的内容.log(内容是我所期望的(:
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.1.0, py-1.4.33, pluggy-0.4.0
rootdir: C:Stefans 1.Learning_Python27.pytest_std_ouput, inifile:
collected 2 items
tests.py .
========================== 1 passed in 0.01 seconds ===========================
log2.log的内容:文件为空
对 log2.log 内容的预期:
Start
End
OK
所以我的问题是我做错了什么,我怎样才能让它以这种方式工作,提前谢谢你。
我猜 py.test 的默认选项是通过覆盖 sys.stdout 来捕获 al 输出,取消您的代码以覆盖 sys.stdout。
我已经测试了三个似乎可以解决您问题的选项:
- 您可以覆盖打印功能,而不是覆盖sys.stdout,例如
print = lambda x: open('log2.log', 'a').write(str(x)+"n")
- 不会递归记录打印
- 启用每个文件日志记录
- 您可以通过将
-s
选项添加到执行命令来禁用 py.test 的输出捕获。- 将打印所有测试中的所有打印件,也可以递归打印
- 未转换的打印件可能会使您的
log.log
文件变得模糊
- 使用一个体面的记录器框架。
尽管 3 是最大的努力,但这取决于您想要达到的目标,但我相信这是最好的解决方案。