- 更新发布版本从 0.1.0-SNAPSHOT 到 0.4.0 - 更新 README.md 中的依赖版本引用 - 完善 TEST_REPORT.md 包括最新测试结果和新增测试用例 - 添加详细的 TEST_PLAN.md 文档 - 更新 sample-app 的测试配置和依赖 - 为各个 SDK 模块添加 ProGuard 规则文件 - 修复 ApiClient 中的 Gson 类型适配器问题 - 改进测试架构,解决会话删除和跨设备测试问题
117 行
5.9 KiB
Bash
可执行文件
117 行
5.9 KiB
Bash
可执行文件
#!/usr/bin/env bash
|
||
# =============================================================================
|
||
# TC-10: Android SDK 网络断开 / 重连压测脚本
|
||
# =============================================================================
|
||
# 测试目的: 验证 SDK 在网络中断后能自动重连,WebSocket 恢复 STOMP CONNECTED
|
||
# 运行方式: bash scripts/tc10_network_resilience.sh [emulator-5554]
|
||
#
|
||
# 依赖:
|
||
# - adb 已在 PATH 或 ANDROID_HOME 已设置
|
||
# - 目标模拟器已安装 sample-app-debug.apk + sample-app-debug-androidTest.apk
|
||
# - 目标模拟器已开机且 shell 可用
|
||
# =============================================================================
|
||
|
||
set -euo pipefail
|
||
|
||
ANDROID_HOME="${ANDROID_HOME:-$HOME/Library/Android/sdk}"
|
||
ADB="${ANDROID_HOME}/platform-tools/adb"
|
||
DEVICE="${1:-emulator-5554}"
|
||
PKG="com.xuqm.demo"
|
||
RUNNER="androidx.test.runner.AndroidJUnitRunner"
|
||
|
||
echo_step() { echo -e "\n\033[1;34m[TC-10] $*\033[0m"; }
|
||
echo_ok() { echo -e "\033[0;32m ✓ $*\033[0m"; }
|
||
echo_fail() { echo -e "\033[0;31m ✗ $*\033[0m"; exit 1; }
|
||
|
||
# ─────────────────────────────────────────
|
||
# 前置检查
|
||
# ─────────────────────────────────────────
|
||
echo_step "前置检查"
|
||
if ! "$ADB" -s "$DEVICE" get-state &>/dev/null; then
|
||
echo_fail "设备 $DEVICE 不可用,请先启动模拟器"
|
||
fi
|
||
echo_ok "设备 $DEVICE 已连接"
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 1: 启动 Sample App 并等待 3s 稳定
|
||
# ─────────────────────────────────────────
|
||
echo_step "步骤 1: 启动 Sample App"
|
||
"$ADB" -s "$DEVICE" shell am start -n "${PKG}/com.xuqm.sdk.sample.MainActivity" > /dev/null
|
||
sleep 3
|
||
echo_ok "App 已启动"
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 2: 采集 WebSocket 连接日志基线
|
||
# ─────────────────────────────────────────
|
||
echo_step "步骤 2: 清除旧日志,等待 WebSocket 连接基线"
|
||
"$ADB" -s "$DEVICE" logcat -c
|
||
sleep 5
|
||
|
||
CONNECTED_BEFORE=$("$ADB" -s "$DEVICE" logcat -d -s "XuqmImSDK:D" 2>/dev/null | grep -c "onConnected" || true)
|
||
echo_ok "连接前 onConnected 事件数: $CONNECTED_BEFORE"
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 3: 关闭 WiFi(模拟网络断开)
|
||
# ─────────────────────────────────────────
|
||
echo_step "步骤 3: 关闭 WiFi(模拟网络断开)"
|
||
"$ADB" -s "$DEVICE" shell svc wifi disable
|
||
echo_ok "WiFi 已关闭"
|
||
echo " 等待 5s,观察 SDK 检测到断开..."
|
||
sleep 5
|
||
|
||
# 验证 Disconnected 事件
|
||
DISCONNECTED=$("$ADB" -s "$DEVICE" logcat -d -s "XuqmImSDK:D" 2>/dev/null | grep -c "onDisconnected" || true)
|
||
echo " onDisconnected 事件数: $DISCONNECTED"
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 4: 恢复 WiFi(模拟网络恢复)
|
||
# ─────────────────────────────────────────
|
||
echo_step "步骤 4: 恢复 WiFi(模拟网络恢复)"
|
||
"$ADB" -s "$DEVICE" shell svc wifi enable
|
||
echo_ok "WiFi 已恢复"
|
||
echo " 等待 35s,SDK 应自动重连(最大退避 30s)..."
|
||
sleep 35
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 5: 验证重连
|
||
# ─────────────────────────────────────────
|
||
echo_step "步骤 5: 验证自动重连"
|
||
CONNECTED_AFTER=$("$ADB" -s "$DEVICE" logcat -d -s "XuqmImSDK:D" 2>/dev/null | grep -c "onConnected" || true)
|
||
echo " 重连后 onConnected 事件总数: $CONNECTED_AFTER"
|
||
|
||
if [ "$CONNECTED_AFTER" -gt "$CONNECTED_BEFORE" ]; then
|
||
echo_ok "SDK 成功自动重连 (onConnected 事件 +$((CONNECTED_AFTER - CONNECTED_BEFORE)))"
|
||
TC10_STATUS="通过"
|
||
else
|
||
echo -e "\033[0;33m ⚠ 未检测到新的 onConnected 事件(可能需要更长等待时间或 App 尚未登录)\033[0m"
|
||
TC10_STATUS="待确认"
|
||
fi
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 6: 采集关键日志片段
|
||
# ─────────────────────────────────────────
|
||
echo_step "步骤 6: 关键日志片段"
|
||
"$ADB" -s "$DEVICE" logcat -d -s "XuqmImSDK:D" 2>/dev/null \
|
||
| grep -E "onConnected|onDisconnected|scheduleReconnect|connectWithToken" \
|
||
| tail -20 \
|
||
| sed 's/^/ /'
|
||
|
||
# ─────────────────────────────────────────
|
||
# 步骤 7: 输出结论
|
||
# ─────────────────────────────────────────
|
||
echo ""
|
||
echo "═══════════════════════════════════════"
|
||
echo " TC-10 网络断开/重连压测结果"
|
||
echo "═══════════════════════════════════════"
|
||
echo " 设备 : $DEVICE"
|
||
echo " 断开时长 : 5s"
|
||
echo " 等待重连 : 35s"
|
||
echo " 测试结论 : $TC10_STATUS"
|
||
echo "═══════════════════════════════════════"
|
||
|
||
if [ "$TC10_STATUS" = "通过" ]; then
|
||
exit 0
|
||
else
|
||
exit 1
|
||
fi
|