【问题标题】:Gatling won't save access tokenGatling 不会保存访问令牌
【发布时间】:2020-02-12 03:02:16
【问题描述】:

在下面的这个例子中,我可以看到令牌的路径是正确的,因为当我更改它时,我会遇到诸如 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)
}

【问题讨论】:

  • 您是否打算将您的所有请求(“savingtoken”除外)都作为资源的一部分?所有这些都将被并行获取,因此在您使用它时可能不会设置 ${Token}

标签: javascript performance gatling scala-gatling


【解决方案1】:

我认为问题出在这一行:

“授权”->“承载 ${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

      }}

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2020-06-05
    • 2012-01-18
    • 2013-07-11
    • 2012-09-19
    • 2021-10-01
    • 1970-01-01
    • 2021-02-16
    • 2020-06-19
    相关资源
    最近更新 更多