簡體   English   中英

我應該如何將Java代碼隱藏到Jmeter BeanShell Sampler中

[英]How should I covert my Java code into Jmeter BeanShell Sampler

我有一小段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);

有人可以幫助我們糾正代碼段中的錯誤嗎? 謝謝

首先,確保提供Service名稱空間的.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

您還可以考慮將JSR223 Samplergroovy語言切換為

  • 它與Java 100%兼容(包括泛型,打開字符串,嘗試資源等)。
  • 它實現了Compilable接口,從而提高了性能

請參見Beanshell,JSR223和Java JMeter腳本:您一直在等待的性能下降! 本文提供了更詳細的說明,有關安裝Groovy腳本引擎和腳本最佳實踐的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM