OnecardDemo 服务器一键稳定性测试设计
日期:2026-08-24
状态:已实现,现场三轮共 300 次复测通过
1. 目标
在“服务器单点功能”页面增加“一键服务器稳定性测试”,由现场人员一次点击自动完成 100 轮服务器连接验证,实时显示进度,并生成包含成功率、耗时和错误明细的本地测试报告。
本功能测试的是 WebService 请求稳定性。当前“连接服务器”的实际含义是调用一次 GetCustomerCount(appId) 并校验 SOAP 返回值,不是建立长期保持的网络连接。
2. 固定测试参数
- 总轮数:100 轮。
- 轮次间隔:上一轮完成后等待 1000 毫秒,再开始下一轮;最后一轮结束后不再等待。
- 服务地址:使用页面当前填写的 WebService 地址。
- 应用 ID:使用页面当前填写的 AppID。
- 单轮成功标准:HTTP 请求完成、SOAP 不含 Fault,并且
GetCustomerCount返回非负整数。 - 单轮失败处理:记录错误并继续后续轮次,不提前停止整个测试。
固定参数不开放页面修改,避免现场误把间隔设置得过短而对服务器造成额外压力。
3. 页面交互
在现有服务器连接状态下方增加“服务器稳定性测试”区域,包含:
- 固定参数说明:
100 轮,每轮完成后间隔 1 秒。 - “开始稳定性测试”按钮。
- 测试进度文本。
- 稳定性测试结果文本。
状态规则:
- 未测试时,按钮显示“开始稳定性测试”。
- 测试运行时,按钮显示“停止稳定性测试”,服务器地址、AppID 和其他服务器操作均不可用。
- 每轮结束后更新当前轮次、成功数、失败数和本轮耗时。
- 用户点击停止时,不强行中断正在执行的 HTTP 请求;等待当前请求返回或超时后停止,并按已完成轮次生成部分报告。
- Activity 销毁时请求停止测试,禁止继续更新已销毁页面。
- 测试完成或停止后恢复其他控件,不保留服务器连接状态。
如果启动测试前页面处于普通“已连接”状态,启动测试时先清除该本地连接状态,再按页面中的地址和 AppID 快照执行独立的 100 轮测试;测试按钮在普通连接和未连接状态下均可启动。
4. 执行流程
每一轮都使用独立的 OnecardWebServiceClient:
- 记录本轮开始的毫秒时间。
- 使用页面快照中的服务器地址和 AppID 调用
connect()。 connect()内部调用GetCustomerCount(appId)。- 成功时记录用户总数和耗时。
- 失败时记录异常类型、错误消息和耗时。
- 在
finally中清除本轮客户端的内存连接状态。 - 非最后一轮时等待 1000 毫秒,再执行下一轮。
独立客户端可避免上一轮的内存连接状态影响下一轮,保证每一轮都是完整、相互隔离的连接验证。
5. 统计口径
最终摘要包含:
- 计划轮数和实际完成轮数。
- 成功次数和失败次数。
- 成功率:
成功次数 / 实际完成轮数 × 100%。 - 成功请求的最短、最长、平均耗时。
- 成功请求的 P95 耗时,采用 nearest-rank 计算方式。
- 测试开始时间、结束时间和总耗时。
- 是否由用户主动停止。
- 按错误类型和错误消息汇总的失败次数。
如果没有成功请求,耗时统计显示“无成功样本”;如果尚未完成任何轮次就停止,成功率显示为 0.00%。
6. 报告内容与存储
报告文件名:
server-stability-yyyy-MM-dd-HH-mm-ss-SSS.log
报告保存在应用专属外部文件目录的 server_stability 子目录中,不要求额外存储权限。报告使用 UTF-8 编码,包含:
- 服务地址和 AppID。
- 固定测试参数。
- 每轮的开始时间、结果、耗时、用户总数或错误信息。
- 最终统计摘要。
- 报告文件绝对路径。
页面最终结果展示摘要、错误汇总和报告路径;完整逐轮记录保存在报告文件中,避免结果控件承载过多文本。
7. 代码边界
ServerStabilityResult:保存单轮结果和测试汇总数据,负责稳定的统计口径。ServerStabilityRunner:执行轮次、失败继续、轮间等待、停止检查和进度回调。ServerStabilityReportFormatter:生成页面摘要和完整文本报告。ServerStabilityReportStore:负责本地文件命名与写入。ServerOperationsActivity:读取输入、控制执行线程、更新页面和处理停止操作。OnecardWebServiceClient:继续作为单轮真实 WebService 探测实现,不修改现有查询协议。
统计、格式化和存储与 Activity 分离,便于通过 JVM 单元测试验证,不依赖真机或真实服务器。
8. 错误处理
- 输入为空或 AppID 不是合法整数:测试不启动,沿用现有输入错误提示。
- 单轮 HTTP、超时、XML 或 SOAP Fault:作为该轮失败记录,继续下一轮。
- 报告写入失败:页面仍显示测试统计,同时明确提示报告保存失败及原因。
- 页面退出或手动停止:完成当前轮后结束,生成部分报告。
- 不在日志中记录注册码、密码摘要、用户证件号或卡片敏感信息。
9. 验证与验收
自动验证:
- 统计单元测试覆盖全成功、部分失败、全部失败、零完成轮次和 P95。
- 报告格式单元测试覆盖逐轮记录、错误汇总和停止标记。
- 文件存储测试覆盖文件名、UTF-8 内容和目录创建。
- UI 测试确认稳定性测试区域、按钮、进度和结果控件存在。
- 执行完整
testDebugUnitTest、assembleDebug、assembleDebugAndroidTest和lintDebug。
真机验收:
- 安装修复版 APK,进入“服务器单点功能”。
- 使用现场 WebService 地址和 Windows 注册后取得的 AppID。
- 点击“一键服务器稳定性测试”。
- 确认进度从 1/100 更新至 100/100,单轮失败时测试继续。
- 确认最终摘要、成功率、耗时指标、错误汇总和报告路径完整显示。
- 通过 ADB 从页面显示的报告路径读取报告,确认 100 条逐轮记录和页面摘要一致。
10. 非目标
- 不提供轮数和间隔的自定义输入。
- 不做长期后台守护或定时任务。
- 不把该功能用作生产环境每秒重连机制。
- 不修改服务端配置、Windows 注册流程或 AppID 获取方式。
- 不自动上传测试报告。