4. 用户模型设计:并发用户数估算、思考时间设置、用户行为比例分配、用户分布模型

用户模型是压力测试的“虚拟用户剧本”。它定义了测试工具如何模拟真实用户的行为特征,包括并发用户数、思考时间、行为比例和分布模型。一个失真的用户模型会导致测试结果与生产表现严重偏离。

4.1 并发用户数估算

并发用户数并非系统注册用户数或日活跃用户数,而是在同一时间窗口内,与服务器保持交互状态的用户数。常用估算方法如下:

估算方法 公式 / 核心逻辑 适用场景
基于TPS与响应时间 并发数 = TPS × 平均响应时间(秒) 已知目标吞吐量,反推并发
基于在线用户与活跃率 并发数 = 在线用户数 × 活跃率(通常 5%–15%) 运营数据较全的存量系统
基于业务高峰日志 取过去 30 天峰值时段活跃 Session 数 已有生产监控,数据驱动
Little's Law 推导 并发数 = 到达率 × 平均服务时间 排队系统、消息队列场景
实践建议: 不要只依赖单一公式。建议用“基于在线用户”估算上限,用“基于TPS”估算基准,取两者交集作为初始并发值,再通过阶梯加压验证。

4.2 思考时间设置

思考时间(Think Time)是用户两次连续操作之间的停顿间隔。没有思考时间的测试会变成“发压机”,导致服务器过载失真。设置策略如下:

  • 固定思考时间: 所有虚拟用户使用相同间隔(如 3 秒)。适合基准测试,但缺乏真实性。
  • 随机思考时间: 在 [min, max] 区间内均匀或正态分布取值。更贴近真实用户行为。
  • 基于日志的思考时间: 从生产日志提取真实操作间隔分布,直接回放。最准确,但数据获取成本高。
  • 零思考时间(Pacing 模式): 不等待,连续发请求。用于测试系统极限吞吐,不作为常规模型。
常见误区: 思考时间设置过短(< 1 秒)会导致 CPU 空转在上下文切换上;设置过长(> 30 秒)则无法压出真实瓶颈。建议初始值设为 2–5 秒,根据目标 TPS 动态调整。

4.3 用户行为比例分配

一个业务系统通常包含多种操作(登录、浏览、下单、支付等)。压力测试必须按真实流量占比分配虚拟用户的行为。分配流程如下:

  1. 采集生产日志,统计各接口/业务的调用次数占比。
  2. 剔除爬虫与监控探针,保留真实用户流量。
  3. 归一化比例,确保总和为 100%。
  4. 映射到测试脚本,通过权重或概率分支控制虚拟用户行为。

示例比例分配表(电商场景):

业务操作 生产占比 测试权重 说明
商品浏览 55% 55 高频读操作
搜索 20% 20 带参数查询
加入购物车 12% 12 写操作,涉及库存
提交订单 8% 8 核心事务,高负载
支付 5% 5 第三方接口依赖

4.4 用户分布模型

用户分布模型定义了虚拟用户何时启动、何时退出、如何分组。常见模型如下:

  • 阶梯模型: 每隔一段时间增加一批用户,直到目标并发。适合寻找系统拐点。
  • 突发模型: 瞬间加载全部用户,模拟秒杀、抢购场景。
  • 潮汐模型: 用户数随时间呈正弦曲线变化,模拟早晚高峰。
  • 稳态模型: 用户数恒定,持续运行较长时间,用于稳定性测试。

下图展示了四种用户分布模型的加载曲线对比:

四种用户分布模型加载曲线对比 阶梯模型 时间 → 突发模型 时间 → 潮汐模型 时间 → 稳态模型 时间 → 0 并发数 选择分布模型时,需结合业务特征:日常压测用阶梯,秒杀用突发,早晚高峰用潮汐,长稳用稳态。

4.5 用户模型设计完整流程

将上述四个要素整合为可执行的用户模型,推荐以下步骤:

  1. 确定目标并发数(基于 TPS 或在线用户估算)。
  2. 设定思考时间分布(从生产日志提取或按经验设定随机区间)。
  3. 分配行为比例(按接口调用占比映射到脚本权重)。
  4. 选择分布模型(阶梯/突发/潮汐/稳态)。
  5. 编写测试脚本,嵌入思考时间与行为分支逻辑。
  6. 执行小规模验证,检查 TPS 与响应时间是否符合预期。
  7. 调整参数,迭代至模型稳定。
关键检查点: 验证阶段务必对比“测试模型产生的 TPS 分布”与“生产 TPS 分布”的相似度。若偏差超过 20%,需重新校准思考时间或行为比例。

下图展示了用户模型从数据采集到脚本落地的完整链路:

用户模型设计完整链路 生产日志采集 并发用户数估算 行为比例分配 思考时间设置 分布模型选择 测试脚本生成 小规模验证调整 反馈调整回路(迭代至模型稳定)

4.6 常见陷阱与避坑指南

陷阱 表现 解决方案
思考时间固定不变 测试曲线过于平滑,无法暴露突发瓶颈 使用正态分布或指数分布模拟真实间隔
行为比例照搬日志未归一化 某些操作权重过高,压垮非核心接口 剔除爬虫、归一化、按业务模块分层分配
并发数估算忽略响应时间变化 加压后实际并发远低于预期 使用 Little's Law 动态校准
分布模型与业务场景不匹配 测试结果无法解释生产故障 根据业务特征选择模型,必要时组合使用
最佳实践: 每次迭代保留用户模型参数快照(并发数、思考时间分布、比例权重、模型类型),便于回归对比和问题溯源。