如何在run_test.py中捕获单元测试错误,使CI流水线失败?
解决CI中单元测试失败不终止流水线的问题
原脚本的问题在于os.system执行命令失败后不会中断脚本运行,最终run_test.py会以最后一条命令的退出码结束,导致CI误判为成功。只要捕获每个测试脚本的退出码,在失败时立即终止run_test.py即可让CI流水线识别失败。
方法1:基于os.system和sys.exit修改
直接检查os.system的返回值,一旦测试脚本返回非0退出码,就终止当前脚本:
import os import sys # 执行test1并检查结果 test1_exit = os.system("python test1.py") if test1_exit != 0: sys.exit(test1_exit) # 传递test1的错误码,让CI捕获 # 仅test1成功时才执行test2 test2_exit = os.system("python test2.py") sys.exit(test2_exit)
方法2:使用更推荐的subprocess模块
subprocess比os.system更灵活,且原生支持命令失败时抛出异常:
import subprocess import sys # 执行test1,失败则抛出异常并退出 try: subprocess.run(["python", "test1.py"], check=True) except subprocess.CalledProcessError as e: sys.exit(e.returncode) # test1成功后执行test2,失败同样终止 subprocess.run(["python", "test2.py"], check=True)
关键说明
- 单元测试脚本(test1.py、test2.py)在失败时会返回非0退出码,这是CI判断任务成功/失败的核心依据
- 修改后的
run_test.py会在任意测试失败时立即终止,并传递对应的错误码,CI流水线会因此标记为失败
内容的提问来源于stack exchange,提问作者Ksenia Belozerova
相关产品推荐
相关产品推荐

