2016-06-07 3 views
2

Для индивидуальных вызовов у меня есть рубин код так, чтобы генерировать запрос API:Как подписать запрос в JMeter?

api_key = 'some-key-here' 
shared_secret = 'very-secretive-secret' 

timestamp = Time.now.to_i.to_s 
sig = Digest::MD5.hexdigest(api_key+shared_secret+timestamp) 

request_url = "#{production_point}/#{request}?apikey=#{api_key}&sig=#{sig}&format=json" 
puts request_url 

но генерироваться request_url будет работать только на относительно короткое время быть в зависимости от текущего времени.

Теперь мне нужно провести тестирование производительности, а в JMeter я использовал файл со списком URL/запросов/ключевых слов, с которыми мне нужно было ударить сервера, но это были - со статическими URL-адресами. Теперь мне нужно протестировать службу, которая требует, чтобы каждый запрос был подписан так, как описано выше, и я не могу просто использовать список.

Насколько я понимаю, в JMeter есть функция md5. Но где я помещаю api_key и shared_secret (секрет сам по себе не является частью URL).

Может кто-нибудь, пожалуйста, проведет меня через настройку теста JMeter на услугу, требующую подписания каждого запроса с подписью md5-ed, требующей отметки времени?

ответ

2

Вы можете использовать один из тестовых элементов Beanshell, то есть Beanshell PreProcessor, чтобы генерировать правильное значение знака непосредственно перед запросом.

  1. Добавить Beanshell препроцессор как потомок HTTP Request, который делает этот API вызов
  2. Вставьте следующий код в область «Скрипт» препроцессор (это в основном Beanshell эквивалент вашего скрипта Ruby)

    import org.apache.commons.codec.digest.DigestUtils; 
    
    String api_key = "some-key-here"; 
    String shared_secret = "very-secretive-secret"; 
    long timestamp = System.currentTimeMillis()/1000; 
    
    String sig = DigestUtils.md5Hex(api_key + shared_secret + timestamp); 
    
    vars.put("sig", sig); 
    
    log.info("Signature: " + sig); 
    
  3. Обратитесь к созданному сигнатурному значению как ${sig}, если это необходимо, поскольку оно было сохранено в JMeter Variable.

Демо: Beanshell MD5

Ссылки:

+0

Дмитрий, не могли бы вы показать скриншот о том, как эта переменная «sig» упоминается в HTTP-запросе (= на один уровень выше BeanShell PreProcessor)? Нужно ли мне создавать переменную без значения? Или HTTP-запрос автоматически получает переменную «sig» из дочернего элемента, и ее просто можно использовать в URL-адресе без каких-либо дополнительных усилий? – earlyadopter

+0

Дмитрий, неважно, я понял это. – earlyadopter

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