# 小程序压测

## 需求场景

很多小程序都会进行一些运营活动，这时候会有很多用户同时进来访问。当用户量比较大时，业务方可能会担心压力过大导致小程序功能异常。

这时开发同学/测试同学希望能够对小程序进行一次**压力测试**，比如可以模拟1000个用户同时打开小程序场景。

自然而然的，一个常见想法是直接用1000个手机，同时打开小程序，模拟用户并发情况。但是用纯UI自动化方式去压测，会遇到以下几个问题：

1. 由于每台手机的性能不一，控制多台手机都是在**同一个时刻去打开小程序基本无法做到**
2. 用1000台手机去做端到端的压测**成本高**。而且由于手机数量是有限的，**压力瓶颈有明显上限**

## 解决方案

微信推出的 [微信网关](https://developers.weixin.qq.com/platform/gateway?utm_source=developers_home_ga) 支持小程序压测能力，可以生成微信code，实现真实用户请求业务接口以及微信开放接口的全链路压测

开发者平台工具主要关注服务器端的请求是否正常响应，**无法感知小程序在压力情况的UI表现和性能情况**。

这里可以将小程序云测的自动化/性能测试能力和开发者平台网关结合起来。首先利用开发者平台网关对后台服务器进行发压，例如并发用户量调整为1000。压力上来后，在云测正常执行对应的测试任务。这样相当于用几台手机模拟测试了“1000台手机同时打开小程序”的场景。

**通过结合云测的自动化测试和性能测试能力**（比如收集到的截图，录屏，体验评分，启动性能 ，网络请求，是否存在黑白屏JSError等异常情况），用户可以**全面观察小程序在压力情况下的实际UI表现**

## 实践案例

需求：小程序A希望对首页内容进行压测，观察100个用户同时打开首页的表现是否有异常。可以按照以下步骤进行：

### 1. 开发者平台发压

用户在 开发者平台 建立网关后，调试后台压测请求链路，例如小程序A希望对首页进行压测，请求的链路为： 
1. 首先获取用户code
2. 用微信code访问服务器后台，识别用户
3. 识别用户身份后，生成首页内容数据

![](https://res8.wxqcloud.qq.com.cn/wxdoc/d2acc721-70b4-4e54-8427-5b1fe26301a9.png)

调试成功后，可以按照实际需求去预约压测任务，如配置并发用户数为100，压测时长为30分钟

### 2. 云测跑测质检任务

压测任务启动后，建议立即启动云测任务（由于云测需要对真机进行初始化操作，一般需要2-5分钟后才会真正拉起小程序）。

执行云测的任务类型推荐使用[小程序质检](quality)能力，因为质检会同时发起启动性能测试和自动化测试任务：

- 启动性能测试：观察压力情况下，小程序启动耗时是否会变慢
- 自动化测试：自动化任务可以根据业务实际需求，使用Monkey、录制回放、Minium的一种。主要目的是观察压力情况下，小程序是否会出现功能异常或性能问题（如Monkey测试可以检测JSError，黑白屏等异常）

这里小程序A使用Monkey作为自动化测试方案。一般情况下，首页内容是正常加载的，但是当服务器压力较大，网络返回较慢时，小程序A出现了**JSError**问题

![](https://res8.wxqcloud.qq.com.cn/wxdoc/00ae6fa9-4943-48bf-b08f-74c0b5c408ad.png)

## 后续规划

目前用户需要手动在开发者平台和云测端分别操作去启动任务。

后续云测和开发者平台结合起来，可以让用户在开发者平台中，执行压测任务时可以选择同时启动云测任务，带来更好地压测体验。

关于压测有任何问题，欢迎在[帮助页面](help)，加入官方企微群，和云测小助手一起探讨
