# 压测工具

为方便业务做小程序在正式上线前或营销活动上线前进行真正的全链路压测,及时发现服务瓶颈,微信小程序团队在安全网关中推出「压测工具」的增值能力,使用微信真实账号请求小程序业务接口&微信开放接口进行全链路压测,真实还原业务的海量高并发等复杂场景,帮助开发者评估小程序在高并发情况下的性能和稳定性,以便及时发现和解决潜在的性能问题。通过安全网关压测工具,可以测试小程序在不同负载下的响应时间、吞吐量、并发数等指标,从而确定小程序的最大承载能力和瓶颈所在。

压测工具作为安全网关的增值能力,安全网关「标准版」及以上套餐版本支持使用,入门版及基础版需升级为「标准版」后使用。

# 一、压测任务

前往「安全网关-拓展能力-压测工具」中新建压测任务;压测任务为纯压测逻辑部分,如需执行压测,需先预约压测。

# 1.1 任务编辑

编辑器界面由左右两个部分组成:请求列表和请求设置。同时,编辑器支持设置压测任务的名称,以及选择压测的小程序。

# A. 压测任务名称

任务名称可用于区分不同的压测任务,如「活动压测」,不超过 32 个字符。

# B. 压测小程序

任务是按小程序维度压测,为决定了压测任务使用的小程序身份,包括微信接口的身份,会影响 wx.loginwx.getUserProfile 等接口的调用结果,以及网关请求中,服务端收到的 x-wx-appid 的值。

# C. 请求列表

请求列表展示了本次压测所使用的请求,支持拖动改变请求顺序。点击请求,可以切换请求编辑器至该请求。

# D. 新增请求

支持的压测请求如下:

  • 业务请求,gateway.call,即为压测小程序在网关接入层中配置的小程序URL(未配置的暂不支持压测)
  • 微信请求,即 wx 对象下回调形式的 API,目前已支持微信登录及微信支付等 8 个接口,后续支持更多其他微信开放接口
  • 云函数请求,即微信云开发中云函数请求,仅压测小程序在微信云开发中创建的云函数
  • wx.request(暂不支持)

# 1.2 请求设置

  • 请求名称:每个压测请求支持自定义请求名称。
  • 请求网关域名:选择压测小程序在网关接入层对应配置的网关域名。
  • 请求接口:按需填写需要压测的请求接口内容。
# 微信请求

使用微信请求时,需要参考微信官方文档填入压测时所需的参数。部分接口不需要参数(如 wx.login)。

# 业务请求
  • 业务接口支持设置请求的 HTTP Method,请求的 Header, URL(Path),请求 Body。
  • 默认的请求 Header 为 Content-Type: application/json,可以按照需求灵活调整。
  • 支持的请求 Body 形式为文本形式,其余格式暂不支持。

# 1.3 提取设置

请求支持设置参数提取,可以使用 JSONPath 的形式进行提取。提取的参数可以在后续的接口参数中进行引用,格式为 ${extract_name}。

微信接口的提取设置为固定的提取,默认支持的参数提取如下:

wx.request:code
wx.requestPayment:qrcode_img、data

业务接口用于请求业务接口,可以模拟 gateway.call 的请求。

网关接口支持使用 JSONPath 的形式进行参数提取,如 $.data.x.y.z。网关回包的结构如下:

{
  data: {}, // 返回的数据包内容
  http_code: 200, // 返回的状态码
  status: 1, // 压测状态,详见下表
  headers: [], // 返回的 Header 列表,结构为 {"k": "key", "v": "value"}
}

需要引用网关的回包内容进行提取时,可以通过 JSONPath 的形式进行提取:

  • 普通的对象提取:$.data.x.y.z
  • 数组下标的提取:$.data.arr.0.x.y.z
  • 其他格式的提取,可以参照 JSONPath 的文档

# 1.4 区分网关请求

网关请求会携带特殊的 Header,服务端可以根据该 Header 判断是否来自压测工具的请求

  • x-wx-source: wx-pressure-test

# 1.5 压测状态列表

{
  0: '正常',
  10001: '初始化配置失败',
  10002: '转移配置列表为空',
  10003: 'JSON解析失败',
  10004: 'JSLogin失败',
  10005: '网关调用失败',
  10006: '获取返回结果错误',
  10007: 'JSON转PB解析错误',
  10008: '设置缓存错误',
  10009: '获取结果为空',
  10010: '获取序列号失败',
  10011: '创建API失败',
  10012: '解析内容错误',
  10013: '获取UUID失败',
  10014: '获取存储的UUID失败',
  10015: '更新支付UUID存储错误',
  10016: 'JSON解析失败',
  10017: 'DOC解析失败',
  10018: 'BASE64编码失败',
  10019: '校验条件语句错误',
  10020: 'HTTPCODE错误',
  10021: '解析数据错误',
};

# 1.6 压测条件

请求支持设置压测条件,压测条件不通过时,自动停止接下来的请求压测。

压测条件支持表达式条件(自定义)和请求条件,表达式支持包含、不包含、等于、不等于。

# 表达式条件

表达式条件使用 JSONPath 进行判断,与参数提取中一致,使用 $.data.x.y.z 的形式来定义表达式左侧值,右侧值为字符串。

# 请求条件

请求条件支持判断如下条件:

  • 请求返回状态码:HTTP 状态码
  • 压测状态:与上文「压测状态列表」中定义的状态码一致

比对时,会将表达式左右两侧转换为字符串进行比对。

# 1.7 压测调试

在压测任务中,点击「调试」按钮可进入压测调试,会展示当前压测任务中,各个接口的执行情况,执行结果,以及对应的返回值/Header 等信息。如果压测中途接口出现报错,或条件判断不通过,压测任务将自动停止。

# 二、预约压测

如需预约压测,在目标压测任务卡片右上角点击「预约压测」即可,预约成功后,可在「预约列表」中查看具体的预约信息。

  • 预约名称:用作标识当前压测预约任务,支持任意命名
  • 目标 QPS:即为预约执行压测任务时需要压测的QPS额度;如所需压测的目标 QPS 大于当前网关套餐 QPS 额度,则需要额外购买安全网关资源包用作压测
  • 压测持续时长:目前支持5min、10min、15min、20min、25min、30min
  • 压测时间:需合理安排预约时间,请勿超过已购买网关资源包的有效时间范围,单位时间内仅支持预约一个压测任务
  • 预约任务有效时长:即预约压测任务可执行的有效时长,1个压测预约任务有效时长是30min;如预约了7月11日00:00的压测,则在00:30前均支持点击「执行压测」开始压测

说明:

  1. 预约完成后,将在预约列表中显示具体的预约信息,按时进行压测即可,如果超过预约时间段未进行压测,预约任务即过期,需要重新预约
  2. 执行预约压测任务后,平台会按照预约的压测QPS进行实时的线上压测;中途如遇问题,可以随时终止压测,终止压测即为结束压测,不支持再重新启动
  3. 压测是真实的对小程序发起真实用户请求,为保障业务后端正常运行,请在预约压测任务开始前做好资源准备
  4. 因1个压测预约任务有效时长是30min,则在30min内仅支持预约1个压测任务;如预约了7月11日00:00的压测,因有效时长为30min,下一个预约任务需要再7月11日00:31开始

# 三、购买压测资源

作为安全网关套餐的补充,购买网关资源包后,可在原网关套餐的基础上,提升压测QPS额度。购买成功后,将在「预约列表」中进行展示。

  • 压测QPS:按业务压测需求购买,所购资源QPS需为整百倍数,最大支持10wQPS
  • 压测时间:仅支持按天进行购买,默认有效时间为00:00-23:59;如压测时间选择7月12日,则网关资源包有效时间为7月12日00:00-23:59
  • 压测QPS计费单价:99.9元/100(QPS*2Mbps)/天,如有折扣将在价格计算中进行体现

说明:

  1. 网关资源购买后,有效期内在网关资源额度范围下,支持任意预约并执行压测任务
  2. 可支持压测的QPS额度为安全网关套餐QPS额度与网关资源包QPS额度之和;如安全网关套餐QPS为1000,额外购买了9000QPS压测网关资源包,则可支持最大的压测QPS额度为1000+9000=10000QPS

# 四、压测报告

执行预约压测任务后,即可生成压测报告,点击对应预约的压测任务「报告」即可查看压测报告。

# 五、常见问题

# 1. 压测工具的压测是直接在线上进行吗?

答:这里区分微信接口和业务接口:

a. 微信接口,是在线上进行是的,执行压测是用真实的微信账号对目标小程序的微信接口进行线上实际的压力测试。这里有个前提风险请知悉,微信接口压测为线上压测,请注意微信接口限频额度,压测超过微信接口限频额度后,将出现微信接口请求失败的情况;

b. 业务接口,根据所填业务接口域名是测试环境域名还是正式环境域名,如业务接口域名填写的是线上环境域名,则是在线上进行;另,请业务自行评估好目标小程序后端资源是否充裕,能支撑压测多大的量,以防压测量太大导致后端服务崩溃的情况。

# 2. 如何判断小程序业务请求是从压测任务来的?

压测的 HTTPS 请求,header 会带上 x-wx-source: wx_gw_load_testing

# 3. 添加的业务请求调试不通,提示不在白名单?

目前压测工具支持的业务接口,是读取小程序在网关接入层配置的小程序URL,未配置的暂不支持压测;可先前往「接入层-目标接入域名-修改」中选择添加对应的小程序URL即可。如担心配置了小程序URL会影响到线上业务,可将版本配置直接选择「不接入」,完全不影响线上业务。