bash脚本运行子目录Robot Framework测试时后续命令不执行
问题原因分析
- 最常见的诱因是你的bash脚本开启了
set -e(errexit)模式:该模式下只要任意执行的命令返回非零退出码,脚本会直接终止运行。 - Robot Framework的退出码规则如下:
- 0:所有测试用例全部执行通过
- 1:测试正常执行但存在失败的用例
- 2:执行流程出错(比如找不到测试文件、参数配置错误等)
- 你描述的fe测试执行正常无报错,大概率是存在部分用例未通过,返回了非零的退出码1,触发了
set -e规则导致脚本直接终止,后续的echo等语句就没有执行机会。be测试全部通过返回退出码0,所以可以正常往下执行。
解决方案
方案1:临时关闭errexit模式执行FE测试
如果你的脚本需要全局保留set -e配置来做异常检查,可以在执行FE的robot命令前后临时开关该配置,还可以保存robot的退出码供后续逻辑判断使用:
#!/bin/bash # 假设你脚本开头有通用的严格模式配置 set -euo pipefail robot -d be/output be/be_tests # 临时关闭errexit执行FE测试 set +e robot -d fe/output fe/fe_tests # 保存robot命令的退出码,后续可根据该值判断测试结果 fe_robot_exit_code=$? # 恢复全局严格模式 set -e # 后续的自定义操作都可以正常执行 echo Done Running All Tests # 如果你需要最终脚本的退出码和FE测试结果对齐,可以最后加上 # exit $fe_robot_exit_code
方案2:移除全局set -e配置
如果你不需要脚本的严格异常检查,可以直接把开头的set -e或者set -euo pipefail配置删掉,脚本就会忽略命令的非零退出码,按顺序执行所有语句。
排查验证方法
如果按照上述方案操作后问题仍存在,可以在脚本中添加退出码打印逻辑,定位具体的退出原因:
#!/bin/bash robot -d be/output be/be_tests echo "BE测试执行完成,退出码:$?" echo "开始执行FE测试" robot -d fe/output fe/fe_tests echo "FE测试执行完成,退出码:$?" echo Done Running All Tests
执行上述脚本后就能看到FE测试的实际退出码,若确认退出码为0但脚本仍提前终止,可以检查FE测试用例中是否有直接调用操作系统exit命令、终止父进程的操作。
内容的提问来源于stack exchange,提问作者Shiv Deshmukh
相关产品推荐
相关产品推荐

