bash脚本set -e场景下,测试失败后如何运行后置脚本并返回错误状态?
解决方法
核心思路是先捕获pytest的退出码,避免set -e触发脚本提前退出,执行完后置脚本后再返回原测试的退出码。修改后的脚本如下:
set -e # 初始化测试退出码为0(默认成功状态) TEST_EXIT_CODE=0 # 执行pytest,失败时捕获其退出码,避免set -e直接终止脚本 python -m pytest || TEST_EXIT_CODE=$? # 无论测试结果如何,执行后置脚本 python ./afterscript.py # 最后返回测试的原始退出码,满足失败时非零退出的要求 exit $TEST_EXIT_CODE
关键逻辑说明
set -e的规则是:当单个命令返回非零且不在条件判断(if/||/&&等)结构中时,才会直接终止脚本。这里用||将pytest和赋值命令绑定成一个整体命令,即使pytest失败,整个命令的返回码是赋值操作的0(因为赋值总是成功),所以set -e不会触发退出。- 提前初始化
TEST_EXIT_CODE=0,确保pytest成功时(||后的代码不执行),变量仍为正确的成功状态码。 - 执行完后置脚本后,通过
exit $TEST_EXIT_CODE让脚本最终返回pytest的原始状态,满足“测试失败时脚本非零退出”的要求。
内容的提问来源于stack exchange,提问作者user11419808
相关产品推荐
相关产品推荐

