Python 在pytest中参数化并运行单个测试
如何从配置了参数化的集合中运行单个测试? 假设我有以下测试方法:Python 在pytest中参数化并运行单个测试,python,python-2.7,testing,automated-tests,pytest,Python,Python 2.7,Testing,Automated Tests,Pytest,如何从配置了参数化的集合中运行单个测试? 假设我有以下测试方法: @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 v
@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
我有3个参数,我为它们生成了一个包含15个不同可能值的列表,用于测试函数
我怎么能只运行其中一个?除了一种明显的方法-给出一个值而不是15。您可以使用-k
标志来过滤匹配字符串表达式的测试。使用参数化时,pytest使用以下约定命名每个测试用例:
测试名称['-'分离的测试输入]
比如说
test_name[First_test_value-Second_test_value-N_test_value]
pytest -k 'my_test[value_1-value_2]'
例如,选择一个要运行的特定测试就是将上述所有测试放在一起的问题
test_name[First_test_value-Second_test_value-N_test_value]
pytest -k 'my_test[value_1-value_2]'
或
你需要避开方括号。我可以想出两种可能的解决方案
-k
参数运行与给定子字符串表达式匹配的测试pytest --collect-only -q # use --co if pytest 5.3.0+ instead of --collect-only
使用要运行的测试的名称,假设该测试名为test\u file\u name.py::test\u name[value1-value2-value3]
,因此使用以下命令运行它:
pytest测试文件名称.py::测试名称[value1-value2-value3]
注意:如果标识符中有空格,请务必使用引号
解决方案2
该解决方案由Enrique Saez提供,基本上包括通过部分测试名称:
pytest -k -value3]
-k
选项使用子字符串匹配,因此您还可以传入足够多的测试“name”,使其唯一。因此,类似于pytest-k mytest[value\u 1]
甚至pytest-k value\u 2]
的东西也可以工作。-k
选项应该在的“mytest[value\u 1]”
中给出。当我尝试在没有此选项的情况下运行时,PyTest抛出错误找不到模式
。