Pytest - 跳过(xfail)与参数化混合
Pytest - skip (xfail) mixed with parametrize
有没有办法使用 @incremental 插件,如 att Pytest: how to skip the rest of tests in the class if one has failed? 所述,与 @pytest.mark.parametrize 混合使用,如下所示:
@pytest.mark.incremental
Class TestClass:
@pytest.mark.parametrize("input", data)
def test_preprocess_check(self,input):
# prerequisite for test
@pytest.mark.parametrize("input",data)
def test_process_check(self,input):
# test only if test_preprocess_check succeed
我遇到的问题是,在 test_preprocess_check 的第一次失败时,我的数据集的给定输入,以下 test_preprocess_check 和 test_process_check 被标记为 "xfail"。
我期望的行为是,在我的参数化数据集的每个新 "input" 处,测试将以增量方式进行。
例如:数据 = [0,1,2]
如果仅 test_preprocess_check(0) 失败:
我收到以下报告:
1 次失败,5 次失败
但我希望报告:
1 次失败,1 次失败,4 次通过
谢谢
经过一些实验,我找到了一种方法来概括@incremental 以与 parametrize 注释一起工作。只需重写 _previousfailed 参数,使其对于每个输入都是唯一的。参数 _genid 正是需要的。
我添加了一个@pytest.mark.incrementalparam来实现这个。
代码变为:
def pytest_runtest_setup(item):
previousfailed_attr = getattr(item, "_genid",None)
if previousfailed_attr is not None:
previousfailed = getattr(item.parent, previousfailed_attr, None)
if previousfailed is not None:
pytest.xfail("previous test failed (%s)" %previousfailed.name)
previousfailed = getattr(item.parent, "_previousfailed", None)
if previousfailed is not None:
pytest.xfail("previous test failed (%s)" %previousfailed.name)
def pytest_runtest_makereport(item, call):
if "incrementalparam" in item.keywords:
if call.excinfo is not None:
previousfailed_attr = item._genid
setattr(item.parent,previousfailed_attr, item)
if "incremental" in item.keywords:
if call.excinfo is not None:
parent = item.parent
parent._previousfailed = item
有趣的是,它不能在没有参数化的情况下使用,因为参数化注释会自动创建 _genid 变量。
希望这对我以外的人有帮助。
有没有办法使用 @incremental 插件,如 att Pytest: how to skip the rest of tests in the class if one has failed? 所述,与 @pytest.mark.parametrize 混合使用,如下所示:
@pytest.mark.incremental
Class TestClass:
@pytest.mark.parametrize("input", data)
def test_preprocess_check(self,input):
# prerequisite for test
@pytest.mark.parametrize("input",data)
def test_process_check(self,input):
# test only if test_preprocess_check succeed
我遇到的问题是,在 test_preprocess_check 的第一次失败时,我的数据集的给定输入,以下 test_preprocess_check 和 test_process_check 被标记为 "xfail"。 我期望的行为是,在我的参数化数据集的每个新 "input" 处,测试将以增量方式进行。
例如:数据 = [0,1,2]
如果仅 test_preprocess_check(0) 失败:
我收到以下报告: 1 次失败,5 次失败
但我希望报告: 1 次失败,1 次失败,4 次通过
谢谢
经过一些实验,我找到了一种方法来概括@incremental 以与 parametrize 注释一起工作。只需重写 _previousfailed 参数,使其对于每个输入都是唯一的。参数 _genid 正是需要的。
我添加了一个@pytest.mark.incrementalparam来实现这个。
代码变为:
def pytest_runtest_setup(item):
previousfailed_attr = getattr(item, "_genid",None)
if previousfailed_attr is not None:
previousfailed = getattr(item.parent, previousfailed_attr, None)
if previousfailed is not None:
pytest.xfail("previous test failed (%s)" %previousfailed.name)
previousfailed = getattr(item.parent, "_previousfailed", None)
if previousfailed is not None:
pytest.xfail("previous test failed (%s)" %previousfailed.name)
def pytest_runtest_makereport(item, call):
if "incrementalparam" in item.keywords:
if call.excinfo is not None:
previousfailed_attr = item._genid
setattr(item.parent,previousfailed_attr, item)
if "incremental" in item.keywords:
if call.excinfo is not None:
parent = item.parent
parent._previousfailed = item
有趣的是,它不能在没有参数化的情况下使用,因为参数化注释会自动创建 _genid 变量。
希望这对我以外的人有帮助。