pytest参数化并运行单个测试

Avi*_*hen 10 python testing automated-tests pytest python-2.7

如何从配置了parametrize的集合中运行单个测试?假设我有以下测试方法:

@pytest.mark.parametrize(PARAMETERS_LIST, PARAMETERS_VALUES)
def test_my_feature(self, param1, param2, param3):
    """
    test doc
    """
    if param1 == 'value':
        assert True
    else:
        print 'not value'
        assert False
Run Code Online (Sandbox Code Playgroud)

我有3个参数,我为它们生成了15个不同可能值的列表,以测试函数.我怎么会只运行其中一个?除了显而易见的方式 - 给出一个值而不是15.

Enr*_*aez 13

您可以使用标志来指定要运行-k测试,以过滤与字符串表达式匹配的测试.使用parametrize时,pytest使用以下约定命名每个测试用例:

test_name [' - '分开的测试输入]

例如

test_name[First_test_value-Second_test_value-N_test_value]
Run Code Online (Sandbox Code Playgroud)

选择要运行的特定测试是将所有上述内容放在一起的问题

pytest -k my_test[value_1-value_2]
Run Code Online (Sandbox Code Playgroud)

  • `-k`选项使用子字符串匹配,因此您也可以将足够的测试'name'传递给唯一.所以像`pytest -k mytest [value_1]`甚至`pytest -k value_2]`这样的东西也会起作用. (2认同)

lmi*_*asf 12

我可以想到两种可能的解决方案。

  1. 使用您要运行的测试的名称,并执行它
  2. 使用-k参数运行与给定子字符串表达式匹配的测试

解决方案1

使用以下命令查看测试名称而不运行它们:

pytest --collect-only -q # use --co if pytest 5.3.0+ instead of --collect-only
Run Code Online (Sandbox Code Playgroud)

使用您要运行的测试的名称,假设测试名为test_file_name.py::test_name[value1-value2-value3],因此使用以下命令运行它:

pytest --collect-only -q # use --co if pytest 5.3.0+ instead of --collect-only
Run Code Online (Sandbox Code Playgroud)

注意:如果标识符中有空格,请务必使用引号。

解决方案2

该解决方案由 Enrique Saez 提供,它基本上由传递测试名称的一部分组成:

pytest -k -value3]
Run Code Online (Sandbox Code Playgroud)