1
votes

I have small piece of Java code, which i have to incorporate into Jmeter to call a particular Jar file that contains OAuth Authentication.

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 code is as follows

We tried this code, but it is not working.

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

Can some one help us in correcting us as what went wrong in the piece of code. Thanks

1

1 Answers

0
votes

First of all make sure that .jar file(s) providing Service namespace live in JMeter classpath (usually /lib folder of your JMeter installation) and you restarted JMeter to pick them up.

Try the following:

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);
  • when you use vars.get() or vars.getObject() you don't need to surround variable name with ${}
  • when you refer previously defined variable (like Email) you also don't need these figure brackets

Few tips on debugging Beanshell script:

  • if you add debug(); directive at the very beginning of your script - you'll see detailed debugging information in stdout
  • if you wrap your code into "try" block and set "catch" block like:

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

    you'll see the stacktrace in jmeter.log file

You can also consider switching to JSR223 Sampler and groovy language as

  • it is 100% Java compatible (including generics, switch on strings, try-with-resources, etc.)
  • it implements Compilable interface resulting in better performance

See Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! article for more detailed explanation, instructions on installing groovy scripting engine and scripting best practices.