1

下午好。在 Gatling 文档中有点困惑,我找不到解决方案。我想获得一个令牌以在另一种方法中用作标头。这是我获得令牌的第一种方法的示例:

  exec(
    http("HTTP Request auth")
      .post("http://blabla:9001/connect/token")
      .header("Content-Type","application/x-www-form-urlencoded")
      .formParam("grant_type","password")
      .formParam("username", "${login}")
      .formParam("password", "${password}")
      .formParam("client_id","ro.client")
      .formParam("client_secret","secret")
      .check(status is 200)
      .check(header("access_token").saveAs("access_token"))
      .check(header("token_type").saveAs("token_type"))
  )

这是第二种方法,我想传递令牌:

  .exec(
    http("HTTP Request createCompany")
      .post("/Companies/CreateCompany")
      .header("Authorization","${token_type} + ${access_token}")
      .check(status is 200)
  )

结果,写道找不到令牌:

Request:
HTTP Request auth: KO header(access_token).find(0).exists, found nothing

但随后他写道:

body={"access_token":"7e8c1d997dd92f16a87fa7ffb8a88ab14eb05a8883d78fe8652d072f24b5ca4a","expires_in":31536000,"token_type":"Bearer"}

我想我在这里发现错了:

.check(header("access_token").saveAs("access_token"))
.check(header("token_type").saveAs("token_type"))
4

2 回答 2

1

第一个请求的主体是一个 Json 有效负载,您需要使用jsonPath,它类似于 Json 的 XPath:

.check(jsonPath("$.access_token").saveAs("access_token"))
.check(jsonPath("$.token_type").saveAs("token_type"))

此外,第二个请求的标头将打印为:

.header("Authorization", "${token_type} + ${access_token}")
=> Authorization: Bearer + 7e8c1d997dd92f16a87fa7ffb8a88ab14eb05a8883d78fe8652d072f24b5ca4a

除非您真的想要 extra +,否则正确的标题结构可能是:

.header("Authorization", "${token_type} ${access_token}")
于 2018-02-26T15:09:46.640 回答
0

一种方法是这样做->

 exec { session => var access_token ='' ; 
                 your exec code

        session.setAll( "token_type" -> access_token );
        }

然后 token_type 就可以使用了。

于 2018-02-26T17:46:36.950 回答