使用PyTest参数化测试集

时间:2014-06-19 14:30:45

标签: python unit-testing testing pytest

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

例如我必须执行:

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

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

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

我提前谢谢你了!

编辑: 最后,我在StackOverflow中找到了question,建议我查看this page,我觉得这个问题非常有用。

1 个答案:

答案 0 :(得分: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'