2015-12-24 101 views
1

我有一小段Java代碼,我必須將它合併到Jmeter中才能調用包含OAuth認證的特定Jar文件。我應該如何將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);    
} 

豆殼樣的代碼如下

我們嘗試了這種代碼,但它無法正常工作。

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類路徑(通常是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();指令 - 你會看到在標準輸出
  • 詳細的調試信息,如果你換你的代碼爲「嘗試」塊,並設置「捕捉」塊這樣的:

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

    你會看到堆棧跟蹤中jmeter.log文件

你也可以考慮改用JSR223 Samplergroovy語言

  • 它是100%的Java兼容(包括仿製藥,交換機上的琴絃,嘗試與 - 資源等)
  • 它實現Compilable接口造成更好的性能

請參閱Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!文章的更詳細的解釋,安裝groovy腳本引擎和腳本最佳實踐的指示。

+0

感謝Dmitri的代碼片段,我試過上面的代碼,但我沒有得到我使用eclipse得到的標題值。我檢查了所有Jar文件,我給了我的java代碼,在日食中工作正常。如果我放置$ {}符號,那麼只有我能夠將值傳遞給我的腳本。否則它只能看到'Appkey'或'Email'在我們發送的請求中得到更新,而不是我通過.csv文件傳遞的值。我現在正在用JSR223採樣器嘗試它,讓我在此之後更新你。 – Lucky

+0

我試圖使用「嘗試」塊並設置「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。 File:Script7.groovy @ line 3,column 1. import oauth.OAuth; ] – Lucky