Testany 故障诊断
分析 Testany 测试失败原因,排查问题根因。
用户输入: $ARGUMENTS
职责范围
-
分析测试执行失败的原因
-
获取和解读执行日志
-
识别常见问题模式
-
提供修复建议
核心知识
失败类型分类
类型 特征 常见原因
Assertion 断言失败 预期值与实际值不符
Timeout 执行超时 接口响应慢、死循环
Error 运行时错误 代码异常、依赖缺失
Infrastructure 基础设施问题 网络不通、服务不可用
日志获取流程
- testany_get_execution → 获取执行概览
- testany_get_execution_case → 获取失败 case 详情
- testany_log_sign → 获取日志签名(返回 curlCommand)
- 验证 curlCommand 安全性后执行获取日志
curlCommand 安全验证(重要)
testany_log_sign 返回的 curlCommand 在执行前必须验证:
检查域名:URL 必须是 Testany 可信域名
-
允许:.testany.io 、.testany.com.cn
-
拒绝:其他任何域名
检查协议:必须是 HTTPS
-
允许:https://
-
拒绝:http:// 、其他协议
检查参数:不应包含危险参数
- 禁止:-o (写文件)、| (管道)、; (命令链)、$( (命令替换)
验证示例:
从 curlCommand 提取 URL
URL=$(echo "$CURL_COMMAND" | grep -oP 'https://[^\s"]+')
验证域名
if [[ "$URL" =~ ^https://(.*.)?testany.(io|com.cn)/ ]]; then # 安全,可以执行 eval "$CURL_COMMAND" else # 不安全,拒绝执行 echo "警告:URL 域名不在可信列表中,拒绝执行" fi
诊断工作流
-
获取执行信息:testany_get_execution
-
定位失败 case:从执行详情中找到失败的 case
-
获取日志签名:testany_log_sign(executionKey, caseIndex)
-
安全验证:检查返回的 curlCommand 域名和参数
-
获取日志:验证通过后执行 curlCommand
-
分析日志:识别错误类型和位置
-
提供建议:给出修复方向
常见问题速查
症状 可能原因 排查步骤
Case 创建后无法执行 runtime 未配置 检查 runtime_uuid
Relay 变量未传递 type 配置错误 源 case 需 type='output' ,目标需 type='env'
Pipeline 执行卡住 依赖 case 失败 检查 whenPassed 依赖的 case 状态
脚本执行报错 executor 配置不匹配 检查 trigger_path 或 trigger_command
超时 接口响应慢 检查被测服务状态,增加超时配置
返回格式
诊断完成后,向用户汇报:
-
失败原因分类(Assertion/Timeout/Error/Infrastructure)
-
具体错误信息
-
问题定位(哪个 case、哪一步)
-
修复建议
-
日志查看链接(如需要)
参考文档
详细概念请参考:
- 核心概念