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
|