print不起作用 pytest_如何在py.测试定案

我正在测试一个写入日志文件的函数(具体地说,它写入日志文件并不重要,它可以做任何事情,它只是导致这个问题的原因)

像这样:def do_stuff():

with open('/tmp/mylogs.txt', 'a') as f:

f.write(str(time.time()))

f.write(' stuff done! \n')

return 42

我可以这样测试一下:

^{pr2}$

出于调试目的,当测试失败时,我希望能够打印出日志的新内容——我可以制作一个类似这样的fixture:@pytest.fixture()

def watch_logs(request):

with open('/tmp/mylogs.txt') as f:

log_before = f.read()

def get_new_logs():

with open('/tmp/mylogs.txt') as f:

log_after = f.read()

return log_after.replace(log_before, '')

return get_new_logs

很好-现在我可以在我的测试中随时检查日志内容:def test_doing_stuff(watch_logs):

assert do_stuff() == 42

print(watch_logs())

assert do_stuff() == 43

print(watch_logs())

嗯-啊,但是第二次打印不起作用,是在测试失败之后。在

如果我的测试设备总是在测试结束时打印出日志呢?然后pytest的stdout捕获会在失败时显示给我,但在通过时不会显示!在@pytest.fixture()

def watch_logs(request):

with open('/tmp/mylogs.txt') as f:

log_before = f.read()

def get_new_logs():

with open('/tmp/mylogs.txt') as f:

log_after = f.read()

return log_after.replace(log_before, '')

def print_new_logs():

print('~' * 20 + ' logs ' + '~' * 20)

print(get_new_logs())

print('~' * 50)

request.addfinalizer(print_new_logs)

return get_new_logs

哦,但是这不起作用,因为pytests的日志捕获在测试终结器期间没有发生。在

所以问题是:我如何制作一个可以打印东西的测试终结器?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值