在某项目压测过程中,需对微信小程序云函数进行压测,但云函数是通过微信小程序调用而非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等压测工具配置脚本对云函数进行压测,具体步骤如下:
- 进入
云开发CloudBase模块
,点击云函数
- 以云函数/test为例,如果要对test云函数进行压测:请求参数:
- 进入http访问服务界面:
- 选择“点击跳转”
- 点击“新建”
- 新建所需压测云函数的触发路径:
- 建立完触发路径,点击对应的函数,即可在浏览器触发请求云函数:
- 复制浏览器地址栏的URL,即可获得云函数的http请求URL,用于jmeter脚本配置。
对比之下,采取方法三能较快实现云函数压测。
总结
若需要对云函数进行压测
,可以在腾讯云云函数模块新增需压测云函数的触发路径
,获取http请求实现对云函数的压测。