Coding Gun

Load Test คืออะไร? และมีเครื่องมืออะไรน่าใช้บ้าง?

Load Test คือการทดอบประสิทธิภาพ(Performance Testing) ของระบบรูปแบบหนึ่ง ซึ่งจุดประสงค์ของการทดสอบคือดูว่าระบบสามารถรองรับการใช้งานจริงได้หรือไม่ โดยที่เราต้องจำลองขนาดของ Requests ให้เหมือนหรือใกล้เคียงกับการใช้งานของ User มากที่สุด

Load Test vs Performance Test

การทำ Load Test เป็นหนึ่งในการทำ Performance Test ซึ่งนอกจากการทดสอบการใช้งานแล้ว ยังมีมุมมองอื่นๆ อีกหลายอย่าง ซึ่งนั่นก็คือวิธีการทำ Performance รูปแบบต่างๆนั่นเอง โดยเราจะสามารถแบ่งการทำ Performance Test เป็นรูปแบบต่างๆได้ ดังนี้

  1. Stress Test คือการทดสอบที่ยิง Workload เข้าไปในปริมาณมากๆ จะคล้ายกับ Load test แต่จะต้องเพิ่มปริมาณ Workload ขึ้นไปเรื่อยๆจนกว่าระบบจะ down เพื่อทดสอบว่าระบบรองรับ Load ได้สูงสุดเท่าไหร่

  2. Endurance Test คือการทดสอบที่จะส่ง Workload เข้าไปในระบบ(เหมือนกับ load test) แต่จะ run script ค้างไว้นานๆ เพื่อทดสอบความทนทาน(endurace) ของระบบ

  3. Spike Testing คือการทดสอบโดยใช้ WorkLoad ที่มีขนาดใหญ่ ส่งเข้าไปทำงานในช่วงเวลาสั้นๆ ส่วนใหญ่จะมีการทดสอบแบบนี้ไว้เพื่อป้องกันปัญหา Distributed Denial of Service(DDoS)

  4. Scalability Testing คือการทดสอบการขยายตัว(Scale) ของระบบ เมื่อเรามีการออกแบบให้ระบบมีการ Scale-In หรือ Scale-Out โดยอัตโนมัติ เราต้องทดสอบเพื่อให้แน่ใจว่าระบบจะ Scale ตามที่เราต้องการเมื่อมี Workload เข้ามา และการ Scale นั้นยังต้องใช้เวลาที่เหมาะสมเพื่อให้สามารถ Scale ขึ้นมาทำงานได้ทันเวลา

จะเห็นว่าการทดสอบ Performance Test มีหลายรูปแบบมากๆ ดังนั้นเมื่อเรากำลังทำ Load Test เราจะต้องพยายามทำให้ Workload ที่ส่งเข้าไปเป็นตัวแทนของการใช้งานระบบของ Users จริงๆได้ และแน่นอนการทำ Load Test เพียงอย่างเดียวอาจยังไม่เพียงพอเราต้องทำ Performance Test รูปแบบอื่นๆเพิ่มเติมด้วย

Load Testing Software

หลังจากที่เรารู้จักกับวิธีการทำ Load Test กันแล้วคราวนี้ลองมาดูเครื่องมือท่ี่เราจะนำมาใช้ในการทดสอบกันบ้างว่ามีเครื่องมือตัวไหนที่น่าใช้กันบ้าง

1. JMeter

jmeter
เริ่มจากเครื่องมีอที่ใช้ทำ Performance Test และ Load Test อันดับหนึ่งอย่าง Apache JMeter ซึ่งจุดเด่นของ JMeter คือ เราสามารถสร้าง Load ได้จาก GUI โดยไม่ต้องเขียนโปรแกรม ซึ่งเหมาะกับ Tester ที่ไม่ค่อยถูกกับการเขียนโปรแกรมมากเท่าไหร่ และนอกจากความง่ายของการสร้าง Load แล้วเรายังสามารถเชื่อต่อกับ Performance Monitoring Tools ได้ง่าย ซึ่งทำให้เราสามารถวิเคราะห์หาต้นเหตุของปัญหา(Root cause)ได้ง่ายขึ้น

Features

2. Locust

locust
Locust คือ เครื่องมือที่ใช้ทำ Load test ที่ใช้งานได้ฟรี เป็น opensource ที่พัฒนาขึ้นมาด้วย Python เราสามารถเขียน Code เพื่อกำหนดรูปแบบของ load ได้เอง และเนื่องจากการเป็น Python เราเลยสามารถใช้ฟังก์ชั่น random เพื่อสร้างรูปแบบของ load ที่ไม่ซ้ำกันในแต่ละ Requests ได้ง่ายมากๆ ลองอ่าน วิธีการใช้งาน Locust ต่อได้ที่นี่

Features

3. Grafana k6

Grafana-k6
K6 เป็น Open-source จาก Grafana ที่เหมาะสำหรับ Developer ใช้สำหรับทดสอบ Web และ API ซึ่ง Developer และ Tester สามารถวัด Performance และความสามารถในการ Scale ของระบบภายใต้เงื่อนไขของ Load แต่ละรูปแบบได้ K6 จะมีจุดเด่นตรงที่ ใช้งานได้ง่าย, สามารถ Customize และ Integrate กับเครื่องมือที่ใช้ในการพัฒนา Software ในยุคปัจจุบันได้ง่าย

Features

4. Postman

postman
Postman คือเตรื่องมือที่ใช้ทดสอบ API ซึ่งหนึ่งในความสามารถของ Postman คือการทดสอบ API เพื่อแยกปัญหาของ Backend(API) ออกจาก Frontend และหนึ่งในความสามารถของ Postman คือการทำ Load Test กับ API ซึ่งเราสามารถนำ Postman มาใช้ในการทดสอบได้อย่างง่ายๆ ผ่านทาง GUI ของ Postman

Features

5. Apache Bench(ab)

Apache-bench
Apache Bench(ab) คือเครื่องมือสำหรับทำ Load Test และ Stress Test สามารถเรียกใช้งานผ่านทาง command line ได้ง่ายๆ เหมาะกับการทำ Load Test ที่ต้องการดูผลลัพธ์เร็วๆ ไม่ต้องกำหนด configuration ที่ยุ่งยาก ลองอ่าน วิธีการใช้งาน Apavche Bench ต่อได้ที่นี่

Features

Best Practices สำหรับการทำ Load Test

หลังจากที่คุณเลือกเครื่องมือที่จะนำมาใช้สำหรับการทำ Load Test แล้ว สิ่งที่คุณจำเป็นต้องพิจารณาในระหว่างการทำ Load Test มีดังต่อไปนี้

  1. End-User Exprience เราต้องคิดถึงวิธีการเข้าใช้งานระบบในมุมมองของ End-user ตลอดเวลา เพราะการทำ Load test ไม่ใช่การสร้าง Request เข้าไปในระบบจำนวนมากๆ จนกว่าระบบจะตาย แต่เราต้องการตรวจสอบว่าระบบของเรานั้นสามารถรองรับการใช้งานของ End-User ในปริมาณที่ต้องการได้หรือไม่ ดังนั้นเราจึงต้องเน้นสร้าง Scnario ของการทดสอบให้ใกล้เคียงกับการใช้งานจริงของ End-User ให้มากที่สุด
  2. Varity ในการทดสอบเราต้องสร้าง Scnario ที่หลากหลายทั้งการจำลองการใช้งานจากหลาย Browser หรือหลาย OS ซึ่งเราต้องคิดเสมอว่าเราไม่สามารถคาบคุม Environments ของ End-User ได้โดยเฉพาะผู้ที่สร้าง Web หรือ API ที่เปิดให้บริการแก่ประชาชนโดยทั่วไป
  3. Realistic Benchmarks เราอาจนำเอา Data ที่เราเคยเก็บเอาไว้ก่อนหน้ามาใช้เป็นต้นแบบของการทำ Load Test ได้ เช่นจำนวน Users ในช่วงเวลาต่างๆ, ปริมาณของ Load ที่จะเข้ามาใน 1 ช่วงเวลา หรือค่าที่บ่งบอกถึงประสิทธิภาพของระบบอย่าง Time to First Byte(TTFB) ซึ่งถ้าระบบที่พัฒนาขึ้นมาใหม่นั้นมีประสิทธิภาพที่แย่ลงกว่าเดิม นั่นแสดงว่า Developer ต้องเข้าไปแก้ปํญหาต่างๆเหล่านี้ก่อนนำไปใช้งานจริง
  4. Early and Regulary เราต้องเริ่มต้นรัน Load test ตั้งแต่ช่วงต้นๆของการพัฒนา(Early) และต้องรันบ่อยๆ(Regulary) ซึ่งเราควรมีการทำ Load test เป็นหนึ่งใน Task ที่อยู่ใน CI/CD Pipeline แทนที่จะรอให้พัฒนา Application เสร็จแล้วถึงค่อยทดสอบ เพราะบางปัญหาอาจสายเกินกว่าจะแก้ไขได้แล้ว
Phanupong Permpimol
Follow me