【问题标题】:Gatling error : Failed to build request: No attribute named 'jwtoken' is definedGatling 错误:无法构建请求:未定义名为“jwtoken”的属性
【发布时间】:2021-06-16 14:01:44
【问题描述】:

在 scala 中运行我的脚本时出现此错误:“无法构建请求:未定义名为 'jwtoken' 的属性”,我提取 jwtoken 的值,然后将其放入变量中,然后我想阅读它在另一个请求中,我放了 2 个对象,因为我想运行两个场景:

class PPT_GET extends Simulation
  {  val httpProtocol = http
.baseUrl("") // Here is the root for all relative URLs
  
    val acteurscsv = csv("./src/test/resources/Data/ksp-acteurs.csv").circular
    val jwt = "123"
  

       object TokenGen {
     val tokenGen = exec(http("access_token")
       .post("https://URL1/token")
       .header("Content-Type", "application/x-www-form-urlencoded")
       .formParam("grant_type", value = "client_credentials") 
       .formParam("client_id", value = "PRTAPIPPD")
       .formParam("client_secret", value = "xxxxxx")
       .check(status is 200, jsonPath("$.access_token").saveAs("atoken")))
    
       .exec(http("jwt_token")
         .get("https://bsc-ppd.web.bpifrance.fr/mga/sps/apiauthsvc/policy/AT4JWT")
         .header("Authorization", "Bearer ${atoken}")
         .header("CorrelationID", "someID")
         .header("UsercallerSecret", "user1")
         .header("UsercallerID", "X1")
         .header("Accept", "application/json")
         .check(status is 200, jsonPath("$.JWTFull").saveAs("jwtoken")))     //here i extract the variable jwtoken
             }

    object Acteurs {

      val acteurs =
        pause(80)
          .feed(acteurscsv)
          .exec(http("ksp-acteurs")
            .get("https://URL1/ksp-acteurs/${ACTCODE}") 
            .header("Authorization", "Bearer ${jwtoken}" )    // here where i have the erreor
            .check(status is 200))
    }

【问题讨论】:

    标签: scala gatling scala-gatling


    【解决方案1】:

    我放了 2 个对象,因为我想运行两个场景

    事情不是这样运作的。场景是一个虚拟用户旅程,数据保存在每个虚拟用户的内存空间中,称为Session

    因此,您不能在一个场景中通过检查保存数据并期望在另一个场景中找到它,因为这些场景将由不同的虚拟用户执行。

    您必须在同一场景中链接您的请求,例如:

    val scn = scenario("foo").exec(TokenGen.tokenGen, Acteurs.acteurs)
    

    然后,如果您的目标是为您的测试生成一个单一的令牌,您可以使用全局参考和顺序方案:

    
    var token: String = null
    
    val generateToken = scenario("loadToken")
      .exec(TokenGen.tokenGen)
      .exec { session =>
      token = session("jwtoken").as[String]
      session
      }
    
    
        object Acteurs {
    
          val acteurs =
              feed(acteurscsv)
              .exec(http("ksp-acteurs")
                .get("https://URL1/ksp-acteurs/${ACTCODE}") 
                .header("Authorization", _ => s"Bearer $token" )
                .check(status is 200))
        }
    
    setUp(
      generateToken.inject(atOnceUsers(1))
        .andThen(
          scenario("acteurs").exec(Acteurs.acteurs).inject(???)
        )
    )
    
    

    【讨论】:

    • 想你 stéphane,我会把它放在一个对象中,但我需要每 10 分钟生成 1 次令牌(因为我不会每次都发送令牌的请求),你知道吗这样做?
    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2020-01-21
    • 2017-11-20
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多