2015-04-03 2 views
0

Я пытаюсь использовать gatling для сервера, который использует HAWK Authentication. Проблема в том, что заголовок должен быть сгенерирован для каждого запроса и передать ключ и ключ ключа. Это затрудняет отправку запросов от нескольких пользователей. Я получил этот Hawk java library, работающий с жестко закодированными ключами. Тем не менее, я хотел бы моделировать нескольких пользователей с помощью фидера. Кажется, я не могу заставить эту работу работать, поскольку фидеры неправильно передаются в вызовы функций.Использование фидера для передачи значений заголовка (Gatling)

У меня есть следующий код:

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}" вместо значений фидерных. Это то, что я пытаюсь сделать возможным?

ответ

2

Вы должны передать функцию, если хотите, чтобы что-то выполнялось каждый раз, а не только при загрузке сценария, см. 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.

+0

Я загляну в калькулятор подписи, я пропустил это, глядя в документы. Для ясности кажется, что это правильный способ получить атрибуты сеанса: session («keyId»). Как [String] в контексте приведенного выше фрагмента кода. – rjbez

+0

@rjbez вы правы, исправлены –

Смежные вопросы