如何在 JMeter 中签署请求?
how to sign request in JMeter?
对于个人调用,我有一个类似 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/requests/keywords 列表的文件,我需要用它来破坏服务器,但那些是 – 静态 URLs。现在我需要测试一个服务,它要求每个请求都按照上述方式进行签名,我不能只使用一个列表。
我知道 JMeter 中有一个 md5 函数。但是我把 api_key 和 shared_secret 放在哪里(秘密本身不是 URL 的一部分)。
有人可以指导我为需要使用需要时间戳的 md5 ed 签名签署每个请求的服务设置 JMeter 测试吗?
您可以使用 "Beanshell" 测试元素之一,即 Beanshell PreProcessor 以便在请求之前生成正确的签名值。
- 将 Beanshell 预处理器添加为 HTTP 请求的子项,该请求执行 API 调用
将以下代码放入 PreProcessor 的 "Script" 区域(它基本上相当于您的 Ruby 脚本的 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);
在需要时将生成的签名值引用为 ${sig}
,因为它已存储在 JMeter Variable 中。
演示:
参考文献:
对于个人调用,我有一个类似 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/requests/keywords 列表的文件,我需要用它来破坏服务器,但那些是 – 静态 URLs。现在我需要测试一个服务,它要求每个请求都按照上述方式进行签名,我不能只使用一个列表。
我知道 JMeter 中有一个 md5 函数。但是我把 api_key 和 shared_secret 放在哪里(秘密本身不是 URL 的一部分)。
有人可以指导我为需要使用需要时间戳的 md5 ed 签名签署每个请求的服务设置 JMeter 测试吗?
您可以使用 "Beanshell" 测试元素之一,即 Beanshell PreProcessor 以便在请求之前生成正确的签名值。
- 将 Beanshell 预处理器添加为 HTTP 请求的子项,该请求执行 API 调用
将以下代码放入 PreProcessor 的 "Script" 区域(它基本上相当于您的 Ruby 脚本的 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);
在需要时将生成的签名值引用为
${sig}
,因为它已存储在 JMeter Variable 中。
演示:
参考文献: