基于微信小程序的云函数压测

2021-10-26 20:24:19 浏览数 (1)

在某项目压测过程中,需对微信小程序云函数进行压测,但云函数是通过微信小程序调用而非http请求,无法通过压测工具模拟用户进行访问,那么如何对云函数进行压测呢?

何为云函数?

微信小程序官方文档是这么描述的:

云函数即在云端(服务器端)运行的函数。无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。

我们看一个云函数的例子:

代码语言:txt复制
// ...
exports.main = async (event, context) => {
  // ...
  return {
    sum: event.a   event.b
  }
}

上述代码实现的是:将传入的 a 和 b 相加并作为 sum 字段返回给调用端。

在小程序中调用这个云函数前,需要先将该云函数部署到云端。部署完成后,可以在小程序中调用该云函数:

代码语言:txt复制
wx.cloud.callFunction({
  // 云函数名称
  name: 'add',
  // 传给云函数的参数
  data: {
    a: 1,
    b: 2,
  },
  success: function(res) {
    console.log(res.result.sum) // 3
  },
  fail: console.error
})

这样就成功创建了一个简单的云函数,并在小程序中成功调用。

如何实现云函数压测?

从上述部分可以看出,云函数是通过微信小程序调用的,而一般压测追求共通性,都会基于http请求进行压测。那云函数有没有可能通过http请求给到第三方(非微信小程序)去调用呢?

以下有三种方案可进行尝试:

方法一 根据appid和secret获取access_token去触发云函数

Step 1 :调用auth.getAccessToken接口,根据小程序唯一凭证appid和 小程序唯一凭证密钥secret获取小程序全局唯一后台接口调用凭据access_token( appid 和 secret 在小程序注册时即可获取)

请求地址:GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

请求参数:

返回值:

通过 postman 调用接口可获取access_token

详见:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html

Step 2 :调用invokeCloudFunction接口, 以 https 方式请求云函数

请求地址:POST https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME

请求参数:

返回值:

通过 postman 调用接口即可触发云函数

详见:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/functions/invokeCloudFunction.html

这种访问云函数的方法的卡点在于:

云开发的云函数是与微信登录鉴权的无缝整合的。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,而通过http api 方式触发云函数不包含用户信息,所以,这种方法不可行

详见:https://developers.weixin.qq.com/minigame/dev/wxcloud/guide/functions/userinfo.html

方法二 手动实现并发压测、计算结果的逻辑

压测分为压测端(以下简称A端),被压测服务(以下简称B端)。

过程实现待更新...

方法三 新建云函数的http触发路径

在腾讯云的云开发模块添加云函数的触发路径,获取云函数所对应的http请求URL,用于jmeter等压测工具配置脚本对云函数进行压测,具体步骤如下:

  1. 进入云开发CloudBase模块,点击云函数
  1. 以云函数/test为例,如果要对test云函数进行压测:请求参数:
  2. 进入http访问服务界面:
  3. 选择“点击跳转”
  4. 点击“新建”
  5. 新建所需压测云函数的触发路径:
  6. 建立完触发路径,点击对应的函数,即可在浏览器触发请求云函数:
  7. 复制浏览器地址栏的URL,即可获得云函数的http请求URL,用于jmeter脚本配置。

对比之下,采取方法三能较快实现云函数压测。

总结

若需要对云函数进行压测,可以在腾讯云云函数模块新增需压测云函数的触发路径,获取http请求实现对云函数的压测。

0 人点赞