Shell脚本中基于Nightwatch命令输出修正退出码的技术需求
解决Nightwatch脚本退出码异常问题
我懂你的困扰——不管测试用例成功还是失败,Nightwatch都固定返回退出码1,导致脚本没法正确反馈执行结果,而且你还得保证测试输出能在控制台正常显示。下面给你一个精准解决问题的方案:
改进后的Shell脚本
#!/usr/bin/env sh # 执行Nightwatch命令,同时将所有输出(包括错误信息)打印到控制台并捕获到变量中 nightwatch_output=$(./node_modules/.bin/nightwatch --env chrome --tag=enabled 2>&1 | tee /dev/tty) # 检查捕获的输出中是否包含"failed"关键字 if echo "$nightwatch_output" | grep -q "failed"; then # 如果存在失败标记,脚本返回退出码1 exit 1 else # 如果没有失败标记,脚本返回退出码0 exit 0 fi
关键细节说明
2>&1:把Nightwatch的标准错误输出(stderr)重定向到标准输出(stdout),确保错误信息也能被捕获和打印,不会漏掉任何测试过程中的关键内容。tee /dev/tty:这个命令会把输出内容同时发送到两个地方——一个是管道(供变量捕获),另一个是当前终端(/dev/tty),完美满足你"输出可见"的核心要求。grep -q "failed":静默检查输出中是否包含"failed"字符串,-q参数让grep只返回判断结果不打印额外内容,避免干扰控制台的测试日志展示。
这样修改后,脚本会根据Nightwatch的实际测试输出判断是否存在失败场景,返回对应的正确退出码,同时所有测试日志都会正常显示在控制台里。
内容的提问来源于stack exchange,提问作者GRme
相关产品推荐
相关产品推荐

