我尝试了从该站点上的其他示例中找到的所有建议,但我仍然无法让我的 Gatling 测试将身份验证令牌从 POST 传递到以下 GET。令牌取自 POST 的返回正文,并作为标头传递给 GET
最初登录是在 BaseSimulationTest 但我把它放在 GetDealsTests 进行故障排除
我尝试过的步骤:
- 我添加了这个:
//println(" Token value" + session("accessToken").as[String])
我能够看到我在终端中得到了一个字符串,这似乎表明 accessToken 是一个空值 - 我尝试在方法和全局中声明 var accessValue 和 var accessToken 。没变。
- 在传递令牌后,我尝试检查 GET 上的标头值,但
.check(header.is(expected = ${accessToken}))
似乎只是出错了 - 我已将登录 POST 和 GET 放在相同的方法、不同的方法等中
- 我尝试从 .formParam 而不是在请求语句的正文中传递用户名和密码
我需要将标题作为地图吗?这是范围的事情吗?我需要以不同的方式声明变量吗?测试以“预期 200 但收到 401”类型的结果运行。我认为 POST 甚至没有看到传递给它的令牌。
class GetDealsTests extends BaseSimulationTest {
def logIn2() = {
exec(http("Log in")
.post(getUrl() + "login")
.header("Content-Type", "application/json")
.body(ElFileBody("bodies/Login.json")).asJson
.check(status.is(200))
.check(jsonPath("$.access_token").saveAs("accessToken")))
exec(
session=>{
accessValue = session("accessToken").as[String]
session
})
}
def getAllDeals() = {
exec(_.set("accessToken", accessValue))
.exec(
http("Get all deals")
.get("deals/all")
.header("Authorization", "Bearer" + "${accessToken}")
.check(status.is(200))
)
}
val scnGetAllDeals = scenario("Get All Deals endpoint tests")
.forever() {
exec(logIn2())
exec(getAllDeals())
}
setUp(
scnGetAllDeals.inject(
nothingFor(5 seconds),
atOnceUsers(users))
).protocols(httpConf.inferHtmlResources())
.maxDuration(FiniteDuration(duration.toLong, MINUTES))
}
我查看了以下内容:Gatling won't save access token,Gatling Scala:Unable to send auth token to the method using session variable,Gatling - Setting Authorization header as part of request and don't see what I'm doing wrong