Jenkins执行shell标记构建失败无报错,如何排查Selenium测试构建故障?
如何获取构建步骤失败的详细信息
- 开启Shell执行调试:将构建步骤的脚本首行从
#!/bin/bash修改为#!/bin/bash -ex,-x参数会打印每一行命令的执行过程和变量值,-e参数会在命令返回非0时立即终止脚本,避免错误被掩盖。 - 调整pytest输出参数:移除原pytest命令中的
--show-capture=no参数,将--tb=short改为--tb=long,完整输出测试过程的标准输出、错误输出和异常堆栈;同时在pytest命令后新增echo "Pytest exit code: $?"打印pytest的退出码,确认是否是测试用例执行导致的非0退出。 - 持久化测试日志:给pytest命令新增参数
--log-file=pytest_runtime.log --log-file-level=DEBUG,将测试运行时的所有日志写入本地文件,配置Jenkins的「归档成品」功能,无论构建成功失败都留存该日志文件。 - 调整超时配置:先将Jenkins任务的超时时间拉长到3小时以上,或者临时关闭超时限制,排除超时主动终止进程的干扰。
- 排查节点系统日志:登录运行任务的Jenkins Agent节点,查看
dmesg、/var/log/syslog等系统日志,确认是否存在OOM Killer主动终止Python、ChromeDriver等进程的记录。
可能的故障诱因
- 构建超时被Jenkins主动终止:从日志可以看到第一个测试用例单次执行就耗时1小时10分钟,远超过常规UI测试的单用例时长,触发了Jenkins任务的默认超时规则,主构建进程被强制杀死后,后续后置脚本也会收到SIGTERM信号(信号15)被中断,和日志中
xargs: aws: 被信号15终止的报错完全匹配。 - Selenium测试进程hang住:最后一条测试日志停留在「网格表格数据读取中」,大概率是测试逻辑卡在该步骤未抛出异常:可能是页面元素加载超时未设置合理的隐式/显示等待、表格数据量过大导致解析逻辑死循环、ChromeDriver与浏览器版本不兼容导致进程无响应。
- EC2实例资源不足:你启动的Selenium节点是t3.micro规格,仅1核1G内存,运行Chrome浏览器+Selenium Driver+测试代码很容易出现内存不足,系统OOM Killer直接杀掉测试进程,导致pytest异常退出无错误输出。
- 后置脚本执行失败是主构建终止的连锁反应:主构建步骤被强制终止后,Jenkins会向该次构建启动的所有子进程发送终止信号,后置脚本的aws命令还未执行完成就被信号打断,因此抛出
InterruptedException异常。
内容的提问来源于stack exchange,提问作者Imran
相关产品推荐
相关产品推荐

