[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) ถอนได้ตามยอดคงเหลือ