性能测试工具 K6 脚本分享:前置后置处理,cookiejar 使用

JoyMao · 2023年03月01日 · 最后由 陈哥聊测试 回复于 2023年03月28日 · 6953 次阅读

性能测试工具选择上,目前已经几乎都使用 K6,用于目前的性能测试工作也进行的比较顺利。(locust、jMeter 已经被我先丢在一边了)
所以这里也安利大家一波,k6+influxdb+grafana 是相当不错的选择。

这里主要分享一下 k6 的前置后置处理、cookiejar 的使用。这个 K6 的官方帮助文档上都有例子,但两者结合实现 “setup function 中登录,default function 中运行具体 http 接口” 没有具体的例子(因为 cookieJar 不能定义在 init 部分),这里就给出一个例子分享:

import http from 'k6/http';
import {check,sleep} from 'k6'

export const options={
    insecureSkipTLSVerify: true,
    //   stages: [     // 运行场景配置:10s内vu从0增长到20;20个vu持续运行20s;10s内20个vu减少到0
    //       { duration: '10s', target: 20 },
    //       { duration: '20s', target: 20 },
    //       { duration: '10s', target: 0 },
    //     ],
  }

const apiUrl="https://xxx.xxx.com/api/v1/product"
// 具体测试的api的url

// const cookieJar = http.cookieJar() //此处不能定义cookieJar,它不能定义在init部分

export function setup(){
    console.log("运行开始")
    let res=http.post(
        'https://login.xxx.com/login',
        {
          loginName: 'xxx@xxx.com',
          password:'xxxxxx'
        },
        {
          headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
          redirects:-1
        },
    ) // 提交一个登录请求
    if(res.status!==200 || !res.json() || res.json().code!=="1"){
        throw new Error("登录失败"); 
    } // 登录结果判断
    const cookieJar = http.cookieJar() 
    return cookieJar.cookiesForURL(apiUrl); // 通过cookieJar中将测试的api需要的cookie取出来

}

export default function (data){ // 具体的测试任务,data的值来自于setup()的返回回调
    const cookieJar = http.cookieJar()
    for(let ck of Object.entries(data)){ // 将api需要的cookie依次写入cookieJar中
        cookieJar.set(apiUrl,ck[0],ck[1][0])
    } 
    let res=http.get(
        apiUrl,
    )
    check(res, { 
        '状态码(含重定向)是否200': (r) => r.status == 200,
        '响应内容是否为json': (r) => !!r.json(),
        '接口响应成功': (r)=>r.json().code==='1'
    });
}

export function teardown(data){
    console.log("运行完成")
}
共收到 1 条回复 时间 点赞
回复内容未通过审核,暂不显示
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册