Jmeter---后置處理器 BeanShell PostProcessor 獲取JDBC結果(多行)並以列表傳入另一個請求


 

 

之前用python+locust對腳本生成商品編碼, 商品上架,購買商品進行編寫腳本和壓測;

開始是打算用Jmeter,后來遇到問題在 Jmeter如何讀取JDBC多行並組成列表,作為下一個請求 一直卡在這里,今天終於突破 記錄一下:

多方百度沒有結果,最終經過過以為朋友指導,可以達成python腳本的效果;

總結:

雖然locust 沒有向jmeter, LR等壓測工具圖表豐富,監聽服務器情況等需要借助其他工作完成,在腳本靈活度上大大增加工作的效率;

 

第一步:

添加JDBC請求:詳細參考另外一個博文

1.1添加mysql 鏈接驅動 \mysql-connector-java-5.1.47.jar

   

 

在線程組 增加 JDBC Connection Configuration:

在線程組 增加 JDBC Request:

 

 添加debug Sample和查看結果樹,運行腳本,查debug sample運行情況,如下:

在對於JDBC請求結果,發現同一個版本 也會出現不一樣的情況,朋友結果是有些是有這個返回值gId_matchNr,而我的是沒有

 

重點:

第二步:

思路是:通過BeanShell PostProcessor拿到JDBC查詢結果,組合成一個列表,作為參數傳入下一個請求;

vars.put() 接收是字符串,不接受其他類型

列表因此需要用:varObject() 

引用參數直接通過${goodId}

5行:獲取JDBC查詢結果的“gId_#”的結果 即JDBC查詢結果的總數,用於便利結果集

6行:轉換成int類型

7行:通過log,可以在debug模式查過結果;

8行:創建一個列表,用於查詢結果存儲;

10行:遍歷JDBC結果

11行:因為JDBC查詢結果是:gId_1 代表第一個值,gId_2 代表第二個值,如此類推

12行:通過vars.get() 拿到每個值,“\"” 對冒號進行轉義

14行:把拿到的每個商品號的值加入到列表里

16行:通過vars.putObject(“goodId”, glist) 賦予到新的變量

 

通過debug sample 查看到列表方式打印

 

 

最后的最后:

 

在上面腳本最后添加“log.info(glist)” 這行代碼 出現下面報錯信息,不知道怎么處理 有哪位朋友有解決方法嗎?知道的大神 煩請留個言,謝謝

 

2019-05-16 19:10:35,122 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval    Sourced file: inline evaluation of: ``  String tmp_id = vars.get("gId_#"); int num = Integer.parseInt(tmp_id); log.inf . . . '' : Error in method invocation: Method info( java.util.ArrayList ) not found in class'org.apache.logging.slf4j.Log4jLogger'
2019-05-16 19:10:35,122 WARN o.a.j.e.BeanShellPostProcessor: Problem in BeanShell script: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    Sourced file: inline evaluation of: ``  String tmp_id = vars.get("gId_#"); int num = Integer.parseInt(tmp_id); log.inf . . . '' : Error in method invocation: Method info( java.util.ArrayList ) not found in class'org.apache.logging.slf4j.Log4jLogger'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM