接口自动化执行过程示意图
写前说明
版本说明
截图均来自 v1.19 版本
日志位置
本地执行日志:/opt/metersphere/log/metersphere/ms-jmeter-run-log;
资源池执行日志:/opt/metersphere/log/node-controller/ms-jmeter-run-log
日志关键子说明
资源ID: 用例 / 场景 / 测试计划用例/测试计划场景 对应的ID
报告ID:用例报告ID / 场景报告ID
一)调试一直转圈无结果返回
常见浏览器NetWork中会报错:Error during WebSocket handshake: Unexpected response code : 404
如果配置了nginx,请检查nginx是否配置了支持websocket 具体如图:
二)本地执行问题及排查思路
-
本地执行慢该怎么排查
1.1 修改 “系统设置-系统参数设置-并发数” 改成系统能并发的最佳数量(并发数对应= 场景/用例 执行数量;所以场景多的 并发数设置小一些,用例执行多的 并发数可相对设置大一些);此功能对应示意图中 的 Q.L 部分。
1.2 检查主服务(ms-server)所部署服务器资源占用情况;是否资源充足。
1.3 从自身请求步骤检查 看看 “前置操作” 中是否有 “等待时间 ” 步骤 ;检查是否有查询结果过大的步骤。
1.4 检查运行环境是否准确
1.5 从执行日志开始排查
下图(1)是一个API 测试的过程日志,可以结合 “执行过程示意图” 来分析
下图(2)是一个场景执行过程日志
从图1 图2 对比可以看出 场景的执行过程只是请求数量的一个增量;处理过程基本一致。 -
场景批量执行报告显示为空
2.1 检查场景环境是否选择;并检查环境是否配置准确
2.2 打开场景逐步调试看看是否某个请求有异常步骤导致jmeter 执行失败;常见Xpath提取表达式写错 如下图
2.3 检查场景步骤中是否有 SQL前后置 步骤,并每个步骤是否选择数据源
2.4 从日志中排查;通过浏览器F12 打开调试 复制报告Id
日志中检索 cat /opt/metersphere/log/metersphere/ms-jmeter-run-log.log | grep 报告id 看看整体执行过程 从 setupTest- testEnded 是否完整
2.5 执行策略选择时勾选了 “失败停止” 选项
-
场景报告中有大量 “未执行” 状态的步骤
3.1 检查场景中 是否没有勾选 “失败继续” 选项
3.2 检查是否包含 2.2 和 2.3 中 提到的问题 -
场景报告中一直是running状态
4.1 是否在执行过程中有重启服务的情况 ;根据 “2.4” 步骤取出 报告Id 到队列表中查询队列是否还在 (SELECT * from api_execution_queue_detail where report_id = ‘报告ID’;)如果为空表示发生过不可控制情况;不为空表示还在执行中。
4.2 和 2.4 步骤一样到日志中排查,正常一个执行过程 包含 setupTest- testEnded 整个过程;如果只有开始未看到结束 应该还在执行中 或 服务已经 挂了。 -
场景报告出现大量Timeout 状态
5.1 检查执行队列是否有排队情况;如果有可以参照 1.1 配置
-
测试计划执行-测试计划报告一直是running状态
6.1 打开测试计划报告 查看 关联的场景/用例/性能用例 是否有在执行中的 报告;可以选择某条报告Id 参照 2.4的步骤到执行日志中排查
6.2 可以选择测试计划中某个执行慢的 场景/用例/性能用例 单个执行 看看是否正常 -
测试计划执行完成后测试计划报告中出现大量 timeout/未执行 状态
7.1 通常遇到这种情况 可以考虑看看是否资源充足了;是否能承受大量执行基本要求。
7.2 参照 2.4 步骤从日志中排查
三)选择资源池执行排查思路
-
选择资源池执行出现 报告为空/未执行/timeout 等问题
1.1 检查node-controller服务是否正常启动。
1.2 检查“系统设置-系统参数设置-当前站点 url”配置是否准确
1.3 检查KAFKA配置是否能通;环境位置 cat /opt/metersphere/.env
1.4 检查node运行内存是否充足;可根据实际服务器情况增减 cat /opt/metersphere/docker-compose-node-controller.yml
1.5 检查kafka是否有消息堆积情况;进入kafka (docker exec -it kafka sh ;cd /opt/bitnami/kafka ; bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group metersphere_group_id --describe)
1.6 选择资源池执行日志排查过程;这里主要选择 tail -f /opt/metersphere/log/metersphere/ms-jmeter-run-log.log 和 tail -f /opt/metersphere/log/node-controller/ms-jmeter-run-log.log
这里测试计划 报告ID会贯穿 整个执行过程;所以可以通过这个id到日志中查看 (可以参照 1.2.4步骤获取ID;这里的计划报告id是:1b2b4c35-401d-4ccd-a9f7-f4be7e1ce546 )
图1 从主服务(ms-server)发起执行这里选择测试计划执行实例日志来源 tail -f ms-jmeter-run-log.log;重点可以看到我的测试计划中关联的两个场景已经成功发送到node资源池执行了。
图2 获取的是node资源池接收到执行请求的日志处理;通过这个图可以看到我的执行任务已经下载成功。
图3 也是node的执行日志可以看到已经执行完成并且把执行结果发送到kafka中
图4 是主服务(ms-server)的日志;从这个日志就可以看到整个测试计划已经执行完成