javascript - Gatling 不会保存访问令牌
问题描述
在下面的这个示例中,我可以看到令牌的路径是正确的,因为当我更改它时,我会收到诸如 find.exists 之类的错误。什么也没找到。然而由于某种原因,我无法保存令牌。我得到 Failed to build request: No attribute named 'Token' is defined
import scala.concurrent.duration._
import io.gatling.jsonpath.JsonPath
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import io.gatling.jsonpath.AST._
class Uus extends Simulation {
val httpProtocol = http
.baseUrl("https://testsite.com")
.inferHtmlResources()
.userAgentHeader("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36")
val autentimata = Map(
"Access-Control-Request-Headers" -> "authorization",
"Access-Control-Request-Method" -> "GET",
"Origin" -> "https://testsite.com")
val autentitud = Map(
"Accept" -> "application/json, text/plain, */*",
"Origin" -> "https://testsite.com",
"authorization" -> "Bearer ${Token}")
val uri2 = "https://testsite.com"
val scn = scenario("RecordedSimulation")
.exec(http("savingtoken")
.options("/token/get?rememberMe=true")
.headers(autentimata)
.resources(http("request_2")
.get("/token/get?rememberMe=true")
// .check(jsonPath("$.data.accessToken").saveAs("Token"))
.check(status.is(200), jsonPath("$.data.accessToken").ofType[String].saveAs("Token"))
.headers(autentimata)
.basicAuth("11111111111","P2rooliall"),
http("sisselogitud")
.options("/users/11111111111")
.headers(autentimata),
http("kasutaja lehele")
.get("/users/11111111111")
.headers(autentitud)
//.check(jsonPath("$.data.accessToken").saveAs("token"))
.check(status.is(200)),
http("sündmuste lehele")
.options("/events?page=0&size=25&relation=ASSIGNEE,CREATOR&status=OPEN,REOPEN,FINISHED,ARCHIVED&sort=createdDate,desc")
.headers(autentimata),
http("sündmusteleht")
.get("/events?page=0&size=25&relation=ASSIGNEE,CREATOR&status=OPEN,REOPEN,FINISHED,ARCHIVED&sort=createdDate,desc")
.headers(autentitud)
.header("authorization", "Bearer ${Token}")
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}
解决方案
我认为问题出在这一行:
“授权”->“不记名${Token}”
从这个块:
val autentitud = Map(
"Accept" -> "application/json, text/plain, */*",
"Origin" -> "https://testsite.com",
"authorization" -> "Bearer ${Token}")
因为No attribute named 'Token' is defined
声明您正在尝试使用尚未定义的变量。而且,实际上,您Token
只在场景执行期间保存。
Gatling 文档说明Expession EL:
此表达式语言仅适用于传递给 Gatling DSL 方法的字符串值。在实例化 Gatling 模拟时,此类字符串仅解析一次。
因此,解决方案是重构您的代码并在标头中传递块,即使这意味着代码重复。
您可以尝试通过打印它的值来验证您的令牌是否被提取,如下所示:
.exec{
session=>{
println(" Token value" + session("Token").as[String])
session
}}
推荐阅读
- c# - MahApps.Metro DropDownButton click event
- typescript - Is it possible to set conditions within types or interfaces in TypeScript
- windows - TwinCat project in Visual Studio files show up with yellow triangle and examination mark
- c++ - 标准::变体
作为模板函数的最后一个参数,采用多个可变参数 - r - 如何在编织 r markdown 时隐藏代码消息
- r - 根据变量的数量复制行(R)
- javascript - 将数组的索引更改为 JavaScript 字符串
- c# - 我为dataGridCell添加了样式,但是当我尝试找到它时,出现了找不到样式的异常
- android - 如何使 appbarlayout 的布局可滚动?
- kubernetes - 使用 RBAC 时,“kubectl auth reconcile”和“kubectl apply”有什么区别?