对于单个调用,我有类似的ruby代码来生成API请求:
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的一部分)。
请有人,请指导我为需要使用需要时间戳的md5-ed签名签署每个请求的服务设置JMeter测试吗?
答案 0 :(得分:2)
您可以使用“Beanshell”测试元素之一,即Beanshell PreProcessor,以便在请求之前生成正确的签名值。
将以下代码放入PreProcessor的“脚本”区域(它基本上是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);
将生成的签名值引用为${sig}
,因为它已存储到JMeter Variable中。
参考文献: