gpt4 book ai didi

python - 如何在pytest中同时使用fixtures和捕获stdout?

转载 作者:行者123 更新时间:2023-12-04 16:45:58 24 4
gpt4 key购买 nike

我怎么会有这样的事情:

import pytest
@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
("2+4", 6),
("6*9", 42),
])
def test_printed_out_value(test_input, expected, capsys): # <-- notice the third argument
print test_input
out, err = capsys.readouterr()
assert out == expected

上面的代码失败是因为我们使用参数化时不能使用全局 fixture capsys。我的意思是我找不到在函数内部传递它的方法。有什么办法我看不到我可以在哪里 capture the output但仍然使用 parametrize ?

最佳答案

我不完全确定我是否正确理解了您的问题,但以下代码剪切有效(2 个测试通过,1 个失败):

import pytest

class __capsys_class__:
def readouterr(self, in_str):
return eval(in_str), None

@pytest.fixture(scope = 'module')
def capsys():
return __capsys_class__()

@pytest.mark.parametrize('in_param', [
('3+5', 8),
('2+4', 6),
('6*9', 42),
])
def test_printed_out_value(capsys, in_param):
test_input, expected = in_param
print(test_input) # Python 3 print function!
out, err = capsys.readouterr(test_input)
assert out == expected

首先,我总是将固定装置放在参数“列表”的开头。似乎以这种方式工作。其次,我只是将您的元组按原样发送到测试中( in_param )并在测试中解压它们。

编辑: stdout当测试失败时捕获并显示。对于上面的代码,它看起来像这样:
~> pytest 
========================================================== test session starts ===========================================================
platform linux -- Python 3.6.2, pytest-3.3.1, py-1.5.2, pluggy-0.6.0
rootdir: /home/ernst/Desktop/so/tests, inifile:
collected 3 items

test_demo.py ..F [100%]

================================================================ FAILURES ================================================================
___________________________________________________ test_printed_out_value[in_param2] ____________________________________________________

capsys = <test_demo.__capsys_class__ object at 0x7fd57e60c860>, in_param = ('6*9', 42)

@pytest.mark.parametrize('in_param', [
('3+5', 8),
('2+4', 6),
('6*9', 42),
])
def test_printed_out_value(capsys, in_param):
test_input, expected = in_param
print(test_input)
out, err = capsys.readouterr(test_input)
> assert out == expected
E assert 54 == 42

test_demo.py:21: AssertionError
---------------------------------------------------------- Captured stdout call ----------------------------------------------------------
6*9
=================================================== 1 failed, 2 passed in 0.03 seconds ===================================================

检查 6*9在倒数第二行。这是由测试中的打印功能打印的。

关于python - 如何在pytest中同时使用fixtures和捕获stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com