[บันทึก] ลองทำ Load Test ด้วย k6

Kannika S.
2 min readAug 25, 2023

--

สวัสดีค่ะ วันนี้จะมาเล่าถึงการทำ Load test กับทีม ให้ได้อ่านกันง้าบบ :-)

stress test vs load test

Load testing คืออะไร ??​

Load Test เป็น 1 ประเภทในการทดสอบ Performance Testing ซึ่ง Load testing คือ การทดสอบที่ปริมาณข้อมูลปกติที่ระบบทำได้ หรือการคาดการณ์ไว้ว่าระบบจะทำงานได้เท่าไหร่ ซึ่งจุดประสงค์ของการ load test จะทำให้เราทราบถึงการตอบสนองของระบบต่อหน่วยเวลา เพื่อเป็นข้อมูลว่า ณ ที่ load ปกตินั้น การตอบสนองของระบบทำงานได้เร็วหรือช้า

Performance Testing คืออะไร

Performance Testing คือ ตัวชีวัดถึงประสิทธิภาพของซอฟต์แวร์ ว่าซอฟต์แวร์ที่พัฒนาขึ้นมานั้นมีการตอบสนองเร็วหรือช้าหรือหากมีจำนวนผู้ใช้งานเข้ามามากๆ แล้วระบบเราจะยังสามารถทำงานได้หรือไม่

เครื่องมือที่ใช้ทดสอบ คือ k6

k6
k6

k6 เป็นเครื่องมือ Open source ที่เขียนด้วยภาษา Go สำหรับทำ Load Testing โดยทำคำสั่งผ่าน CLI ด้วยความที่ k6 เป็น Scriptable tools เลยทำให้สามารถเขียนโค้ดทดสอบเพิ่มเติมได้ โดยใช้ภาษา Javascript โดยในการทดสอบครั้งนี้ ทีมจะทดสอบที่ระบบ The Collector

วิธีติดตั้ง k6 บน Mac (os)

  1. ติดตั้ง k6 ด้วยคำสั่ง
brew install k6

2. กำหนดขอบเขตที่ต้องการทดสอบ ในไฟล์ test-script.js ด้วยการกำหนดจำนวน VUs (Virtual User)ให้ขึ้นตามระยะเวลาที่กำหนด ตามรูป ด้วยการกำหนด thresholds (สิ่งนี้เรากำหนดขึ้นมาเองตามเงื่อนไขในการทดสอบ) และ stages ดังนี้

Thresholds

  • response ที่ failed ต้องไม่เกิน 5%
  • 95% ของ response time ต้องใช้เวลาไม่เกิน 3 วินาที

Stages

กำหนด VUs จาก 1 ไป 20 VUs ในเวลา 30 วินาที จากนั้นให้คงอยู่ใน stage เป็นเวลา 1 นาที (VUs จำนวนเท่าเดิม)

3. run คำสั่ง `k6 run test-script.js` จะได้ผลการทดสอบ ตามรูป จะเห็นว่าถ้าตาม Thresholds และ stages ที่เรากำหนดจะได้ผลลัพธ์ของ load test 97%

ขออธิบายค่าต่างๆ ดังนี้

  • duration : เวลาที่จะใช้ทดสอบ
  • iterations : จำนวนครั้ง request ที่ใช้ทดสอบ
  • vus : ย่อมาจาก virtual user หรือการจำลองคนใช้งาน 1 คน
  • max : คือจำนวน vus มากที่สุดที่จะใช้ทดสอบ โดยจะใช้ระบุคู่กับ duration เท่านั้น และในการทำ stage จะใช้ชื่อว่า “target”
  • data_received : จำนวน Byte ที่มีการรับกลับมาจากการทดสอบ
  • data_sent : จำนวน Byte ที่มีการส่งออกไปเพื่อทดสอบ
  • http_req_duration : จำนวนเวลารวมที่มีการ request ทดสอบ
  • http_reqs : จำนวนครั้งที่มี request ในช่วงเวลา duration ที่กำหนด

สุดท้ายนี้ขอบคุณทีมที่คอยซัพพอร์ต และขอบคุณผู้ใหญ่ใจดี App The Collector ที่ให้โอกาสในการเรียนรู้ครั้งนี้ค่ะ ​🙏🏼

หากใครสนใจ k6 สามารถไปดูเพิ่มเติมได้ที่ https://k6.io/

--

--