如何从 cookie 中保存 XSRF 令牌并将其传递给 Gatling 的下一个请求标头中的服务器
Posted
技术标签:
【中文标题】如何从 cookie 中保存 XSRF 令牌并将其传递给 Gatling 的下一个请求标头中的服务器【英文标题】:How can save XSRF token from cookie and pass it to server in next request header in Gatling 【发布时间】:2020-10-19 08:34:23 【问题描述】:我正在尝试使用 Gatling 执行负载测试,我需要从 cookie 中保存 X-XSRF-TOKEN
并将其传递到下一个请求标头中。这是我的场景:
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import scala.util.Random
class addvehicle extends Simulation
object randomIntegerGenerator
def randomInteger(range: Int) =
scala.util.Random.nextInt(range).toString
val feeder = Array(
Map( "Authorization" -> "Bearer XXXX" ),
Map( "Authorization" -> "Bearer YYYY" )
).random
val httpProtocol = http
.baseUrl("https://192.168.165.176:30479")
.inferhtmlResources()
.acceptHeader("application/json, text/plain, */*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("IR")
.userAgentHeader("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0")
val headers_8 = Map("X-XSRF-TOKEN" -> "f50b2810-ee6a-435b-87d6-5a40dd45bbb1")
val headers_9 = Map(
"Content-Type" -> "application/json",
"Origin" -> "https://192.168.165.176:30479"
val headers_10 = Map(
"Content-Type" -> "application/json",
"Origin" -> "https://192.168.165.176:30479"
val headers_11 = Map("X-XSRF-TOKEN" -> "050e6282-febd-4452-a68b-e88fbc8d3134")
val req = s""""entryDate":"2020-10-03","vehicleVersion":"vehicleVersionValue"]"""
var randomSession = Iterator.continually(
Map(
"randsession" -> (req
.replace("vehicleVersionValue", randomIntegerGenerator.randomInteger(10))
)
))
val scn = scenario("addvehicle")
.feed(feeder)
.feed(randomSession)
.pause(1)
.exec(
http("request_8")
.get("/find/usable?category=Vehicle")
.header("Authorization","$Authorization")
.headers(headers_8))
.pause(1)
.exec(getCookieValue(CookieKey("XSRF-TOKEN").saveAs("X-XSRF-TOKEN")))
.exec(
http("request_9")
.post("/api/universal/search")
.header("Authorization","$Authorization")
.header("X-XSRF-TOKEN","$X-XSRF-TOKEN")
.headers(headers_9)
.body(ElFileBody("C:/Users/test/Downloads/Gatling/user-files/resources/addvehicle/0009_request.json")))
.pause(1)
.exec(getCookieValue(CookieKey("XSRF-TOKEN").saveAs("X-XSRF-TOKEN1")))
.exec(
http("request_10")
.post("/api/vehicle/create")
.header("Authorization","$Authorization")
.header("X-XSRF-TOKEN","$X-XSRF-TOKEN1")
.headers(headers_10)
.body(StringBody("""$randsession"""))
.resources(http("request_11")
.get("/api/bank/find")
.header("Authorization","$Authorization")
.headers(headers_11),
http("request_12")
.get("/api/vehicle/find?page=0&size=6&sort=createdDate,DESC")
.header("Authorization","$Authorization")
.headers(headers_11)))
setUp(scn.inject(atOnceUsers(5))).protocols(httpProtocol)
我想从请求 8 cookie 中保存 X-XSRF-TOKEN
并在请求 9 标头中将其传递给服务器,在这种情况下如何使用 check()
和 saveAs()
API 执行多次负载测试?
【问题讨论】:
【参考方案1】:使用header
或headerRegex
check 解析Set-Cookie
标头,或使用getCookieValue
action 获取cookie 值。
【讨论】:
我们的服务器在浏览器 cookie 中存储X-XSRF-TOKEN
并期望它在下一个请求标头中,我尝试在下一个请求之前使用 .exec(getCookieValue(CookieKey("X-XSRF-TOKEN")).saveAs("X-XSRF-TOKEN"))
存储 X-XSRF-TOKEN
但出现错误:value saveAs is not a member of io.gatling.http.action.cookie.GetCookieValueBuilder
逗号错误:.exec(getCookieValue(CookieKey("X-XSRF-TOKEN").saveAs("X-XSRF-TOKEN")))。
我将.exec
添加到我的场景中,但是当我打印会话时,$X-XSRF-TOKEN
和$X-XSRF-TOKEN1
具有相同的值。
我在保存 cookie 后刷新了会话 cookie,它可以工作了!谢谢。以上是关于如何从 cookie 中保存 XSRF 令牌并将其传递给 Gatling 的下一个请求标头中的服务器的主要内容,如果未能解决你的问题,请参考以下文章
从 OWIN Cookie 获取不记名令牌并将其放在 API 请求中
401 无效令牌/handler.xsrf_token 与 cookie 不匹配
如何使用标头中的用户 JWT 令牌转发授权并将其与 cookie 中的 JWT 令牌进行比较以验证用户?
Angular 和 PHP JWT 和 CSRF (XSRF) Cookie
如何使用 HttpClientXsrfModule angular 6 添加 x-xsrf-token
如果用于认证的JWT令牌保存在HTTP-Only cookie中,你如何从cookie中读取它,以便我可以在请求头中包含它?