使用馈线传入标题值(Gatling)

时间:2015-04-03 20:27:55

标签: scala gatling

我试图对使用HAWK Authentication的服务器使用gatling。问题是需要为每个请求生成标头并传入密钥ID和密钥。这使得从多个用户发送请求变得困难。我已经使用硬编码密钥了Hawk java library。但是,我想使用送纸器模拟多个用户。由于馈线没有正确传递到函数调用中,我似乎无法正常工作。

我有以下代码:

class TestRampSimulation extends Simulation {
{
...
def generateHawk(key: String, secret: String, method: String, url: String): String = {
    val hawkCredentials: HawkCredentials = new HawkCredentials.Builder()
                                                     .keyId(key)
                                                     .key(secret)
                                                     .algorithm(HawkCredentials.Algorithm.SHA256)
                                                     .build();
    val hawkClient: HawkClient = new HawkClient.Builder().credentials(hawkCredentials).build();
    val authorizationHeader: String = hawkClient.generateAuthorizationHeader(URI.create(url), method, null, null, null, null);
    return authorizationHeader
  }

  val nbUsers = Integer.getInteger("users", 1).toInt
  val rmpTime = Integer.getInteger("ramp", 1).toInt

  val feeder = csv("tokens.csv").random

  val scn = scenario("Test API")
    .feed(feeder)
    .exec(http("[POST] /some/api/call")
      .post("/some/api/call")
      .headers(Map("Authorization" -> "".concat(generateHawk("${keyId}",
                                                      "${keySecret}",
                                                      "POST",
                                                      "http://localhost:8080/some/api/call"))))
      .check(status.is(201)))

  setUp(scn.inject(rampUsers(nbUsers) over (rmpTime seconds)).protocols(httpConf))
}

当我这样做时,密钥和密钥被评估为" $ {keyId}" /" $ {keySecret}"而不是馈线值。我试图做的是什么?

1 个答案:

答案 0 :(得分:4)

如果您希望每次都执行某些操作,则必须传递一个函数,而不仅仅是在加载场景时,请参阅doc

.header("Authorization", session =>
  for {
    keyId <- session("keyId").validate[String]
    keySecret <- session("keySecret").validate[String]
  } yield generateHawk(keyId, keySecret, "POST", "http://localhost:8080/some/api/call"))

但是,我们有一个用于生成此类令牌的API,请参阅SignatureCalculator

相关问题