[第八屆IT邦幫忙鐵人賽] JMeter BeanShell

前言

當您需要進行提供或介接 WebAPI 的工作,在撰寫程式前我們會透過 Postman 進行測試,進一步了解服務是否正常與確認回傳的內容;或透過 swagger 讓工程師了解介接過程中使用的參數與回傳結果,方便進行介接與測試工作。雖然這些工作都可以自行撰寫程式進行測試,但過程相當耗費時費力,這些套件透過腳本可以進行複雜的介接功能,節省我們另行撰寫程式的時間。壓力測試也不例外,也能透過腳本撰寫的方式,進行複雜的測試。這一篇,我們將介紹如何在JMeter 中使用 BeanShell scripts 進行前處理與後處理,若有錯誤或建議,請各位先進不吝提出,謝謝。


 

介紹

BeanShell sampler 與 JMeterVariables 使用

Step 1.首先我們先新增一個執行序群組
http://ithelp.ithome.com.tw/upload/images/20161222/20091494arVRSftYuD.png

Step 2.點選新增 -> 取樣 -> Bean Shell 取樣
http://ithelp.ithome.com.tw/upload/images/20161222/200914946T01bPuycS.png

Step 3.點選新增 -> 取樣 -> Debug Sample
http://ithelp.ithome.com.tw/upload/images/20161222/200914941qtzvx2Kfr.png

Step 4.為了顯示結果,我們增加檢視結果樹
http://ithelp.ithome.com.tw/upload/images/20161222/200914949xgM0xmY3s.png

Step 5.我們撰寫下列腳本
http://ithelp.ithome.com.tw/upload/images/20161222/20091494N6JT00o3DY.png
vars 是 JMeter variables,可以使用於 BeanShell scripts 內進行參數傳遞,我們可以設定變數內容後提供給下一個 Http Request 使用(前處理),或者接收到 Response 後儲存起來進行運用(後處理)。

vars.put("testVarialbe","123456");
String printString = vars.get("testVariable")
System.out.prinln(printString)

Step 6. 點選執行後,即可看到command line畫面印出結果。
http://ithelp.ithome.com.tw/upload/images/20161222/200914944TpdtV85Za.png

而我們在JMeter variables放入的參數,可以使用${var}在 HTTP Request 內使用,如下面兩張圖所示:
http://ithelp.ithome.com.tw/upload/images/20161222/20091494a4i8FMIM1y.png

http://ithelp.ithome.com.tw/upload/images/20161222/20091494fjLy653E3Z.png

BeanShell PreProcessor and PostProcessor

這裡簡單介紹 BeanShell PreProcessor and PostProcessor 應用案例,透過前置與後製處理器,我們能做更多WebAPI測試案例。

Step 1.點選新增 -> 前置處理器 -> BeanShell PreProcessor
http://ithelp.ithome.com.tw/upload/images/20161222/20091494KqSZcPWIuA.png

Step 2.在這邊舉使用前置處理器案例:我們可以引入套件,在request發出之前額外加入 header
http://ithelp.ithome.com.tw/upload/images/20161222/20091494ruqcviUlqo.png

import org.apache.jmeter.protocol.http.control.Header;

sampler.getHeaderManager().add(new Header("Content-Type","application/x-www-form-urlencoded"));

Step 3.點選新增 -> 後製處理器 -> BeanShell PostProcessor
http://ithelp.ithome.com.tw/upload/images/20161222/20091494DsFDLe8tIE.png

Step 4.在這邊舉使用後製處理器案例:我們可以接驗證後的token存起來,當作下次呼叫API驗證用(需要引入com.eclipsesource.json.*套件)
http://ithelp.ithome.com.tw/upload/images/20161222/20091494dljszfVBg0.png

import com.eclipsesource.json.*;

String response = prev.getResponseDataAsString(); 
JsonObject data = JsonObject.readFrom(response);
vars.put("access_token",data.get("access_token").asString());

上一篇:Jmeter 基本介紹
下一篇:JMeter 與 TeamCity 整合
返回目錄


參考資料

註:本系列文章將於2016 IT邦幫忙鐵人賽進行同時,一併發佈於個人blogger與dotblog。