2014-06-19 160 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