当前位置: 首页 > 测试知识 > 软件测试工具Gatling的Cookie管理:addCookie、getCookie、flushSessionCookies
软件测试工具Gatling的Cookie管理:addCookie、getCookie、flushSessionCookies
2025-12-08 作者软件测试工具Gatling的Cookie管理 浏览次数41

Cookie Gatling的Cookie管理机制兼具自动处理和精细手动控制能力。主要是CookieJar,会自动存储和发送符合domain和path规则的Cookie,而addCookie、getCookie(更准确的方法是getCookieValue)和flushSessionCookies等方法会用于高级场景的干预。


自动管理和CookieJar

Gatling默认启用Cookie支持。服务器返回的Set-Cookie头会被自动存入虚拟用户会话的CookieJar中。在后续发送请求时,只要请求的域名、路径等属性匹配,对应的Cookie就会自动附加到请求头里,无需手动干预。


主要操作方法

当你需要突破自动管理的限制时(例如预置Cookie、跨域使用或主动清除),就需要用到以下手动方法。


addCookie:预置或覆盖Cookie

此方法用于在发送请求前,向当前会话的CookieJar中手动添加或覆盖一个Cookie。这常用于模拟已登录状态,或测试依赖特定Cookie值的接口。

方法:addCookie(Cookie(name, value))

示例:在访问购物车前,预置一个用户标识 Cookie。


scala

exec(addCookie(Cookie("session_id", "预置的会话值")))

.exec(http("访问购物车")

  .get("/cart"))


重点:手动添加的Cookie和服务器返回的Cookie具有同等效力,也会被自动发送到匹配的请求中。

getCookieValue:精准提取Cookie值

此方法用于从 CookieJar 中提取指定 Cookie 的值,以便存入会话变量、在请求体或URL中使用。

方法:getCookieValue(CookieKey("cookie_name"))

示例:提取名为 user_token 的 Cookie 值,并将其用作查询参数。


scala

exec(http("获取Token页")

  .get("/token")

)

.exec(

  http("使用Token的API")

    .get("/api/data")

    .queryParam("auth", "${user_token}") // 使用提取的值

)


提示:根据RFC 6265标准,getCookieValue的匹配规则很严格。默认情况下,只匹配非安全连接(withSecure 默认为 false)且路径完全匹配的Cookie。如果Cookie来自HTTPS(Secure)或路径不精确匹配,会提取失败。

做法:明确指定参数。


scala

getCookieValue(

  CookieKey("JSESSIONID")

    .withSecure(true)    // 明确匹配安全Cookie

    .withPath("/app")    // 明确匹配路径

    .withDomain("example.com")

)


flushSessionCookies:清除会话Cookie

此方法用于立即清空当前会话 CookieJar中所有未设置明确过期时间(即“会话级”或“非持久化”)的 Cookie。这常用于模拟用户注销或清理会话状态。

方法:flushSessionCookies()

重点:只清除会话Cookie,而设置了Max-Age或Expires的持久化Cookie会被保留。flushCookieJar方法会清除所有Cookie。


组合应用示例

下面这个场景综合运用了上述方法,模拟了一个用户登录后因会话Cookie被清除,需要重新登录的流程:


scala

exec(

  http("用户登录")

    .post("/login")

    .formParam("username", "testUser")

    .formParam("password", "pass123")

    // 登录成功后,服务器的Set-Cookie会被自动存入CookieJar

)

.pause(1)

// 此时,对同域请求的Cookie会自动携带,访问个人页面成功

.exec(http("访问个人主页")

  .get("/profile")

)

.pause(1)

// 关键操作:手动清除所有会话Cookie(模拟会话失效)

.exec(flushSessionCookies())

.pause(1)

// 再次尝试访问个人主页,由于Cookie已清除,服务器应返回未授权

.exec(http("Cookie清除后访问主页")

  .get("/profile")

  .check(status.is(401)) // 验证访问失败

)

// 手动添加一个无效的Cookie,测试服务器的处理

.exec(addCookie(Cookie("session_id", "伪造的无效值")))

.exec(http("使用无效Cookie访问")

  .get("/profile")

  .check(status.is(403)) // 验证访问仍失败

)


优先依赖自动管理:对于标准会话流程,应信任Gatling的自动Cookie处理。避免不必要的复杂提取和手动设置。

何时手动干预:在需要预置身份、使用Cookie值作为请求参数、测试注销/清理逻辑或处理跨域/特殊路径的Cookie时,再使用上述手动方法。

getCookieValue的注意事项:使用时务必注意Cookie的Secure、Path、Domain属性,并明确指定匹配条件。

文章标签: 软件测试标准 软件测试 第三方软件测试 测试工具 第三方应用测试 测试环境
咨询软件测试