You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过bash脚本运行pytest时如何让GitHub Action按退出码判定失败

解决方案

核心原因

当前bash脚本的默认执行逻辑中,coverage run -m pytest "$@"运行结束后,无论pytest是否测试失败,都会继续执行coverage xml -i命令,而脚本最终的默认退出码是最后一条命令的退出码,因此pytest失败的状态会被后续覆盖率命令的执行结果覆盖,GitHub Action无法感知到测试失败。

最优修改方案(保留覆盖率报告生成能力)

把pytest运行后的退出码提前存储下来,等覆盖率报告生成完成后,再用这个退出码作为整个脚本的最终返回值即可,修改后的脚本内容如下:

#!/usr/bin/env bash

coverage run -m pytest "$@"
# 存储pytest命令的退出码
PYTEST_EXIT_CODE=$?

coverage xml -i

# 以pytest的退出码作为脚本最终返回值,非零值会直接触发GitHub Action任务失败
exit $PYTEST_EXIT_CODE

补充说明

  • 现有GitHub Action配置不需要做任何修改,GitHub Action的run步骤会自动检测执行脚本的退出码,只要返回非零值就会标记该步骤失败,对应任务也会同步标记为失败。
  • 如果你不需要在pytest测试失败后生成覆盖率报告,也可以选择在脚本开头添加set -e配置,只要任意命令返回非零退出码,脚本就会立即终止并返回对应退出码,不过该方案会导致测试失败时不会生成coverage.xml文件,请根据自身需求选择:
#!/usr/bin/env bash
set -e
coverage run -m pytest "$@"
coverage xml -i

内容的提问来源于stack exchange,提问作者Shashika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:45:10