Apache JMeter เป็น Open Source ที่ถูกพัฒนาโดย Java ที่ใช้ในการทดสอบประสิทธิภาพการทำงานของระบบ โดยจะจำลองโหลดผู้ใช้งานบนระบบ เพื่อทดสอบหาความผิดพลาด เพื่อให้ผู้พัฒนานำไปแก้ไขต่อไป
ซึ่งเจ้าตัวนี้รองรับการใช้งานได้ทั้งใน Window, Mac และ Linux อีกด้วย มีเครื่องมือที่ช่วยในการสร้างกราฟและรายงาน
ในบทความนี้จะเน้นไปทาง วิธีการใช้งานเบื้องต้นของ JMeter เพื่อทดสอบระบบ API ว่าสามารถรองรับ Load ได้เท่าไหร่
ดาวน์โหหลด JMeter
สำหรับผู้อ่านท่านใดที่ยังไม่มีโปรแกรม JMeter ก็สามารถโหลดได้จากลิ้งนี้เลย
โดยก่อนที่จะใช้ จำเป็นต้องติดตั้ง Java 8+ สามารถหาโหลดได้ทั่วไป
ซึ่งการใช้งานสามารถเปิดโดยตรงจากตัวโปรแกรมที่มีชื่อไฟล์ว่า jmeter.batch หรือสามารถ run ผ่าน command line ได้เช่นกัน
ตั้งค่าตัวแปร
ก่อนที่จะไปทำอะไรนั้น ผมจะเริ่มจากกาารสร้างค่าตัวแปรคงที่เพื่อที่จะเอาไว้ใช้งานกับข้อมูลในขั้นตอนต่อๆไป
ในที่นี้จะมี PATH คือเว็บที่เราต้องการจะทำการรีเควส และ TOKEN สำหรับเว็บที่ต้องมีการเข้ารหัสก่อน ในที่นี้เว็บที่ผมทำการยิงไปต้องทำการเข้ารหัสผ่าน JWT Token Header ด้วย จึงได้กำหนดตัวแปรตัวนี้ขึ้นมา
![Constant variables setting in JMeter](https://bbxmbb.com/wp-content/uploads/2023/09/Screenshot-2023-09-05-090824.png)
เพิ่ม Thread Group
ทำการตั้งค่าใน Thread Properties
- Number of Threads : 10
- Ramp-up period : 60
- Loop Count : Infinite
- Same user on each iteration : checked (เพื่อให้ไม่มี Connection Time ระหว่างการ Request)
- Specify Thread lifetime: Check
- Duration : 120
จากการตั้งค่าข้างต้นหมายถึง มี users ใช้งาน 10 คน โดยค่อยๆเพิ่มขึ้นจึงครบ 60 วินาที จากนั้นใช้งานไปจนถึง 120 วินาที โดยให้รันไปเรื่อยๆจนครบ
เพิ่ม Http Request ที่ต้องการให้ Request
- ตั้งค่าดังรูป โดยสามารถใช้งานตัวแปร PATH ผ่าน ${PATH} และทำการเปลี่ยนชื่อ เผื่อให้ง่ายต่อการจัดการ
- จากนั้นก็จะทดสอบทั้ง POST และ PUT method ก็สามารถ Duplicate ค่าที่เราตั้งก่อนหน้าได้เลย
- โดย Post และ Put ผมจำใส่ค่า ลงไปใน Body ดังนี้
{
"name":"1",
"description":"5",
"floatData":${random_number1-100},
"boolData":true,
"arrayData":[5,5],
"objectData":{"key":5}
}
สังเกตว่าจะมีตัวแปร ${random_number1-100} ซึ่งค่านี้จะสร้างขึ้นมาจากการสุ่มซึ่งสามารถตั้งค่าตามได้ในขั้นตอนต่อไป
ตั้งค่า random variables
ค่าตัวแปรนี้จะไม่ซ้ำในแต่ละการ request เพื่อให้มีความสมจริง ค่านี้ผมเอาไปใช้ใส่ทั้งใน path และ body โดยสามารถตั้งค่าตามรูปภาพได้เลย
สร้าง Listener เพื่อดูรายงานประสิทธิภาพ
โดยปกติที่ผมชอบใช้ Report ดังนี้
- Summary Report เพื่อดูภาพรวม
- View Results Tree โดยตั้งค่าให้แสดงผลเฉพาะ Error เพื่อเอาไว้ดูว่าของ Request ที่ส่งไป Error อะไร
- Response Time Graph เพื่อดูการตอบสนองของแต่ละ Request
เพียงเท่านี้เราก็สามารถลองทดสอบระบบเราได้แล้ว
กำหนด Header
Important!
โดยกำหนดตามค่าดังนี้
Accept: */*
Accept-Encoding : gzip, deflate, br
Connection :keep-alive
Content-Type : application/json
Authorization : Bearer ${TOKEN}
ผลการทดสอบ API
หลังจากที่เราได้ตั้งค่ามาทั้งหมดแล้วอย่าลืม Save เพื่อเอาไว้ใช้เป็น ค่าตั้งต้นจะได้ไม่ต้องมาตั้งค่าใหม่ โดยต้องเลือก Save Test Plan As โดยจะได้นามสกุลไฟล์เป็น jmx
![Run Performance Test in JMeter](https://bbxmbb.com/wp-content/uploads/2023/09/run-silmulation.gif)
เพียงเท่านี้เราก็จะได้ผลการทดสอบสำหรับ load test โดยสามารถไปปรับ number of Threads ให้เยอะขึ้นเพื่อดูว่าระบบเราสามารถรองรับได้เท่าไหร่
ในกรณีที่ตั้งค่า number of Threads สูงๆ
สำกรับการทดสอบที่มี number of Threads มากๆ แนะนำให้รัน ผ่าน Command line เพราะถ้าหากรันผ่าน GUI ตัว Jmeter จะเก็บค่าไม่ทัน โดยต้อง cd เข้าไปที่ ..\apache-jmeter-5.6.2\bin ก่อนแล้วถึงรันโค้ดดังนี้
./jmeter -n -t "\loadTest\starter setup.jmx" -l \loadTest\test_results.jtl
จากนั้นเราสามารถไปเปิดไฟล์ test_results.jtl ผ่าน JMeter ผ่าน Listener ที่เราต้องการได้อีกที เช่นต้องการมาดู Response Time Graph ทีหลังดังรูปเป็นต้น
จะได้ค่าประมาณนี้
หวังว่าบทความนี้ก็จะช่วยให้ผู้อ่านรู้วิธีการใช้งานคร่าวๆของ JMeter program ทุกคนก็สามารถไปลองเล่นกันได้เลย