Back

การใช้ 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

เมื่อทำตามขั้นตอนเหล่านี้ จะสามารถทดสอบการโหลด web application เพื่อจำลองการเข้าถึงพร้อมกันและวิเคราะห์ประสิทธิภาพภายใต้ load ได้อย่างมีประสิทธิภาพ