* 让 CI 真正跑起三类测试并修掉挡路的测试缺陷 之前 CI 只跑了一小部分,Java 那边的测试被 pom 里的开关整个跳过了。 这条把它打开,并补上 MySQL、Redis 两个容器,Java、契约、Python 三类 测试都在 CI 里真跑起来。 另外修了两个挡路的地方:一条 Java 用例单跑会因为实体信息没注册而报错, 现在自己注册;Python 的假网络层把整个 httpx 类换掉了,第三方库拼请求 时报错,改成只换发请求那一步。 * 给 runner 补上 libopus,修掉音频用例报错 opuslib_next 是 ctypes 绑定,真正编解码靠系统里的 libopus。runner 上默认 没有,import 失败后测试里换上的是自己写的桩,桩里的编码器只有构造方法, 一调就报错。正式镜像里是装了这个库的,CI 少了这一步。 顺手把桩的报错改成一句人话,别再让人对着缺方法的报错猜根因。 * 本地没起库也能构建,CI 里集成测试不许跳过 三个要连 MySQL 和 Redis 的集成测试加了守卫:依赖连不上就整类跳过,日志写明缺什么,构建照样是绿的;CI 上依赖不通就直接失败。另外加了一个门禁检查脚本和 CI 步骤,盯住这三个类有没有真跑,守卫哪天手滑把它们全跳过了,CI 必须变红。README 里补了本地怎么起依赖、怎么只编译不跑测试。
45 lines
1.2 KiB
Bash
Executable File
45 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 检查那几个要连 MySQL 和 Redis 的集成测试是不是真的跑了。
|
|
# 守卫要是哪天手滑把它们全跳过了,CI 必须红,不能安安静静少跑一半门禁。
|
|
set -uo pipefail
|
|
|
|
REPORT_DIR="${1:-target/surefire-reports}"
|
|
|
|
WATCHED=(
|
|
"xiaozhi.modules.device.DeviceTest"
|
|
"xiaozhi.modules.model.service.impl.ModelConfigPersistenceTest"
|
|
"xiaozhi.modules.sys.loginControllerTest"
|
|
)
|
|
|
|
if [ ! -d "$REPORT_DIR" ]; then
|
|
echo "找不到测试报告目录:$REPORT_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
missing=()
|
|
for class in "${WATCHED[@]}"; do
|
|
count=0
|
|
for report in "$REPORT_DIR"/TEST-*.xml; do
|
|
[ -e "$report" ] || continue
|
|
name=$(sed -n 's/.*<testsuite[^>]*name="\([^"]*\)".*/\1/p' "$report" | head -1)
|
|
if [ "$name" = "$class" ]; then
|
|
count=$(sed -n 's/.*<testsuite[^>]*tests="\([0-9]*\)".*/\1/p' "$report" | head -1)
|
|
count=${count:-0}
|
|
break
|
|
fi
|
|
done
|
|
if [ "$count" -eq 0 ]; then
|
|
missing+=("$class")
|
|
else
|
|
echo "OK $class 跑了 $count 条"
|
|
fi
|
|
done
|
|
|
|
if [ ${#missing[@]} -ne 0 ]; then
|
|
echo "这几个集成测试一条都没跑:${missing[*]}"
|
|
echo "守卫把门禁掏空了,构建必须失败"
|
|
exit 1
|
|
fi
|
|
|
|
echo "集成测试都跑过了"
|