压测工具(内测中)

为方便业务做全链路压测,微信小程序团队在安全网关中推出「压测工具」的增值能力,真实用户请求业务接口&微信开放接口的全链路压测。内测期间定邀免费开放,支持 1W 真实微信用户并发。

如需参与内测,请前往「Donut - 安全网关 - 技术支持open in new window」,扫码加入安全网关用户群,联系群管理预约内测即可。

压测任务

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

压测任务编辑器

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

  • 压测任务名称:任务名称可用于区分不同的压测任务,如「活动压测」,不超过 32 个字符。
  • 压测小程序:任务是按小程序维度压测,为决定了压测任务使用的小程序身份,包括微信接口的身份,会影响 wx.login,wx.getUserProfile 等接口的调用结果,以及网关请求中,服务端收到的 x-wx-appid 的值。
  • 请求列表:请求列表展示了本次压测所使用的请求,支持拖动改变请求顺序。点击请求,可以切换请求编辑器至该请求。
  • 新增请求:支持的压测请求如下:
    • gateway.call,即为压测小程序在网关接入层中配置的小程序URL(未配置的暂不支持压测)
    • wx 对象下回调形式的 API,目前支持微信登录及微信支付接口,后续支持更多其他微信开放接口
    • wx.request(暂不支持)

请求设置

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

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

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

提取设置

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

微信接口

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

  • wx.request
    • code
  • wx.requestPayment
    • qrcode_img
    • data
业务接口

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

  1. 数据结构和参数提取
  • 网关接口支持使用 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. 区分网关请求 网关请求会携带特殊的 Header,服务端可以根据该 Header 判断是否来自压测工具的请求
  • x-wx-source: wx-pressure-test
  1. 压测状态列表
{
  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: '解析数据错误',
};

压测条件

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

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

表达式条件

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

请求条件

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

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

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

压测调试

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

预约压测

压测工具内测期间需要联系安全网关工作人员进行预约,可前往「安全网关控制台-技术支持open in new window」,进群联系群管理即可。

  1. 预约完成后,将在预约列表中显示具体的预约信息,按时进行压测即可,如果超过预约时间段未进行压测,预约任务即过期,需要重新预约
  2. 执行预约压测任务后,平台会按照预约的用户并发数进行实时的线上压测;中途如遇问题,可以随时停止压测,停止压测即为结束压测
  3. 压测是真实的对小程序发起真实用户请求,为保障业务后端正常运行,请在预约压测任务开始前做好资源准备

压测报告

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

常见问题

  1. 压测工具的压测是直接在线上业务上进行吗?
  • 答:是的,执行压测是用真实的微信账号对目标小程序进行线上实际的压力测试。这里有个前提风险请知悉,压测为线上压测,请评估好目标小程序后端资源是否充裕,能支撑压测多大的量,以防压测量太大导致后端服务崩溃的情况。
  1. 如何判断小程序业务请求是从压测任务来的?
  • 答:压测的 HTTPS 请求,header 会带上 x-wx-source: wx_gw_load_testing
  1. 添加的业务请求调试不通,提示不在白名单?
  • 答:目前压测工具支持的业务接口,是读取小程序在网关接入层配置的小程序URL,未配置的暂不支持压测;可先前往「接入层-目标接入域名-修改」中选择添加对应的小程序URL即可。如担心配置了小程序URL会影响到线上业务,可将版本配置直接选择「不接入」,完全不影响线上业务。
  1. 当前使用的安全网关套餐规格较低,会不会影响到压测的执行?
  • 答:压测工具内测期间,执行压测用户并发数完全不受安全网关套餐规格限制,可放心使用。