[Tutorial] JMeter - Process JSON response with BeanShell Processor

บ่อยครั้งที่ request body นั้นต้องการเอาค่าจาก response ของอีก service หนึ่ง.
JMeter ได้เตรียมเครื่องมือเอาไว้ extract data จาก response เอาไว้ให้หลายแบบด้วยกัน. แต่ทว่าในกรณีที่ response นั้นมีโครงสร้างซับซ้อน เช่น JSON หรือ XML, เราอาจจะต้องเขียนโปรแกรมเพื่อประมวลผล response ด้วยตัวเอง.
ในบทความนี้จะแสดงตัวอย่างการประมวลผล response ที่เป็น JSON โดยใช้ BeanShell Processor.

เตรียม Library เพื่อประมวลผล JSON

  1. เริ่มต้นด้วยการไปโหลด library สำหรับจัดการ JSON มาก่อนนะฮะ. โดยส่วนตัวผมชอบใช้ json-simple, สามารถ download JAR ได้จาก https://code.google.com/p/json-simple/ มองหาคำว่า Downloads จากเมนูซ้ายมือ ให้เลือกโหลดไฟล์ .jar นะฮะ. ยกตัวอย่างเช่น json-simple-1.1.1.jar.
  2. จากนั้นให้ 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
    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
    1. สร้าง 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
    2. คลิกขวาที่ HTTP Sampler ที่เพิ่งสร้างขึ้นมา แล้วเลือก Add > Post Processors > BeanShell PostProcessor
    3.  Copy เอา script ข้างล่างไปใส่ใน BeanShell PostProcessor. ดู Figure 3 ประกอบ.
      Figure 3 การสร้าง BeanShell PostProcessor
    4. จากนั้นให้เปิด Log Viewer ขึ้นมาโดยไปกดที่เมนู Options > Log Viewer. พอกดแล้วจะมีกรอบยื่นออกมาทางด้านล่าง. 
    5. กด Start teste ได้เลย 
    ถ้าไม่มีอะไรผิดพลาด น่าจะได้ผลลัพธ์ดัง Figure 4 นะฮะ. จะเห็นว่าสีแดงๆที่วงไว้ ตรงกับผลที่ได้ดัง Figure 2 เลย หุหุ.
    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

    ความคิดเห็น

    1. ไม่ระบุชื่อ20 กันยายน 2561 18:28

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

      ตอบลบ
    2. ไม่ระบุชื่อ20 กันยายน 2561 18:30

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

      ตอบลบ
    3. Truth99.com

      สมาชิกใหม่ รับชิปฟรี 1,000 ทำเครดิตได้ครบ 10,000 (ภายใน 3 วัน) พิชิตรางวัล 1,000 บาท

      สมัครเลย

      ตอบลบ
    4. ไม่ระบุชื่อ5 ตุลาคม 2561 12:44

      https://truthbet.com/af/SkdvYgRE7
      แจกฟรี2,000 เพียงสมัคร สมาชิกกับเรา
      หรือแนะนำเพื่อนมาเป็นสมาชิกมีค่าคอมมิชชั่นพร้อมรางวัลอีกมากมาย

      ตอบลบ

    แสดงความคิดเห็น

    โพสต์ยอดนิยมจากบล็อกนี้

    ซ่อมกระจกมองข้าง : civic fd : diy ซ่อมมอเตอร์พับกระจกรถยนต์

    [Tutorial] Performance test web application that needs credentials using JMeter (Windows platform)

    Deadend in Venice