What is JMeter Load Tests ?
เคยใช้ไหม บอกเลยว่าไม่เคย จาวาใช่ไหม อ่านมาว่าใช่นะ เก่าไปไหม ไม่เก่าหรอก แล้วดีกว่าตัวอื่นๆในตลาดไหม ก็ต้องศึกษาก่อนไง หนนี้เรามาลองเล่น JMeter ทำ load tests กันจ้า
JMeter เป็นโปรแกรมที่เขียนด้วยภาษาจาวา ทำงานบนเทคโนโลยีของจาวา สร้างขึ้นเพื่อทำ load test และวัดประสิทธิภาพของโปรแกรม
สำหรับใครก็ตามที่หลงเข้ามาอ่านและรู้สึกสนใจแม้ว่าจะเคยเขียนหรือรู้จักภาษาจาวามาบ้างแสดงว่าท่านนั้นไม่เคยทำ load test มาก่อน ผมขอสมมติอย่างนี้เพื่อที่เราจะได้มาเริ่มพร้อมๆกันครับ
Static and Dynamic Resources
JMeter ใช้ทดสอบประสิทธิภาพได้ทั้ง static และ dynamic resources ทั้งแบบ server เดี่ยวหรือกลุ่ม network server ก็ทำได้ ต่อไปนี้คือรายการเทคโนโลยีที่มันสามารถ
- Web — HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
- SOAP / REST Webservices
- FTP
- Database via JDBC
- LDAP
- Message-oriented middleware (MOM) via JMS
- Mail — SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- TCP
- Java Objects
Report Presenting
ออก report หลากหลายรูปแบบ ไม่ว่าจะเป็น
- HTML
- JSON
- XML
- Text
Full multi-threading
JMeter สร้างด้วยจาวาซึ่งเก่งเรื่อง thread อยู่แล้ว ตัวมันจึงทำงานแบบ full multi-threading กล่าวคือสามารถทำได้หลายงานพร้อมกันในเวลาเดียวกัน แบ่งการทำงานนั้นด้วยสิ่งที่เรียกว่า thread group (เจ๋งอะ)
Continuous Integration
เคยได้ยินคำว่า CI/CD ไหม ตัว CI ย่อมาจาก Continuous Integration คือทำงานร่วมกันกับสิ่งอื่นได้ JMeter สามารถประยุกต์เข้ากับ Maven, Gradle และ Jenkins
It works at protocol level
ตามคำกล่าวนี้เลยครับ มันทำงานในระดับ protocal นะไม่ใช่ระดับ browser ดังนั้นจะคาดหวังว่ามันจะสามารถเข้าใจ javascript หรือ render HTML บน browser นี้ทำไม่ได้ แต่ตรงกันข้ามงานของ web-services และ remote services นี้คือของถนัดมันเลย
ติดตั้ง
ขอบอกก่อนว่า part นี้อาจไปได้ไม่ลึกนักเพราะผมก็เพิ่งเริ่มศึกษาเอง ทว่าก็อยากเอามาบอกเล่าอย่างเคยๆ
JMeter ต้องการ JDK เอาเป็นเวอร์ชัน 1.8 นะครับ Google ไปว่า
oracle jdk 8 download
ต่อไปก็ตัว JMeter เอง
jmeter download
ผมเครื่อง Mac ไม่เลือกดาวน์โหลดแบบ .zip นะ ขอใช้ Homebrew ไปดูดมาแล้วกัน
ทดสอบด้วย Terminal หรือ Command Line
อ่านจากบทความอื่นๆ
JMeter มีมานานแล้ว ดังนั้นบทความที่เขียนก็มีเยอะมากๆ ผมขอหยิบยกเฉพาะเนื้อหาที่ตนเองต้องการศึกษาเท่านั้นนะครับ
ลองเปิดไปดูบทความอื่นๆ คิดว่าท่องโลกเหมือนที่เราได้มาพบกันนี่ไงล่ะ :)
เริ่มจากง่ายที่สุด
เริ่มศึกษาอะไรก็ตาม ก็เริ่มจากง่ายที่สุดก่อน แล้วจึงเพิ่มความซับซ้อนขึ้นภายหลัง ขอให้ดูภาพต่อไปนี้
ทดสอบที่ 100 คนต่อวินาที
เรามาลอง load tests เว็บดังอย่าง Google โดยต้องการดูผลลัพธ์ที่ว่าเมื่อมีผู้ใช้งานจำนวน 100 คนเรียกมาที่ https://www.google.co.th พร้อมกันจะเป็นอย่างไร
- Test Plan คือจะทดสอบอะไร
- Thread Group คือกลุ่มงานนี้กำหนดปริมาณผู้ใช้และเงื่อนไขอย่างไรบ้าง
- HTTP Request คือเรียกไปที่ไหน ได้ทั้ง http และ https
- View Results Tree คือผลลัพธ์จากคำขอนั้น
- Summary Report คือดูผลสรุป average, min, max เวลาที่ใช้ไป มี error คิดเป็นกี่เปอร์เซ็นต์ จำนวน transection ที่ทำได้และอื่นๆ
ขั้นตอน
- สร้าง Thread Group ให้คลิกขวาที่ Test Plan > Add > Threads (Users) > Thread Group
- สร้าง HTTP Request ให้คลิกขวา Thread Group > Add > Sampler > HTTP Request
- สร้าง View Results Tree ให้คลิกขวา Thread Group > Add > Listener > View Results Tree
- สร้าง Summary Report ให้คลิกขวา Thread Group > Add > Listener > Summary Report
Run และดูผลลัพธ์ กดปุ่มสามเหลี่ยมสีเขียวเลยครับ
หากจะรันแต่ละครั้งแนะนำให้ล้างค่าเดิมออกจาก View Results Tree และ Summary Report ก่อน โดยการคลิกขวาเลือก Clear หรือกด
Command + Shift + e
ก็ได้ (Mac)
เพื่อจะได้มีผลลัพธ์มาเปรียบเทียบกัน เราจะปรับเพิ่มจำนวนผู้ใช้งานเป็น 1000 คน
ทดสอบที่ 1000 คนต่อวินาที
สร้าง Thread Group ใหม่ ตั้งชื่อไปว่า Load 1000 Users/Second Thread Group กำหนดให้มีจำนวนผู้ใช้ 1000 คน
Run และดูผลลัพธ์
เทียบกันแล้วระหว่าง 100 คนกับ 1000 ในหนึ่งวินาทีเห็นเป็นอย่างไรบ้าง แต่ก่อนจะคุยเรื่องนี้ต่อ ผมแนะนำให้ติดตั้ง JMeter Plugin Manager เพื่อหา Plugin สวยๆมาลงเพิ่ม
JMeter Plugin Manager
เริ่มจากตรงนี้
ดาวน์โหลด plugins-manager.jar ไปวางที่ lib/ext ของ JMeter
แต่ก่อนอื่นให้หาว่า lib/ext มันอยู่ไหน
Google ตัวใครตัวมันเลยนะ ผมใช้ Mac ได้ว่า
cd /usr/local/Cellar/jmeter
restart JMeter ใหม่จะพบเมนู Options > Plugins Manager
อยากให้ติดตั้งตัวไหนก็เลือกตามใจชอบ เอามาหมดเลยก็ได้
ในที่นี้ผมลองเพิ่ม jp@gc — Response Times vs Threads ในแต่ละ Thread Group ครับ แล้วก็เปลี่ยนอินเตอร์เน็ตใช้จากมือถือแทน Wifi (ความเร็วของเน็ตมีผลต่อการ load test)
หมายเหตุ โหลดเขาบ่อยๆ (google.co.th) จะเจอ 429 Too Many Requests ตอบกลับมาได้นะครับ อันนี้คือเขา block เราแล้ว 5555
ถึงตรงนี้เราได้ทำความรู้จักกับ JMeter เป็นที่เรียบร้อย แต่ยังไม่ได้กำหนดขอบเขตการทดสอบจึงไม่มีผลลัพธ์นำไปประเมิณอะไรทั้งสิ้น และ part นี้คงไว้เท่านี้ สวัสดีจ้า