2016-06-07 2 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 

을하지만 생성 된 요청 URL은 비교적 짧은 시간이 현재 타임 스탬프에 의존에만 작동합니다.

이제 성능 테스트를 해보고 JMeter에서 서버를 강타해야하는 URL/요청/키워드 목록과 함께 파일을 사용했지만 정적 URL을 사용했습니다. 이제 위에서 언급 한 방식으로 각 요청을 서명해야하는 서비스를 테스트해야하며 목록을 사용할 수는 없습니다.

JMeter에서 사용할 수있는 md5 기능이 있다는 것을 알고 있습니다. 하지만 어디에 api_key와 shared_secret (비밀은 URL 자체의 일부가 아닙니다)를 넣어야합니까?

타임 스탬프가 필요한 md5-ed 서명으로 각 요청에 서명해야하는 서비스에 대한 JMeter 테스트 설정을 안내해 줄 수 있습니까?

답변

2

요청 전에 올바른 서명 값을 생성하기 위해 "Beanshell"테스트 요소 중 하나 (예 : Beanshell PreProcessor)를 사용할 수 있습니다.

  1. 은 전처리의 "스크립트"영역에 다음 코드를 넣어 API 호출을 수행하는 HTTP 요청의 자식으로으로 Beanshell 처리기를 추가

    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); 
    
    (그것은 기본적 루비 스크립트으로 Beanshell 동등한입니다)
  2. 생성 된 서명 값은 JMeter Variable에 저장되어 있으므로 필요한 경우 ${sig}으로 참조하십시오.

데모 : Beanshell MD5

참고 : (일명 vars)

+0

Dmitry, HTTP 요청 (= BeanShell PreProcessor 위의 한 수준)에서 해당 변수 "sig"가 어떻게 참조되었는지 스크린 샷을 표시 할 수 있습니까? 거기에 가치없는 변수를 만들어야합니까? 또는 HTTP 요청은 자식에서 자동으로 "sig"변수를 가져오고 추가 노력없이 URL에서 사용할 수 있습니다. – earlyadopter

+0

드미트리, 나도 알아 냈어. – earlyadopter

관련 문제