Performance Testing เป็นกระบวนการทดสอบที่สำคัญในการพัฒนาแอปพลิเคชันสมัยใหม่ โดยเฉพาะเมื่อคุณต้องการให้ระบบของคุณสามารถรับมือกับปริมาณผู้ใช้งานจำนวนมากได้ บทความนี้จะอธิบายวิธีการตั้งค่า Performance Testing อัตโนมัติใน CI/CD Pipeline เพื่อให้คุณสามารถตรวจจับปัญหาด้านประสิทธิภาพก่อนที่จะปล่อยลง Production
Performance Testing คืออะไร ทำไมจึงสำคัญ
Performance Testing คือการทดสอบระบบภายใต้สภาวะการทำงานต่างๆ เพื่อวัดความสามารถในการจัดการกับปริมาณ load ที่แตกต่างกัน วัตถุประสงค์หลักได้แก่:
- ตรวจจับ Bottleneck: ค้นหาส่วนที่ช้าหรือเป็นจุดอับขวางในระบบ
- วัดความสามารถ: ทราบว่าระบบสามารถรองรับผู้ใช้งานได้กี่คนในเวลาเดียวกัน
- ตรวจสอบเสถียรภาพ: ตรวจสอบว่าระบบทำงานได้อย่างเสถียรในระยะยาว
- ประหยัดค่าใช้จ่าย: ลดต้นทุนเซิร์ฟเวอร์โดยเพิ่มประสิทธิภาพ
1. Load Test (การทดสอบ Load)
Load Test เป็นการทดสอบระบบภายใต้ปริมาณ load ที่เพิ่มขึ้นแบบค่อยเป็นค่อยไปจนถึงปริมาณที่คาดว่าจะเกิดขึ้น
2. Stress Test (การทดสอบ Stress)
Stress Test คือการเพิ่มปริมาณ load เกินกว่าความสามารถปกติเพื่อหาจุดแตกหักของระบบ (Breaking Point)
3. Spike Test (การทดสอบ Spike)
Spike Test เป็นการเพิ่มปริมาณ load อย่างฉับพลันเพื่อดูว่าระบบสามารถ Recover ได้หรือไม่
4. Soak Test (การทดสอบ Soak)
Soak Test คือการรักษา load ระดับปกติไว้เป็นเวลานานเพื่อตรวจสอบหา Memory Leak หรือปัญหาอื่นๆ ที่อาจเกิดขึ้นในระยะยาว
เครื่องมือยอดนิยมสำหรับ Performance Testing
k6 เป็นเครื่องมือที่แนะนำสำหรับ CI/CD เนื่องจากเป็น Open Source เขียนด้วย Go ทำงานเร็ว ใช้ทรัพยากรน้อย Apache JMeter มีฟีเจอร์ครบครัน มี GUI เหมาะสำหรับการทดสอบที่ซับซ้อน Gatling เขียนด้วย Scala ประสิทธิภาพสูง มีรายงาน HTML ที่สวยงาม และ Locust เขียนด้วย Python ง่ายต่อการ Customize
การตั้งค่า Performance Testing ใน GitHub Actions
สร้างไฟล์ .github/workflows/performance-test.yml เพื่อรัน k6 อัตโนมัติทุกครั้งที่มี push หรือ pull request
name: Performance Testing
on:
push:
branches: [ main, develop ]
jobs:
performance-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run k6 Load Test
uses: grafana/[email protected]
with:
filename: tests/performance/load-test.js
ตัวอย่างการเขียน k6 Script
import http from 'k6/http';
import { sleep, check } from 'k6';
export const options = {
vus: 100,
duration: '5m',
thresholds: {
'http_req_duration': ['p(95)<500'],
'http_req_failed': ['rate<0.01'],
},
};
export default function () {
const res = http.get('https://example.com/api/products');
check(res, {
'status is 200': (r) => r.status === 200,
});
sleep(1);
}
การวิเคราะห์ผลลัพธ์และ Threshold
Metrics ที่สำคัญ ได้แก่ http_req_duration (Response Time), http_req_failed (Error Rate), http_reqs (จำนวน Request), vus (Virtual Users), iterations (จำนวนรอบที่รัน) กำหนด Threshold เช่น 95% ของ request ต้องตอบสนองภายใน 500ms และ Error Rate ต้องน้อยกว่า 1%
Best Practices สำหรับ Performance Testing
- ทดสอบในสภาพแวดล้อมที่ใกล้เคียง Production: Staging ต้องมี Spec คล้าย Production
- ตั้งค่า Threshold ที่สมเหตุสมผล: ไม่สูงหรือต่ำจนเกินไป
- ทดสอบด้วยข้อมูลจริง: เพื่อสะท้อนความเป็นจริง
- รันหลาย iteration: เพื่อผลลัพธ์ที่เชื่อถือได้
- บันทึก Baseline: ติดตามการเปลี่ยนแปลงของ Performance
- ทดสอบต่อเนื่องใน Pipeline: อัตโนมัติทุก commit
- วิเคราะห์ผลลัพธ์อย่างเป็นระบบ: ดูแนวโน้มไม่ใช่แค่ผ่าน/ไม่ผ่าน
สรุป
Performance Testing เป็นส่วนสำคัญของกระบวนการ CI/CD ที่ช่วยให้คุณทราบประสิทธิภาพของระบบก่อนปล่อยลง Production k6 เป็นตัวเลือกที่ดีสำหรับ CI/CD เนื่องจากเป็น Open Source ติดตั้งง่าย และทำงานได้เร็ว สำหรับการตั้งค่าระบบให้ประสิทธิภาพสูงสุด ลองติดต่อทีมงานของ ผู้ให้บริการโฮสติ้ง ซึ่งพร้อมให้คำแนะนำในการออกแบบเซิร์ฟเวอร์ที่เหมาะสม
