我正在使用Jmeter对一个API进行负载测试。请求的头部有一个身份验证请求,需要我使用Base64 url+Nonce+Unix时间戳和SHA256结果值以及密钥。上面的内容需要在header中与Nonce和timestamp沿着传递。对于上面的场景,我应该创建一个自定义函数还是使用任何预处理器?
mrwjdhj31#
你可以通过Beanshell预处理器来完成,如下所示:1.添加HTTP头管理器作为HTTP请求采样器的子项1.以同样的方式添加上述Beanshell预处理器
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
有关在JMeter测试中使用Beanshell脚本的更多信息,请参见How to use BeanShell: JMeter's favorite built-in component指南。
t1qtbnec2#
最好的办法是在JavaScript模式下使用BSF预处理器来完成客户端通常会做的所有事情。您必须使用客户端JS并修改它以在没有FORM数据的情况下工作。您可以像客户端一样在JS中构建整个头部。BSF Pre-Processor允许您访问jmeter运行时变量,因此您将创建一个新变量来存储SHA 256哈希值,并在需要授权的示例的HTTP Header Manager中使用该值。
jk9hmnmh3#
下载Eclipse编写了一个自定义的jmeter包。将其作为.jar文件从eclipse导出到jmeterlib/ext文件夹。调用了beanshell采样器中的包函数谢谢你的回答
zc0qhyus4#
@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}
ApiKey
ApiSecret
有了这个,我能够使以下工作与Mashery按照他们的身份验证说明张贴here .
4条答案
按热度按时间mrwjdhj31#
你可以通过Beanshell预处理器来完成,如下所示:
1.添加HTTP头管理器作为HTTP请求采样器的子项
1.以同样的方式添加上述Beanshell预处理器
字符串
sampler
这里是父HTTP请求采样器类的简写引用,我相信是HTTPSamplerProxy,因此它的方法用于获取URL并添加生成的头值。有关在JMeter测试中使用Beanshell脚本的更多信息,请参见How to use BeanShell: JMeter's favorite built-in component指南。
t1qtbnec2#
最好的办法是在JavaScript模式下使用BSF预处理器来完成客户端通常会做的所有事情。您必须使用客户端JS并修改它以在没有FORM数据的情况下工作。
您可以像客户端一样在JS中构建整个头部。BSF Pre-Processor允许您访问jmeter运行时变量,因此您将创建一个新变量来存储SHA 256哈希值,并在需要授权的示例的HTTP Header Manager中使用该值。
jk9hmnmh3#
下载Eclipse编写了一个自定义的jmeter包。将其作为.jar文件从eclipse导出到jmeterlib/ext文件夹。调用了beanshell采样器中的包函数
谢谢你的回答
zc0qhyus4#
@dmitrit的回答很有帮助,但我需要对代码做一些调整才能使其工作。我是这样做的:
字符串
请注意,主要的区别在于:
DigestUtils.sha256Hex
采用String
而不是字节数组。首先转换为字节搞砸了哈希,我认为是由于填充。vars
中,这样以后就可以在Jmeter中以通常的方式使用它(${GeneratedSignature}
)。ApiKey
和ApiSecret
在Jmeter用户定义的变量元素中的其他位置定义。有了这个,我能够使以下工作与Mashery按照他们的身份验证说明张贴here .