2015-12-24 4 views
1

У меня есть небольшой кусок кода Java, который я должен включить в Jmeter для вызова конкретного Jar-файла, который содержит аутентификацию OAuth.Как я должен скрывать свой Java-код в Jmeter BeanShell Sampler

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

Может кто-то помочь нам в исправлении нас, как то, что пошло не так в куске кода. Спасибо

ответ

0

Прежде всего убедитесь, что .jar-файл (ы), предоставляющий пространство имен службы, находится в JMeter classpath (обычно/lib-папке вашей установки JMeter), и вы перезапустили 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(); директивы в самом начале вашего скрипта - вы увидите подробную информацию об отладке в стандартном выводе
  • если вы обернуть свой код в «попробовать» блок и установить «поймать» блок, как:

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

    вы увидите StackTrace в jmeter.log файл

Вы можете также рассмотреть вопрос о переходе на JSR223 Sampler и groovy языка как

  • это 100% Java совместимый (включая генерики, переключитесь на строки, попробуйте-с ресурсами и т.д.)
  • он реализует интерфейс Compilable в результате более высокая производительность

См. статью Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!, чтобы получить более подробное объяснение, инструкции по установке строгих сценариев и примеры использования сценариев.

+0

Спасибо Dmitri за кусок кода, я попробовал вышеуказанный код, но я не получаю значение заголовка, которое я должен был использовать с помощью eclipse. Я проверил все файлы Jar, которые я дал моему java-коду, который отлично работает в eclipse. Если я поставлю символ $ {}, то только я могу передать значение моему сценарию. в противном случае я могу видеть, что в запросе, который мы отправляем, обновляется только «Appkey» или «Email», а не их значения, которые я передаю через CSV-файл. Я пытаюсь это сделать с помощью JSR223 sampler, позвольте мне обновить вас после этого. – Lucky

+0

Я попытался использовать блок «try» и установить «catch», но я вижу следующую ошибку [2015/12/31 10:43:30 ERROR - jmeter.protocol.java.sampler.JSR223Sampler: проблема в скрипте JSR223 javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: сбой при запуске: Script7.groovy: 3: Неизвестный тип: IMPORT at line: 3 column: 1. Файл: Script7.groovy @ строка 3, столбец 1. import oauth.OAuth; ] – Lucky