Coding Gun

ทำ Performance Testing ด้วย JMeter

JMeter(Apache JMeter) คือเครื่องมือที่ใช้ทำ Load Test หรือ Performance Test ที่ได้รับความนิยมมากที่สุด สิ่งที่เป็นจุดแข็งของ jMeter คือการสร้างไฟล์ .jmx ผ่านทาง GUI ซึ่งใช้งานง่าย ไม่ต้องเขียนโปรแกรมใดๆ สามารถใช้ทดสอบได้ทั้ง Web Application, Web Services ทั้ง REST และ SOAP รวมทั้งยังสามารถใช้ทดสอบ Services อื่นๆที่ไม่ใช่ Web เช่น Database และ FTP ได้อีกด้วย

ในการทำงานกับ JMeter คุณจะต้องใช้ 2 ไฟล์นี้ในการทำงาน

  1. .jmx ไฟล์ XML ที่บอกวิธีการทดสอบ ทั้งจำนวน Users, รูปแบบของ Request และอื่นๆ
  2. .jtl ไฟล์ที่ใช้เก็บผลลัพธ์(Output) ของการทดสอบซึ่งสามารถนำไปแปลงเป็นผลลัพธ์ในรูปแบบอื่นๆต่อได้

นอกจาก JMeter แล้วเรายังมี Load Testing Tools อีกหลายตัว ซึ่งคุณสามารถเข้าไปอ่านเพิ่มเติมได้ในบทความนี้


Performance Test คืออะไร?

Performance Testing คือการทดสอบประสิทธิภาพของระบบ เป็นการทดสอบคุณภาพของระบบ(Non-functional) รูปแบบหนึ่ง ซึ่งสามารถแบ่งการทดสอบออกเป็นการทดสอบรูปแบบต่างๆ ดังนี้

  1. Load Test คือการทดสอบว่าระบบสามารถรองรับการใช้งานจริงได้หรือไม่
  2. Stress Test คือการทดสอบที่ยิง Workload เข้าไปในปริมาณมากๆ เพื่อทดสอบว่าระบบรองรับ Load ได้สูงสุดเท่าไหร่
  3. Endurance Test คือการทดสอบที่ส่ง Workload เข้าไปในระบบ(เหมือนกับ load test) แต่จะ run script ค้างไว้นานๆ เพื่อทดสอบความทนทาน(endurace) ของระบบ
  4. Spike Testing คือการทดสอบโดยใช้ WorkLoad ที่มีขนาดใหญ่ ส่งเข้าไปทำงานในช่วงเวลาสั้นๆ ส่วนใหญ่จะมีการทดสอบแบบนี้ไว้เพื่อป้องกันปัญหา Distributed Denial of Service(DDoS)
  5. Scalability Testing คือการทดสอบการขยายตัว(Scale) ของระบบ เราจะทดสอบว่าเมื่อมี Workload เข้ามาในปริมาณมากๆ ระบบสามารถ Scale Up ขึ้นมาตามที่เราต้องการได้หรือไม่

ในบทความนี้เราจะเน้นที่การทำ Load Test เป็นหลัก

JMeter รองรับ Protocol อะไรบ้าง

JMeter สามารถนำไปทดสอบได้หลาย Protocol ยกตัวอย่างเช่น


การติดต้ัง JMeter

ก่อนจะเริ่มใช้งาน JMeter เราต้องทำการติดต้ัง JMeter ลงในเครื่องก่อน โดยเริ่มจาก

  1. ติดตั้ง Java (ต้องมี Java 8+) ใช้ JRE แทน JDK ได้แต่จะไม่สามารถ Record Https ได้
  2. Download JMeter ตามลิงค์นี้
  3. แตก zip แล้วรัน
    • jmeter.bat สำหรับเครื่องที่เป็น Windows
    • jmeter สำหรับ macOS หรือ Linux

อ่านรายละเอียดของการติดตั้ง JMeter แบบละเอียดๆ ได้ที่บทความนี้

เริ่มต้นสร้าง Test Plan

Test Plan คือสิ่งที่อธิบายการทดสอบ ซึ่งเราต้องบอก JMeter ว่าจะทดสอบอะไร? ทดสอบยังไง? และทดสอบเมื่อไหร่?

นั่นคือ “แผนการทดสอบ” ที่รวมทุกอย่างเกี่ยวกับการทดสอบที่รวบรวมเก็บไว้ที่เดียว

โครงสร้างของ Test Plan

เมื่อสร้าง Test Plan ขึ้นมา จะประกอบด้วยองค์ประกอบต่างๆเหล่านี้

Test Plan
├── Thread Group
│   ├── Sampler (เช่น HTTP Request)
│   ├── Listener (ดูผลลัพธ์)
│   └── Config Element (ตั้งค่าพารามิเตอร์)

ซึ่งแต่ละส่วนประกอบทำหน้าที่ดังต่อไปนี้

1. Thread Group

ใช้สำหรับกำหนดจำนวนผู้ใช้งานต่อหน่วยเวลา เช่น ทดสอบการส่ง Request จาก 100 users ภายใน 10 วินาที

2. Samplers

กำหนดรูปแบบของ Request ที่เราต้องการส่ง เช่น HTTP Request, FTP Request

3. Config Elements

กำหนกค่า Configuration ต่างๆ เช่น Base URL, Header หรือ CSV data ซึ่งจะช่วยให้สามารถเปลี่ยนแปลงได้ง่ายในอนาคต

4. Assertions

ใช้ตรวจสอบผลลัพธ์ว่าถูกต้องหรือไม่ เช่น Response code ต้องเป็น 200

5. Listeners

ใช้สำหรับดูผลลัพธ์ของการทดสอบ เช่น View Results Tree หรือ Summary Report

6. Timers / Controllers / Pre/Post Processor

ใช้เพื่อเพิ่มความสามารถให้กับการทดสอบ เช่น


ตัวอย่างการทำ Load Test API

ในตัวอย่างนี้เราจะทำการทดสอบ API ซึ่งเป็น Public API ตาม URL นี้ https://jsonplaceholder.typicode.com/posts

ข้อควรระวัง การทำ Load Test อาจทำให้ระบบหยุดทำงาน(Denail of Services: DoS) ไม่ควรทำกับระบบที่ไม่ใช่ของเรา

การทำ ​Load Test กับ API มีขั้นตอนต่างๆ ดังนี้

  1. สร้าง Thread Group โดยคลิกขวาที่ Test Plan > Add > Threads (Users) > Thread Group
  2. ตั้งค่า Thread Group โดยการกำหนด
    • Number of Threads (users) เป็น 10 (จำนวน Thread เป็น 10)
    • Ramp-Up Period (in seconds) เป็น 5 (ใช้เวลา 5 วิ ในการเพิ่มครบ 10 users)
    • Loop Count: 1 (ให้ยิงแค่รอบเดียว)
  3. เพิ่ม HTTP Request โดยคลิกขวาที่ Thread Group > Add > Sampler > HTTP Request และกำหนดค่าต่างๆ ดังนี้
    • Name: Test JSON Placeholder
    • Server Name or IP: jsonplaceholder.typicode.com
    • Method: GET
    • Path: /posts
  4. เพิ่ม Listener: “View Results Tree” โดยคลิกขวาที่ Thread Group > Add > Listener > View Results Tree
  5. กดปุ่ม Start เพื่อรันเทส
  6. ดูผลลัพธ์ของการทดสอบได้ที่ Summary Report / Aggregate Report

ดูผลลัพธ์ของการทำ Load Test

หลังจากที่เราทำการทดสอบเรียบร้อยแล้วก็กลับมาดูผลลัพธ์ โดยจะมีค่าต่างๆ ดังนี้

ตัวอย่างผลลัพธ์จาก Summary Report

Label # Samples Avg Min Max Error % Throughput
/posts 10 120ms 90 160 0.00% 5.0/sec

ในการทดสอบกับ API จริงๆ

Phanupong Permpimol
Follow me