Gatling录制脚本GET请求未携带Cookie导致302重定向问题
问题根因
Cookie丢失、请求被302跳首页的核心原因和Gatling本身的Cookie能力无关,是两个低级错误导致的:
- 脚本结构错误:你把登录后的Dashboard请求、pause暂停、MyBook请求全塞到了登录POST请求的
.resources()块里。.resources()的作用是定义和主请求并行发起的附属静态资源请求(CSS、JS、图片等),不会等主请求(登录POST)返回就会执行,此时登录流程还没走完,根本没拿到认证后的有效Cookie,后续请求自然会被拦截。 - 硬编码动态参数:代码里写死的
_token值、固定Cookie值完全无效。Laravel框架的XSRF令牌、Session ID都是每次会话动态生成、和当前用户绑定的,硬编码值和服务端存储的会话不匹配时,会直接判定为未登录状态返回跳转。
说明:Gatling 3.x默认开启全局自动Cookie管理,会自动存储服务端Set-Cookie返回的所有Cookie,自动携带到同域后续请求,完全不需要手动写代码存取Cookie。
修复步骤
- 先修正脚本执行顺序:把塞在
.resources()里的非静态资源请求全部移到外层,保证请求严格按「访问首页→提交登录→访问Dashboard→访问MyBook」的顺序串行执行,上一个请求拿到完整响应、更新完Session后再发下一个请求。 - 动态提取CSRF令牌:不要硬写
_token,第一次访问首页时从页面表单里提取动态生成的令牌,存到Session变量里供登录请求使用。 - 显式声明Cookie管理配置:在
httpProtocol中显式开启Cookie管理,避免全局配置被意外覆盖,同时不要在公共请求头里写固定Cookie字段,会覆盖自动管理的Cookie内容。
修复后可运行示例代码
private val httpProtocol = http .baseUrl("https://branch3.coverageforcompanies.com") .enableCookieManagement // 显式开启自动Cookie管理,3.x版本默认开启 // 排错阶段可以注释掉自动重定向,方便查看每个请求的原始响应,确认流程正常后再开启 .disableFollowRedirect private val scn = scenario("AgentTest") .exec( http("Open C4C on Chrome") .get("/") .headers(headers_0) // 从首页隐藏input中提取动态CSRF令牌,存为session变量csrfToken .check(css("input[name=_token]", "value").saveAs("csrfToken")) ) .pause(5) .exec( http("Enter Agent email and password") .post("/") .headers(headers_4) // 引用动态提取的令牌,替换硬编码值 .formParam("_token", "#{csrfToken}") .formParam("username", "你的测试账号邮箱") .formParam("password", "你的测试账号密码") .check(status.is(302)) // 正常登录成功会返回302跳转到Dashboard ) .pause(2) .exec( http("Jump to dashboard after login") .get("/a/dashboard") .headers(headers_5) .check(status.is(200)) // 加状态码校验,确认登录成功拿到Dashboard页面 ) .pause(5) .exec( http("Click on My Book Link") .get("/a/mybook") .headers(headers_5) .check(status.is(200)) )
排错注意事项
- 如果还是出现302,先保留
.disableFollowRedirect配置逐请求排查:如果登录POST本身就跳首页,说明账号密码错误或者CSRF令牌提取失败;如果登录POST正常跳Dashboard,但Dashboard请求跳首页,检查服务端Set-Cookie的domain属性是否和你请求的域名匹配。 - 不要手动解析响应头的
Set-Cookie值再手动塞到后续请求头里,自动Cookie管理已经完整实现了Cookie的过期、域匹配、路径匹配逻辑,手动添加Cookie反而会覆盖正常的Cookie值导致异常。
内容的提问来源于stack exchange,提问作者AnneG
相关产品推荐
相关产品推荐

