如果特定的测试失败,则使其余pytest测试也失败

9
我有一个文件夹,里面存放了许多用Python编写的测试,并且具有适当的语法来确保它们按顺序运行。如果有一个测试失败,会调用 pytest.exit('Exit Message')。但是这样做的问题在于,XML生成的测试输出仅记录其前面的测试。我希望整个测试集都能运行,但如果上述测试失败,则将其报告为失败。
我想到的解决方法是在失败时设置一个环境变量,然后在随后的测试中检查该环境变量。但是,在Jenkins中运行时,设置的环境变量未被检测到,因此如果有本地解决方案则更好。我的代码如下:
def test_check_connection(self):
    ...
    if Failed:
        pytest.exit('No connectivity')

你解决了这个问题吗? - Mostafa Hussein
2个回答

3

我不确定我是否正确理解了你的问题。如果你希望pytest在第一个测试用例失败后停止运行,请使用-x选项。

pytest -x ...

如果您想运行所有测试并想要知道jenkins是否有任何失败,请检查pytest应用程序的退出代码:
运行pytest可能会导致六个不同的退出代码: 退出代码0:收集并成功通过了所有测试 退出代码1:已收集并运行测试,但某些测试失败 退出代码2:用户中断了测试执行 退出代码3:执行测试时发生内部错误 退出代码4:pytest命令行使用错误 退出代码5:未收集到任何测试

当我使用pytest的-x选项时,pytest会在第一次测试失败的地方停止运行。例如:我有很多"pytest.fail",但是我希望无论失败与否都能继续运行测试。但是当我在登录应用程序时遇到问题时,我希望退出并不再运行剩余的测试。我可以使用pytest的-x选项来实现这个吗?谢谢。 - undefined

0
您可以尝试在一个测试中设置一个全局变量,并在以后的测试中像这样引用它:
def test_check_connection(self):
    ...
    if Failed:
        global failed_conn_check = True
    else:
        global failed_conn_check = False

然后在测试结束时:

    ...
    if failed_conn_check:
        raise SomeException
    ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接