1. 程式人生 > >Jmeter---後置處理器 BeanShell PostProcessor 獲取JDBC結果(多行)並以列表傳入另一個請求

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

num proc 下一個 deb 技術分享 array 轉換成 script bug

之前用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 classorg.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 classorg.apache.logging.slf4j.Log4jLogger

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