Pytest中setup_class满足条件时如何返回退出码5(无测试收集)
实现方法
首先先修正原代码的两个基础语法问题:
setup_class属于类级前置方法,必须添加@classmethod装饰器才能正常生效- 条件判断关键字
if首字母需要小写,大写If会直接触发语法错误
你要的条件满足时返回退出码5、终止测试类执行的需求,有两种可落地的实现方式,根据你的场景选就行:
方案1:条件触发时直接终止全量测试,固定返回退出码5
在条件分支内调用pytest.exit()方法,直接终止整个pytest测试会话,手动指定返回码为5即可,这个方案不受其他测试用例影响,只要走到分支就一定会返回5:
import pytest class Test_Exit_Code(object): @classmethod def setup_class(cls): if 2 == 2: # 条件满足,终止测试返回退出码5 pytest.exit("前置校验不通过,终止测试执行", returncode=5) def test_a(self): assert True == True
小提示:追求代码可读性的话,可以把returncode=5替换为returncode=pytest.ExitCode.NO_TESTS_COLLECTED,这是pytest内置的枚举值,和直接写数字5效果完全一致,后续看代码能直接对应到「无测试被收集」的状态含义。
方案2:仅跳过当前测试类,全量用例都跳过时自动返回退出码5
如果你不想直接终止整个测试流程,只是不想执行当前类下的用例,可以在条件分支调用pytest.skip()跳过当前类所有用例。当整个测试会话里没有任何实际执行的用例时,pytest会自动返回退出码5:
import pytest class Test_Exit_Code(object): @classmethod def setup_class(cls): if 2 == 2: # 跳过当前测试类下所有用例 pytest.skip("前置校验不通过,跳过当前测试类", allow_module_level=True) def test_a(self): assert True == True
注意:如果测试会话中存在其他正常执行、未被跳过的测试用例,这个方案最终返回的退出码为0(测试执行通过),不会返回5,需要固定返回5的场景请使用方案1。
内容的提问来源于stack exchange,提问作者Bored002
相关产品推荐
相关产品推荐

