[Tutorial] JMeter - Process JSON response with BeanShell Processor
บ่อยครั้งที่ request body นั้นต้องการเอาค่าจาก response ของอีก service หนึ่ง.
เป็นอันเสร็จสิ้นการเตรียมการ ต่อไปให้เปิด JMeter ขึ้นมาเลยฮะ.
server: www.google.com.sg
path: /s?biw=1600&bih=809&sclient=psy-ab&q=json%20parser%20example&oq=&gs_l=&pbx=1&bav=on.2,or.r_qf.&bvm=bv.85970519,d.c2E&fp=a91f5977af3367b7&es_sm=0&pf=p&sugexp=msedr&gs_rn=61&gs_ri=psy-ab&pq=json%20parser%20example&cp=20&gs_id=1e&xhr=t&es_nrs=true&tch=1&ech=2&psi=XHTlVOPiIonmuQSD7oLIBg.1424323680476.3
โค้ดตัวอย่างนะฮะ. ที่ Highlight เอาไว้นั่นคือส่วนที่เรียกใช้ JSON Simple เพื่อ parse JSON string ที่เราเตรียมไว้.
ท่านผู้ชมสามารถ download ตัวอย่างได้จาก: https://drive.google.com/file/d/0B69Rt-ghTQqyMkFISDlLNHpuOE0/view?usp=sharing
JMeter ได้เตรียมเครื่องมือเอาไว้ extract data จาก response เอาไว้ให้หลายแบบด้วยกัน. แต่ทว่าในกรณีที่ response นั้นมีโครงสร้างซับซ้อน เช่น JSON หรือ XML, เราอาจจะต้องเขียนโปรแกรมเพื่อประมวลผล response ด้วยตัวเอง.
ในบทความนี้จะแสดงตัวอย่างการประมวลผล response ที่เป็น JSON โดยใช้ BeanShell Processor.
เตรียม Library เพื่อประมวลผล JSON
- เริ่มต้นด้วยการไปโหลด library สำหรับจัดการ JSON มาก่อนนะฮะ. โดยส่วนตัวผมชอบใช้ json-simple, สามารถ download JAR ได้จาก https://code.google.com/p/json-simple/ มองหาคำว่า Downloads จากเมนูซ้ายมือ ให้เลือกโหลดไฟล์ .jar นะฮะ. ยกตัวอย่างเช่น json-simple-1.1.1.jar.
- จากนั้นให้ copy json-simple-1.1.1.jar ไปวางใน folder lib ที่อยู่ภายใน folder ของ JMeter. เช่น \apache-jmeter-2.12\lib ดัง Figure 1.
![]() |
| Figure 1 Address ของ folder lib |
เป็นอันเสร็จสิ้นการเตรียมการ ต่อไปให้เปิด JMeter ขึ้นมาเลยฮะ.
การประมวลผล JSON
ในตัวอย่างนี้ บัวบานจะประมวลผล JSON ที่ได้จาก auto-suggest service ของ google ให้ชม. โดยจะใช้ keyword ว่า "json parser example"![]() |
| Figure 2 ตัวอย่าง auto-suggest ของ google |
path: /s?biw=1600&bih=809&sclient=psy-ab&q=json%20parser%20example&oq=&gs_l=&pbx=1&bav=on.2,or.r_qf.&bvm=bv.85970519,d.c2E&fp=a91f5977af3367b7&es_sm=0&pf=p&sugexp=msedr&gs_rn=61&gs_ri=psy-ab&pq=json%20parser%20example&cp=20&gs_id=1e&xhr=t&es_nrs=true&tch=1&ech=2&psi=XHTlVOPiIonmuQSD7oLIBg.1424323680476.3
- สร้าง HTTP Sampler
- ใส่ server เป็น www.google.com.sg
- ใส่ path เป็น /s?biw=1600&bih=809&sclient=psy-ab&q=json%20parser%20example&oq=&gs_l=&pbx=1&bav=on.2,or.r_qf.&bvm=bv.85970519,d.c2E&fp=a91f5977af3367b7&es_sm=0&pf=p&sugexp=msedr&gs_rn=61&gs_ri=psy-ab&pq=json%20parser%20example&cp=20&gs_id=1e&xhr=t&es_nrs=true&tch=1&ech=2&psi=XHTlVOPiIonmuQSD7oLIBg.1424323680476.3 - คลิกขวาที่ HTTP Sampler ที่เพิ่งสร้างขึ้นมา แล้วเลือก Add > Post Processors > BeanShell PostProcessor
- Copy เอา script ข้างล่างไปใส่ใน BeanShell PostProcessor. ดู Figure 3 ประกอบ.

Figure 3 การสร้าง BeanShell PostProcessor - จากนั้นให้เปิด Log Viewer ขึ้นมาโดยไปกดที่เมนู Options > Log Viewer. พอกดแล้วจะมีกรอบยื่นออกมาทางด้านล่าง.
- กด Start teste ได้เลย
![]() |
| Figure 4 ผลลัพธ์จากการทดสอบ |
โค้ดตัวอย่างนะฮะ. ที่ Highlight เอาไว้นั่นคือส่วนที่เรียกใช้ JSON Simple เพื่อ parse JSON string ที่เราเตรียมไว้.
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
try {
/////// Start prepare JSON string //////
// get response from last response message
String response = prev.getResponseDataAsString();
// Google returns a lot of JSON object in one response, each object is separated by /*""*/
// So we split response by /*""*/
response = response.substring(0,response.length()-6);
String[] res = response.split("/\\*\\\"\\\"\\*/");
// Walk through array of JSON object
for(int i=0; i < res.length; i++)
{
// Some nodes in JSON contains "[" and "]" which are invalid so we replace them
// Replace \" with "
// Replace "[ with [
// Replace ]" with ]
String tmpRes = res[i];
tmpRes = tmpRes.replace("\\\"","\"");
tmpRes = tmpRes.replace("\"[","[");
tmpRes = tmpRes.replace("]\"","]");
// Finally, JSON string is ready for us. Let's parse it
log.info(tmpRes);
JSONParser parser = new JSONParser();
Object obj = parser.parse(tmpRes);
JSONObject jsonObj = (JSONObject) obj;
// Auto-suggest results are in JSON node "d"
JSONArray dArr = (JSONArray) jsonObj.get("d");
JSONArray sugestArr = (JSONArray) dArr.get(1);
// Print each result to Log
for(int j=0; j < sugestArr.size();j++)
{
log.info(""+sugestArr.get(j));
}
}
}
catch(ParseException e) {
e.printStackTrace();
}
ท่านผู้ชมสามารถ download ตัวอย่างได้จาก: https://drive.google.com/file/d/0B69Rt-ghTQqyMkFISDlLNHpuOE0/view?usp=sharing



https://truthbet.com/af/B1QfJKDQQ
ตอบลบเลือกรับได้ทุกโปรโมชั่น!!!
โปรโมชั่น 20 % ฝากเงินสูงสุด 10,000 บาท รับเพิ่ม 20% (2,000) ทำเทิร์น 10 เท่า (120,000) ถอนได้ตามยอดคงเหลือ
โปรโมชั่น 50 % ฝากเงินสูงสุด 10,000 บาท รับเพิ่ม 50% (5,000) ทำเทิร์น 20 เท่า (300,000) ถอนได้ตามยอดคงเหลือ
โปรโมชั่น 100 % ฝากเงินสูงสุด 10,000 บาท รับเพิ่ม 100% (10,000) ทำเทิร์น 50 เท่า (1,000,000) ถอนได้ตามยอดคงเหลือ
https://truthbet.com/af/B1QfJKDQQ
ตอบลบเลือกรับได้ทุกโปรโมชั่น!!!
โปรโมชั่น 20 % ฝากเงินสูงสุด 10,000 บาท รับเพิ่ม 20% (2,000) ทำเทิร์น 10 เท่า (120,000) ถอนได้ตามยอดคงเหลือ
โปรโมชั่น 50 % ฝากเงินสูงสุด 10,000 บาท รับเพิ่ม 50% (5,000) ทำเทิร์น 20 เท่า (300,000) ถอนได้ตามยอดคงเหลือ
โปรโมชั่น 100 % ฝากเงินสูงสุด 10,000 บาท รับเพิ่ม 100% (10,000) ทำเทิร์น 50 เท่า (1,000,000) ถอนได้ตามยอดคงเหลือ