记录:k6性能脚本连接Redis取值

发布时间 2023-12-02 16:28:28作者: xyttt06

  为了捡起以前学过的一个性能框架k6,拿现在公司的项目来上手,打算业务测试之余拿系统的接口跑跑性能。

  本周的问题主要集中在k6脚本中引入redis的问题。因为项目系统的登录页面是涉及到验证码图片的,后端写了逻辑会把验证码的值写入在redis,所以登录的时候绕不开这个。再加上对js的生疏,所以本周一直在处理这个问题,记录一下。

  验证码接口:'captcha-web/captcha/code/get',传参是个时间戳{'timestamp': int(round(time.time() * 1000))}。

  一开始搜了下,在k6脚本中引入了ioredis,这是一个nodejs连接redis的方式,但是k6框架是不允许这么调用的。但总算也还是用nodejs的方式连接set,get成功了。

  针对k6脚本,查看了官方的granafa/k6社区,使用的是xk6-redis

  问题:连上了,但是一直get不到值,可以set,不能get

   下载redis客户端,进去看了,确实是生成了

  

   但就是一直client.get(),get不到具体的值。

  解决:

  https://k6.io/docs/javascript-api/k6-experimental/redis/client/client-get

  忽略了这个get方法的返回值是个Promise体,陌生...

  get后我console.log了,然后打印是{},打印类型是个object,然后就一直搁那转来转去,以为要转化才能打印出来

   针对这个promise的类型,k6脚本需要指定的写法才能去获取使用,如图的example写法就能拿到了。被自己蠢到...

  

   

exportdefaultasyncfunction(){
await redisClient.set('mykey','myvalue',0)
 
const exists =await redisClient.exists('mykey');
if(exists ===false){
thrownewError('mykey should exist');
}
 
const value =await redisClient.get('mykey');