这里我有 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.log 包含测试运行的信息, log2.log 包含所有打印件,但 log2.log < / b>是空的
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\01.Learning_Python\27.pytest_std_ouput, inifile:
collected 2 items
tests.py .
========================== 1 passed in 0.01 seconds ===========================
log2.log 的内容:文件为空
期望 log2.log 内容:
Start
End
OK
所以我的问题是我做错了什么,如何让它以这种方式工作,谢谢你。
答案 0 :(得分:1)
我猜想py.test的默认选项是通过覆盖sys.stdout捕获al输出,取消代码以覆盖sys.stdout。
我已经测试了三个似乎可以解决您问题的选项:
print = lambda x: open('log2.log', 'a').write(str(x)+"\n")
-s
选项来禁用py.test的输出捕获。
log.log
- 文件尽管3是最大的努力,取决于你想要达到的目标,我相信这是最好的解决方案。