- Docker และ Docker Compose ที่ติดตั้งแล้ว
# รันโดยตรง
docker-compose up
# หรือรันเฉพาะ service
docker-compose run k6 run /scripts/basic-test.js# รัน K6 script
docker run --net=host --rm -v $(pwd)/scripts:/scripts -v $(pwd)/results:/results grafana/k6 run /scripts/basic-test.js
# รันพร้อมเก็บผลลัพธ์
docker run --net=host --rm -v $(pwd)/scripts:/scripts -v $(pwd)/results:/results -e K6_OUT=json=/results/result.json grafana/k6 run /scripts/basic-test.js
# รันแบบกําหนด full options
docker run --rm \
--ulimit nofile=65536:65536 \
--sysctl net.core.somaxconn=65535 \
--sysctl net.ipv4.tcp_fin_timeout=30 \
--sysctl net.ipv4.tcp_tw_reuse=1 \
--privileged \
-v $(pwd)/scripts:/scripts \
-v $(pwd)/results:/results \
-e K6_OUT=json=/results/${test_name}_${timestamp}.json,csv=/results/${test_name}_${timestamp}.csv \
-e K6_WEB_DASHBOARD=true \
-e K6_WEB_DASHBOARD_EXPORT=/results/${test_name}_${timestamp}_report.html \
grafana/k6 run /scripts/${script_name}# รัน script ผ่าน docker-compose
docker-compose run k6 run /scripts/basic-test.js
# รัน script แบบกำหนด virtual users และ duration
docker-compose run k6 run --vus 10 --duration 30s /scripts/basic-test.js# รันแบบ stages
docker-compose run k6 run /scripts/stress-test.js
# รันแบบ spike test
docker-compose run k6 run /scripts/spike-test.jsscripts/basic-test.js- การทดสอบพื้นฐาน
scripts/load-test.js- Load testingscripts/stress-test.js- Stress testingscripts/spike-test.js- Spike testingscripts/api-test.js- API testing
docker-compose run -e K6_OUT=json=/results/result.json k6 run /scripts/basic-test.jsdocker-compose run -e K6_OUT=csv=/results/result.csv k6 run /scripts/basic-test.jsdocker-compose run -e K6_OUT=json=/results/result.json,csv=/results/result.csv k6 run /scripts/basic-test.js- ใช้
jqcommand หรือเครื่องมือ JSON viewer - Import เข้า monitoring tools เช่น Grafana
- เปิดด้วย Excel หรือ Google Sheets
- ใช้ Python pandas สำหรับการวิเคราะห์
- Response Time: เวลาตอบสนอง
- Throughput: จำนวน requests per second
- Error Rate: อัตราข้อผิดพลาด
- Virtual Users: จำนวน concurrent users
สำหรับการทดสอบ load ที่มี concurrent users สูง ควรปรับแต่งระบบปฏิบัติการเพื่อรองรับการเชื่อมต่อจำนวนมาก
# รัน OS tuning script (ต้องใช้ sudo)
sudo ./scripts/tune-os.shแก้ไขไฟล์ /etc/security/limits.conf:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
แก้ไขไฟล์ /etc/sysctl.conf:
# TCP connection limits
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 65535
# TCP timeout settings
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_tw_reuse = 1
# Port range
net.ipv4.ip_local_port_range = 1024 65535
# Apply sysctl settings
sudo sysctl -p
# Set current session limits
ulimit -n 65536
ulimit -u 65536Docker Compose ได้รับการปรับแต่งแล้วใน docker-compose.yml:
ulimits: เพิ่ม file descriptor limitssysctls: ปรับแต่ง network parametersprivileged: true: อนุญาตให้ container ใช้ system resources
# ตรวจสอบ file descriptor limit
ulimit -n
# ตรวจสอบ network settings
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_fin_timeout# สร้าง InfluxDB container
docker run -d \
--name influxdb \
-p 8086:8086 \
-e INFLUXDB_DB=k6 \
influxdb:1.8
# รัน K6 พร้อมส่งข้อมูลไปยัง InfluxDB
docker run --rm \
--net=host \
-v $(pwd)/scripts:/scripts \
-v $(pwd)/results:/results \
grafana/k6 run \
--out influxdb=http://localhost:8086/k6 \
/scripts/basic-test.js# รัน K6 พร้อม Prometheus metrics
docker run --rm \
--net=host \
-v $(pwd)/scripts:/scripts \
-v $(pwd)/results:/results \
-e K6_PROMETHEUS_RW_SERVER_URL=http://localhost:9090/api/v1/write \
grafana/k6 run \
--out experimental-prometheus-rw \
/scripts/basic-test.jsสร้างไฟล์ docker-compose-grafana.yml:
version: '3.8'
services:
influxdb:
image: influxdb:1.8
environment:
- INFLUXDB_DB=k6
ports:
- "8086:8086"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-storage:/var/lib/grafana
k6:
image: grafana/k6:latest
command: run --out influxdb=http://influxdb:8086/k6 /scripts/basic-test.js
volumes:
- ./scripts:/scripts
- ./results:/results
depends_on:
- influxdb
volumes:
grafana-storage:# รัน Grafana stack
docker-compose -f docker-compose-grafana.yml up -d
# รัน K6 test พร้อมส่งข้อมูลไปยัง InfluxDB
docker-compose -f docker-compose-grafana.yml run k6 run \
--out influxdb=http://influxdb:8086/k6 \
/scripts/load-test.js
# เข้าถึง Grafana ที่ http://localhost:3000 (admin/admin)- เข้าสู่ Grafana (http://localhost:3000)
- ไปที่ Import Dashboard
- ใช้ ID:
2587(K6 Load Testing Results) - เลือก InfluxDB data source
- กำหนดชื่อ database เป็น
k6
- Clone repository นี้
- ปรับแต่งระบบปฏิบัติการ (แนะนำ):
sudo ./scripts/tune-os.sh - สร้าง scripts ใน folder
scripts/ - รัน
docker-compose upหรือ command ตามต้องการ - ดูผลลัพธ์ใน folder
results/ - (ตัวเลือก) ตั้งค่า Grafana dashboard สำหรับ real-time monitoring
- รัน Docker พร้อมส่งผลไปยัง Grafana สำหรับการติดตามแบบ real-time