如何将Java代码转换为Jmeter BeanShell采样器

如何将Java代码转换为Jmeter BeanShell采样器,java,jmeter,jmeter-plugins,beanshell,Java,Jmeter,Jmeter Plugins,Beanshell,我有一小段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}", "${Key

我有一小段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采样器代码如下

我们尝试了此代码,但它不起作用

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);

有人能帮我们纠正代码中的错误吗。谢谢

首先确保提供服务名称空间的.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()指令在脚本的最开始-您将在stdout中看到详细的调试信息
  • 如果将代码包装成“try”块并设置“catch”块,如:

    catch (Throwable ex) {
         log.error("Somewhing wrong: " , ex);
    }
    
    您将在jmeter.log文件中看到stacktrace

你也可以考虑切换到语言和

  • 它是100%Java兼容的(包括泛型、打开字符串、尝试使用资源等)
  • 它实现了接口,从而提高了性能

有关更详细的说明、有关安装groovy脚本引擎和脚本编写最佳实践的说明,请参阅本文

首先,确保提供服务名称空间的.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()指令在脚本的最开始-您将在stdout中看到详细的调试信息
  • 如果将代码包装成“try”块并设置“catch”块,如:

    catch (Throwable ex) {
         log.error("Somewhing wrong: " , ex);
    }
    
    您将在jmeter.log文件中看到stacktrace

你也可以考虑切换到语言和

  • 它是100%Java兼容的(包括泛型、打开字符串、尝试使用资源等)
  • 它实现了接口,从而提高了性能

有关更详细的说明、有关安装groovy脚本引擎和脚本编写最佳实践的说明,请参阅本文

感谢Dmitri提供的这段代码,我尝试了上面的代码,但是没有得到使用eclipse应该得到的头值。我检查了提供给java代码的所有Jar文件,这些java代码在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.multiplecompilementerorException:启动失败:Script7.groovy:3:未知类型:第3行第1列导入。文件:Script7.groovy@3行第1列导入oauth.oauth;]感谢Dmitri提供的这段代码,我尝试了上面的代码,但是我没有得到使用eclipse应该得到的头值。我检查了我提供给java代码的所有Jar文件,这些Jar文件在eclipse中运行良好。如果我将${}symbol然后只有我才能将值传递给我的脚本。否则,我只能看到我们正在发送的请求中更新的是“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.multiplecompilementerorException:启动失败:Script7.groovy:3:未知类型:第3行第1列导入。文件:Script7.groovy@3行第1列导入oauth.oauth;]