What is JMeter Load Tests ?

Phai Panda
4 min readNov 18, 2019

--

เคยใช้ไหม บอกเลยว่าไม่เคย จาวาใช่ไหม อ่านมาว่าใช่นะ เก่าไปไหม ไม่เก่าหรอก แล้วดีกว่าตัวอื่นๆในตลาดไหม ก็ต้องศึกษาก่อนไง หนนี้เรามาลองเล่น 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

test java -version
run jmeter
JMeter UI

อ่านจากบทความอื่นๆ

JMeter มีมานานแล้ว ดังนั้นบทความที่เขียนก็มีเยอะมากๆ ผมขอหยิบยกเฉพาะเนื้อหาที่ตนเองต้องการศึกษาเท่านั้นนะครับ

ลองเปิดไปดูบทความอื่นๆ คิดว่าท่องโลกเหมือนที่เราได้มาพบกันนี่ไงล่ะ :)

เริ่มจากง่ายที่สุด

เริ่มศึกษาอะไรก็ตาม ก็เริ่มจากง่ายที่สุดก่อน แล้วจึงเพิ่มความซับซ้อนขึ้นภายหลัง ขอให้ดูภาพต่อไปนี้

https://medium.com/skyshidigital/performance-testing-with-jmeter-for-dummies-541ea9171464

ทดสอบที่ 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
ตั้งชื่อ Test Plan
ตั้งชื่อ Thread Group กำหนดจำนวนคนต่อวินาที
สร้างคำขอยิงไป google.co.tn
อยากดูผลลัพธ์ 2 รูปแบบ View Results Tree และ Summary Report

Run และดูผลลัพธ์ กดปุ่มสามเหลี่ยมสีเขียวเลยครับ

100 Users/second View Results Tree
100 Users/second Summary Report

หากจะรันแต่ละครั้งแนะนำให้ล้างค่าเดิมออกจาก View Results Tree และ Summary Report ก่อน โดยการคลิกขวาเลือก Clear หรือกด
Command + Shift + e
ก็ได้ (Mac)

เพื่อจะได้มีผลลัพธ์มาเปรียบเทียบกัน เราจะปรับเพิ่มจำนวนผู้ใช้งานเป็น 1000 คน

ทดสอบที่ 1000 คนต่อวินาที

สร้าง Thread Group ใหม่ ตั้งชื่อไปว่า Load 1000 Users/Second Thread Group กำหนดให้มีจำนวนผู้ใช้ 1000 คน

Run และดูผลลัพธ์

1000 Users/second Summary Report

เทียบกันแล้วระหว่าง 100 คนกับ 1000 ในหนึ่งวินาทีเห็นเป็นอย่างไรบ้าง แต่ก่อนจะคุยเรื่องนี้ต่อ ผมแนะนำให้ติดตั้ง JMeter Plugin Manager เพื่อหา Plugin สวยๆมาลงเพิ่ม

JMeter Plugin Manager

เริ่มจากตรงนี้

ดาวน์โหลด plugins-manager.jar ไปวางที่ lib/ext ของ JMeter

แต่ก่อนอื่นให้หาว่า lib/ext มันอยู่ไหน

Google ตัวใครตัวมันเลยนะ ผมใช้ Mac ได้ว่า

cd /usr/local/Cellar/jmeter
เจอแล้ว
copy แล้ววางในนี้

restart JMeter ใหม่จะพบเมนู Options > Plugins Manager

หน้าตาเวอร์ชัน 1.3
หน้าตาเวอร์ชัน 1.6

อยากให้ติดตั้งตัวไหนก็เลือกตามใจชอบ เอามาหมดเลยก็ได้

ในที่นี้ผมลองเพิ่ม jp@gc — Response Times vs Threads ในแต่ละ Thread Group ครับ แล้วก็เปลี่ยนอินเตอร์เน็ตใช้จากมือถือแทน Wifi (ความเร็วของเน็ตมีผลต่อการ load test)

100 users/second
1000 users/second

หมายเหตุ โหลดเขาบ่อยๆ (google.co.th) จะเจอ 429 Too Many Requests ตอบกลับมาได้นะครับ อันนี้คือเขา block เราแล้ว 5555

ถึงตรงนี้เราได้ทำความรู้จักกับ JMeter เป็นที่เรียบร้อย แต่ยังไม่ได้กำหนดขอบเขตการทดสอบจึงไม่มีผลลัพธ์นำไปประเมิณอะไรทั้งสิ้น และ part นี้คงไว้เท่านี้ สวัสดีจ้า

--

--

No responses yet