การใช้ jmeter สำหรับทดสอบ Concurrent user access ของ Application ก่อนนำขึ้น production server ของมหาวิทยาลัย
JMeter (https://jmeter.apache.org) เป็นซอฟต์แวร์โอเพนซอร์ส (Open source) ที่ออกแบบมาเพื่อทดสอบประสิทธิภาพและฟังก์ชันการทำงานของแอปพลิเคชันและบริการต่าง ๆ นิยมนำมาใช้สำหรับการทดสอบโหลด (Load Testing) ของเว็บแอปพลิเคชัน
สิ่งที่ JMeter สามารถทำได้ มีดังนี้:
- Load Testing: JMeter สามารถจำลองผู้ใช้หลายคนเข้าถึงระบบพร้อมกัน (Concurrent user access) เพื่อหาจุดที่เป็นคอขวดของระบบฯ ภายใต้โหลดที่ User เข้ามาใช้ระบบพร้อม ๆ กันเป็นจำนวนมาก เมื่อหาจุดที่เป็นคอขวดของระบบแล้วหาวิธีแก้ปัญหา หรือเพื่อการ Scaling ให้ระบบสามารถรองรับผู้ใช้งานตามจำนวนที่ต้องการได้ ซึ่งจะช่วยให้มั่นใจว่าแอปพลิเคชันสามารถรองรับสถานการณ์การใช้งานจริงได้.
- Performance Measurement: JMeter สามารถวัดค่าเมตริกประสิทธิภาพต่าง ๆ เช่น เวลาตอบสนอง ปริมาณงาน (Throughput) และอัตราข้อผิดพลาด ข้อมูลนี้ช่วยในการหาจุดที่ต้องปรับปรุงและเพิ่มประสิทธิภาพของระบบ/แอปพลิเคชันด้วย
- Functional Testing: แม้ว่า JMeter จะเป็นเครื่องมือทดสอบประสิทธิภาพเป็นหลัก แต่ก็สามารถใช้สำหรับการทดสอบฟังก์ชันการทำงานเบื้องต้น เพื่อให้แน่ใจว่าแอปพลิเคชันทำงานตามที่คาดหวัง/ตามข้อกำหนด
ข้อดีของ JMeter:
- โอเพนซอร์ส: ด้วยความเป็นฟรีและโอเพนซอร์ส ทำให้ JMeter เข้าถึงได้สำหรับทุกคน
- ใช้งานง่าย: JMeter มีส่วนติดต่อผู้ใช้แบบกราฟิก (GUI) ช่วยให้การสร้างและเรียกใช้การทดสอบง่ายขึ้น
- ไม่จำกัดแพลตฟอร์ม: เป็นแอปพลิเคชัน Java ดังนั้น JMeter จึงทำงานบน Windows, macOS, Linux และระบบปฏิบัติการอื่น ๆ
- รองรับหลากหลายโปรโตคอล: JMeter รองรับโปรโตคอลต่างๆ เช่น HTTP, HTTPS, FTP, Web service SOAP/REST, Database และอื่น ๆ
การใช้ JMeter สำหรับทดสอบ Concurrent user access ของ Application ก่อนนำขึ้น production server ของมหาวิทยาลัย เป็นการนำ JMeter มาทำในโหมด Load Testing เพื่อทดสอบเว็บแอพลิเคชัน ในการทดสอบสามารถทำได้ทั้ง:
- แบบ เต็ม Flow คือเริ่มตั้งแต่หน้าก่อนล็อกอิน (หน้าแรก), หน้าล็อกอิน, หน้าแรกหลังจากล็อกอิน, และหน้าหลัก/เมนูหลักที่ต้องการที่จะทำ Load test, สุดท้ายไปที่หน้าอื่น ๆ ของระบบสักช่วงเวลาหนึ่ง และล็อกเอาท์ออกจากระบบ
- แบบ บางส่วน คือทดสอบ request/response เฉพาะ Critical task เช่น ทดสอบการเรียก API, ทดสอบการล็อกอิน เป็นต้น
ในบทความนี้ เป็นการนำ JMeter มาทำ Load test แบบ บางส่วน โดยมีรายละเอียด ดังนี้
1. ติดตั้ง JMeter
- ดาวน์โหลดเวอร์ชันล่าสุดของ JMeter จาก เว็บไซต์ทางการ
- แตกไฟล์และไปที่ไดเรกทอรี
bin - รัน
jmeter.bat(Windows) หรือjmeter.sh(Mac/Linux)
2. สร้างแผนการทดสอบ (Test Plan)
- เปิด JMeter
- คลิกขวาที่โหนด Test Plan และเลือก Add > Threads (Users) > Thread Group
3. กำหนดค่า Thread Group
- Number of Threads (Users): กำหนดจำนวนผู้ใช้พร้อมกันที่ต้องการทดสอบ (เช่น 100)
- Ramp-Up Period (in seconds): กำหนดเวลาที่ JMeter จะใช้ในการเริ่มทุกๆ thread (เช่น 100 วินาที)
- Loop Count: กำหนดจำนวนครั้งที่จะทดสอบ สามารถกำหนดเป็นตัวเลขหรือเลือก Forever ได้
4. เพิ่ม HTTP Request Sampler
- คลิกขวาที่ Thread Group และเลือก Add > Sampler > HTTP Request
- กำหนดค่า HTTP Request:
- Server Name or IP: ชื่อโดเมนหรือที่อยู่ IP ของ web application
- Path: เส้นทางของ endpoint ที่ต้องการทดสอบ (เช่น
/login) - Method: เลือกวิธีการ (เช่น GET, POST ฯลฯ)
- Parameters: เพิ่มพารามิเตอร์ที่จำเป็นสำหรับคำขอ
5. เพิ่ม Listeners
- Listeners ใช้ในการดูและวิเคราะห์ผลการทดสอบ
- คลิกขวาที่ Thread Group และเลือก Add > Listener > View Results Tree
- เพิ่ม Listeners อื่นๆ เช่น Summary Report, Graph Results, หรือ Aggregate Report ตามที่ต้องการ
6. เพิ่ม Assertions (ตัวเลือกเพิ่มเติม)
- เพื่อยืนยันความถูกต้องของการตอบกลับ เพิ่ม assertions
- คลิกขวาที่ HTTP Request และเลือก Add > Assertions > Response Assertion
- กำหนดค่า assertion เพื่อเช็คการตอบกลับที่คาดหวัง (เช่น ข้อความตอบกลับ, รหัสสถานะ)
7. รันการทดสอบ
- บันทึกแผนการทดสอบ
- คลิกปุ่ม Start สีเขียวในแถบเครื่องมือ
- ติดตามความคืบหน้าของการทดสอบใน listeners
8. วิเคราะห์ผลลัพธ์
- เมื่อการทดสอบเสร็จสิ้น วิเคราะห์ข้อมูลใน listeners
- มองหาตัวชี้วัดเช่น:
- Average Response Time: เวลาเฉลี่ยที่เซิร์ฟเวอร์ใช้ในการตอบกลับ
- Throughput: จำนวนคำขอ หรือ request ต่อวินาทีที่เซิร์ฟเวอร์จัดการได้
- Error Rate: เปอร์เซ็นต์ของคำขอ (request) ที่ล้มเหลว
ตัวอย่าง Test Plan
- Test Plan
- Thread Group
- Number of Threads (Users): 100
- Ramp-Up Period: 100
- Loop Count: 10
- HTTP Request (Server:
example.com, Path:/api/test, Method: GET) - Listeners:
- View Results Tree
- Summary Report
- Aggregate Report
- Thread Group
เมื่อทำตามขั้นตอนเหล่านี้ จะสามารถทดสอบการโหลด web application เพื่อจำลองการเข้าถึงพร้อมกันและวิเคราะห์ประสิทธิภาพภายใต้ load ได้อย่างมีประสิทธิภาพ
