我试图对使用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}"而不是馈线值。我试图做的是什么?
答案 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。