【问题标题】:How should I covert my Java code into Jmeter BeanShell Sampler我应该如何将我的 Java 代码转换为 Jmeter BeanShell 采样器
【发布时间】:2015-12-24 05:46:16
【问题描述】:

我有一小段 Java 代码,我必须将其合并到 Jmeter 中才能调用包含 OAuth 身份验证的特定 Jar 文件。

Java Code:-
package Name1;
import Service;
public class OAuth {    
    public static void main(String[] args) {        
    String requestPayload ="";
    OAuth service = new OAuth("${Key1}", "${Key2}")
    .setRequestTokenURL("${URL1}")
    .setAccessTokenURL("${URL2}")
    .setAccessResourceURL("${URL3}")
    .setRequestorId("${Email}")
    .setScope("${Status}");     
    String[] authenticatedAccessToken = service.getAuthenticatedAccessToken();      
    String resourceResponse = service.accessResource(requestPayload, authenticatedAccessToken);     
    System.out.println(resourceResponse);               
}

Bean Shell Sampler 代码如下

我们尝试了这段代码,但它不起作用。

import Service;
key = vars.getObject("${AppKey}");
secret = vars.getObject("${SecretKey}");
Email = vars.getObject("${Email}");
Scope = vars.getObject("${Scope}");
requestPayload =vars.getObject("");

OAuth service = new OAuth(key, secret);
service.setRequestTokenURL("${URL1}");
service.setAccessTokenURL("${URL2}");
service.setAccessResourceURL("${URL3}}");
service.setRequestorId(${Email});
service.setScope(${Scope});
authenticatedAccessToken = service.getAuthenticatedAccessToken();
resourceResponse = service.accessResource(requestPayload, authenticatedAccessToken);
SampleResult.setResponseData(resourceResponse);

有人可以帮助我们纠正这段代码中的问题吗?谢谢

【问题讨论】:

    标签: java jmeter jmeter-plugins beanshell


    【解决方案1】:

    首先确保提供服务命名空间的 .jar 文件存在于 JMeter 类路径中(通常是 JMeter 安装的 /lib 文件夹),然后重新启动 JMeter 以获取它们。

    尝试以下方法:

    import Service;
    key = vars.getObject("AppKey");
    secret = vars.getObject("SecretKey");
    Email = vars.getObject("Email");
    Scope = vars.getObject("Scope");
    requestPayload =vars.getObject("");
    
    OAuth service = new OAuth(key, secret);
    service.setRequestTokenURL(vars.get("URL1"));
    service.setAccessTokenURL(vars.get("URL2"));
    service.setAccessResourceURL(vars.get("URL3");
    service.setRequestorId(Email);
    service.setScope(Scope);
    authenticatedAccessToken = service.getAuthenticatedAccessToken();
    resourceResponse = service.accessResource(requestPayload, authenticatedAccessToken);
    SampleResult.setResponseData(resourceResponse);
    
    • 当您使用vars.get()vars.getObject() 时,您不需要用${} 包围变量名
    • 当您引用之前定义的变量(如 Email)时,您也不需要这些数字括号

    调试 Beanshell 脚本的一些小技巧:

    • 如果您在脚本的最开始添加 debug(); 指令 - 您将在标准输出中看到详细的调试信息
    • 如果您将代码包装到“try”块中并设置“catch”块,例如:

      catch (Throwable ex) {
           log.error("Somewhing wrong: " , ex);
      }
      

      您将在 jmeter.log 文件中看到堆栈跟踪

    您也可以考虑切换到JSR223 Samplergroovy 语言为

    • 它与 Java 100% 兼容(包括泛型、打开字符串、try-with-resources 等)
    • 它实现了Compilable 接口,从而提高了性能

    请参阅Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! 文章以获得更详细的解释、有关安装 groovy 脚本引擎和脚本最佳实践的说明。

    【讨论】:

    • 感谢 Dmitri 提供的一段代码,我尝试了上面的代码,但没有得到我应该使用 eclipse 获得的标头值。我检查了我提供给我的 java 代码的所有 Jar 文件,这些文件在 Eclipse 中运行良好。如果我放 ${} 符号,那么只有我能够将值传递给我的脚本。否则我只能看到“Appkey”或“Email”在我们发送的请求中得到更新,而不是我通过 .csv 文件传递​​的它们的值。我现在正在尝试使用 JSR223 采样器,之后让我更新您。
    • 我尝试使用“try”块并将“catch”设置为但我可以看到以下错误 [2015/12/31 10:43:30 错误 - jmeter.protocol.java.sampler .JSR223Sampler:JSR223 脚本 javax.script.ScriptException 中的问题:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:Script7.groovy:3:未知类型:IMPORT 行:3 列:1。文件:Script7.groovy @第 3 行,第 1 列。导入 oauth.OAuth; ]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多