我正在使用Jmeter加载测试API。请求的Header有一个身份验证请求,需要我使用url + Nonce + Unix时间戳Base64和SHA256带有密钥的结果值。 以上内容需要在头文件中与Nonce和timestamp一起传递。
对于上述场景,我应该创建自定义函数还是使用任何预处理器?
答案 0 :(得分:1)
您可以通过Beanshell PreProcessor执行以下操作:
将以下代码放入PreProcessor的“脚本”区域:
import org.apache.commons.httpclient.auth.DigestScheme; // necessary imports
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.jmeter.protocol.http.control.Header;
String url = sampler.getUrl().toString(); // get URL
String nonce = DigestScheme.createCnonce(); // get nonce
long timestamp = System.currentTimeMillis() / 1000L;
String combined = url + nonce + timestamp; // put everything together
byte[] base64 = Base64.encodeBase64(combined.getBytes()); // encode as Base64
String headerValue = DigestUtils.sha256Hex(base64); // encode SHA256
sampler.getHeaderManager().add(new Header("headerName", headerValue)); // add generated header to request
sampler
这里是父HTTP请求采样器类的简写引用,我相信它是HTTPSamplerProxy所以它的方法用于获取URL并添加生成的头值。 有关在JMeter测试中使用Beanshell脚本的详细信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南。
答案 1 :(得分:0)
最好的办法是在JavaScript模式下使用BSF预处理器来完成客户端通常会做的所有事情。您必须使用客户端JS并将其修改为不使用FORM数据。
您可以在JS中构建完整的标头,就像客户端一样。 BSF预处理器允许您访问jmeter运行时变量,因此您将创建一个新的存储SHA256哈希值,并在需要授权的样本的HTTP标头管理器中使用它。
-Addled
答案 2 :(得分:0)
下载了eclipse。 写了一个自定义的jmeter包。 从eclipse到jmeter lib / ext文件夹将其导出为.jar。 在beanshell sampler中调用包函数
感谢您的回答
答案 3 :(得分:0)
@ dmitrit的答案很有帮助,但我需要对代码进行一些调整才能使其正常工作。这是我做的:
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
String apiKey = vars.get("ApiKey");
String apiSecret = vars.get("ApiSecret");
long timestamp = System.currentTimeMillis() / 1000L;
String combined = apiKey + apiSecret + timestamp;
String generatedSignature = DigestUtils.sha256Hex(combined);
vars.put("GeneratedSignature", generatedSignature);
请注意主要区别是:
DigestUtils.sha256Hex
需要String
而不是字节数组。首先将字节转换为字节会搞乱哈希,我认为是由于填充。vars
,以便以后以常规方式(${GeneratedSignature}
)在Jmeter中使用。ApiKey
和ApiSecret
在Jmeter用户定义变量元素的其他位置定义。有了这个,我就可以根据他们在here发布的身份验证说明与Mashery进行以下工作。