我正在与Gatling一起在Scala工作。
我需要遵循在HTML页面中找到的重定向,作为对我的第一个请求的响应发送(因此,加特林之后的自动重定向无法解决问题。
现在我的解决方案看起来像这样:
private def scn: ScenarioBuilder = {
scenario("KLS test tool")
.repeat(nb_req) {
feed(feeder)
.exec {
http("request").
httpRequest("GET", "${url}")
.check(bodyString.saveAs("body"))
}
.exec {
session => {
val responseBody = session.attributes("body").toString
val redirect = findRedirectUrlIn(responseBody)
redirect match {
case Some(url) =>
java.lang.System.setProperty("redirect_url", url)
case None =>java.lang.System.setProperty("redirect_url", "")
}
}
}
.exec {
val redirect = java.lang.System.getProperty("redirect_url")
val url = "/redirect?url=" + redirect
http("redirect").
httpRequest("GET", url)
}
}
}
但是,第二个执行程序(应该扫描HTML页面以查找要重定向到的URL)在第三个执行程序(应该实际访问URL)之后运行,因此getProperty给我“空”
我如何强制盖特林以正确的顺序运行高管?
我有类似的任务,但是以另一种方式做了...如果禁用重定向该怎么办?只需将disableFollowRedirect
添加到您的HttpProtocolBuilder中:
val protocol = http
.baseUrl(...)
.disableFollowRedirect
然后我发出了重定向并保存到redirect_url的请求] >>
val getUrl: HttpRequestBuilder = http("getShortUrl")
.get("${shortUrl}")
.check(
status.is(302),
header("Location").saveAs("redirect_url")
)
您在做什么是错误的。