2014-06-19 118 views
2

我有以下问题,我需要使用pytest执行一堆测试,每个测试基本相同,唯一的区别是参数。使用PyTest参数化测试集

比如我要执行:

./command_line arg1 
    ./command_line arg2 
    ... 
    ./command_line argN 

然后我需要验证可执行命令总是返回预期定的结果。

我知道this,所以我想问一个关于哪个问题最好的方法。

我提前感谢你!

编辑: 最后,我在StackOverflow中找到了question,其中建议看看this page,我发现它对我来说很有用。

+0

生成使用'yield'测试,在博客文章您链接太多(我写的)描述不再推荐(这是写在2008年!)。下面的@sashk提供的答案是这样做的方式。 – flub

回答

2

我通常做到这一点使用pytest.mark.parametrize和它的工作原理是这样的:

import pytest 


@pytest.mark.parametrize('arg, result', [ 
('arg1', 'result1'), 
('arg2', 'result2'), 
('arg3', 'result3'), 
('argN', 'resultN'), 
]) 
def test_cmd0(arg, result): 
    out = subprocess.check_output(['cmd', arg]) 
    assert out.rstrip() == out 

其中arg1 .. argN - 你的论点,并result1,..,resultN您预期的结果。

在上面的例子中,我展示了如何启动外部命令并期望在每次运行时获得不同的结果。如果预期的结果是一样的,你总是可以跳过参数化result,只是做:

assert out.rstrip() == 'expected result' 
+0

即使我已经使用我在编辑中添加的链接解决了我的问题,我将选择@ sashk的答案,因为我理解它也解决了我提出的问题。 – pafede2