You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在K6中获取浏览器会话Cookie,并在setup()登录后于default()函数复用该Cookie

在K6中从setup传递登录Cookie到default的最简方法

嘿,我刚好碰到过类似的问题,给你捋捋最简单的解决办法!你之前用cookieJar和response.cookies没成功,大概率是因为setup函数的执行上下文和每个VU的default函数上下文是完全独立的——setup里的CookieJar不会自动同步到各个VU的会话里,所以得手动把登录后的Cookie提取出来,再传递给default用。

最简实现步骤

核心思路就是:在setup里完成登录,把登录响应里的Cookie拼成标准的Cookie头字符串,返回给default函数,然后后续请求直接带上这个请求头就行。

1. 在setup中登录并提取Cookie

export function setup() {
  // 发送登录请求(替换成你的登录接口和参数)
  const loginResponse = http.post('https://your-domain.com/login', {
    username: 'test-user',
    password: 'test-pass'
  });

  // 先确认登录成功,避免后续请求白忙活
  if (loginResponse.status !== 200) {
    throw new Error(`登录失败,状态码:${loginResponse.status}`);
  }

  // 从响应的cookies中构建完整的Cookie头字符串
  let authCookie = '';
  // 遍历所有返回的Cookie,拼接成标准格式
  for (const [cookieName, cookieDetails] of Object.entries(loginResponse.cookies)) {
    authCookie += `${cookieName}=${cookieDetails[0].value}; `;
  }
  // 去掉最后多余的分号和空格
  authCookie = authCookie.trim().slice(0, -1);

  // 返回Cookie给后续的default函数
  return { authCookie };
}

2. 在default中复用Cookie

import { check } from 'k6';

export default function(data) {
  // 发送需要鉴权的请求,带上从setup拿到的Cookie
  const protectedResponse = http.get('https://your-domain.com/protected-api', {
    headers: {
      'Cookie': data.authCookie
    }
  });

  // 验证请求是否成功(可选,但建议加)
  check(protectedResponse, {
    '受保护接口可访问': (res) => res.status === 200
  });
}

为什么之前的方法没生效?

  • cookieJar:setup函数有自己独立的CookieJar,而每个VU的default函数也有专属的CookieJar,两者不共享,所以setup里登录存的Cookie不会自动出现在VU的请求里。
  • response.cookies:你可能只是拿到了Cookie对象,但没把它转换成请求头需要的字符串格式,或者没正确传递给default函数。

额外注意事项

  • 如果你的登录接口返回多个Cookie(比如sessionId+csrfToken),上面的代码会自动拼接所有Cookie,不用单独处理。
  • 有些网站的Cookie会带HttpOnly或Secure属性,但在K6中发送请求时,只要Cookie值正确,这些属性不影响请求的发送。
  • 如果需要每个VU都有独立的登录会话,那应该把登录逻辑放到default函数的开头(而不是setup),这时候K6的默认CookieJar会自动维护每个VU的会话,不用手动处理。

内容的提问来源于stack exchange,提问作者Pubudu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:42:51