Share this

Performance Testing Using JMeter

Issues
April
Programmer
Categories:
#Automated Process#Back-end Tools
Inspired by: Piyawut, Natchaya
Views

Apache JMeter คือ Open Source Software ซึ่งถูกพัฒนาโดย Java  ใช้ในการทดสอบโหลดของพฤติกรรมการใช้งาน และประสิทธิภาพการทำงานของระบบ อาทิ Load Test หรือ Performance Test  เดิม JMeter ถูกนำไปใช้กับ Web Application เท่านั้น แต่ในปัจจุบัน Jmeter สามารถรอบรับการทดสอบได้หลากหลายรูปแบบของ Application, Server และ​ Protocol เช่น การทดสอบ HTTP, FTP, Datavase, SMTP, Native Command ฯลฯ
 
JMeter รอบรับการทดสอบทั้งในรูปแบบ Static และ Dynamic Resource สามารถใช้ในการจำลองโหลดผู้ใช้งานจำนวนมากบน Server เพื่อทดสอบจุดแข็ง และวิเคราะห์การทำงานภาพรวมภายใต้ปัจจัยหรือเงื่อนไขการทดสอบที่แตกต่างกัน
 

หนึ่งในการทดสอบที่ใช้ JMeter ได้คือ Performance Test

 

หากอธิบายโดยง่าย Performance Test ไม่ใช่ Test Function แต่เป็นการเทสเพื่อตรวจสอบประสิทธิภาพของ Software ที่ถูกพัฒนาขึ้นมา  เช่น การทดสอบว่าระบบสามารถรองรับผู้ใช้งานได้กี่คน หรือทดสอบเพื่อหา Response Time ของระบบหากผู้ใช้งานมีจำนวนมากขึ้น Performance Test นับเป็น​ Superset โดยจะมี Subset แยกย่อยตามวัตถุประสงค์อีกต่อไป มี Load Test, Stress testing,  Soak testing ฯลฯ
 
  • Load Testing คือ การทดสอบระบบโดยเพิ่มปริมาณการโหลดของระบบจนถึงลิมิต โดยเป้าหมายหลัก คือการหาจุด “Defect” ของระบบ ไม่ว่าจะเป็นเรื่อง Memory Leak, ปัญหาคุณภาพของ Code, หรือปัญหาการจัดการ Memory และยังช่วยกำหนดลิมิต สำหรับ Component อื่นๆของระบบ อาทิ Database, Hardware และ Network เป็นต้น นอกจากนี้ยังช่วยทำให้เราทราบว่าจุดไหนของระบบที่จำเป็นต้อง Optimize เพิ่มเติม เพื่อพัฒนาประสิทธิภาพการทำงานให้ดียิ่งขึ้น
 
  • Stress Testing คือ การทดสอบที่เกี่ยวเนื่องมาจาก Load Testing เมื่อเราทำ Load Testing มาแล้ว เราจะได้จำนวนลิมิตที่ระบบสามารถรองรับได้ จากนั้นเราสามารถทำ Stress Testing โดยจะทดสอบว่าระบบสามารถรองรับการโหลดที่มากเกินกว่าลิมิตที่คาดการณ์ไว้ได้ไหม หากรองรับไม่ได้ระบบจะมีการตอบสนอง (Response) อย่างไร และมีการรับมืออย่างไรบ้าง การทดสอบนี้มีเป้าหมายที่จะประเมินการทำงานของระบบในแง่การรับมือกับ Error ที่เกิดขึ้นจากการโหลดที่มากเกินขีดความสามารถ เเถมยังช่วยให้สามารถวิเคราะห์ Post-Crash​ Report เพื่ออธิบายพฤติกรรมของระบบหลังจาก Error ได้อีกด้วย
 
ตัวอย่าง หาก Load Testing ของเราแสดงผลออกมาว่าระบบสามารถรองรับการทำงานสูงสุดได้ที่ 100 คน เราอาจจะทำ Soak Testing ที่ 300 คน เพื่อตรวจสอบการรับมือและการตอบสนองของระบบ
 
  • Soak Testing คือ การทดสอบประสิทธิภาพการทำงานของระบบ เมื่อมีการใช้งานติดต่อกันเป็นเวลานาน ว่ายังสามารถทำงานได้ดีเหมือนตอนเริ่มต้นหรือไม่
 

ทำไมต้องใช้ JMeter?

 

แน่นอนว่าสำหรับการทดสอบ Performance Test หรือการทดสอบอื่นๆที่เกี่ยวข้อง JMeter ไม่ใช่เครื่องมือเดียวที่สามารถใช้ได้ ยังมีเครื่องมืออื่นๆให้เลือกใช้ สิ่งสำคัญ คือความเข้าใจต่อข้อดีและข้อเสียของเครื่องมือนั้นๆ เพื่อที่จะเลือกสรรเครื่องมือที่เหมาะและเป็นประโยชน์ต่อการทำงานมากที่สุด โดย JMeter มีข้อดีและข้อเสีย ดังนี้
 
ข้อดี
  • เป็น Open Source จึงมีกระบวนการใช้งานให้อ่าน เเละศึกษาได้ง่าย
  • ไม่มีค่าใช้จ่าย เป็นเครื่องมือที่มีคุณภาพ ครอบคลุมการทำงานโดยรวมได้
  • ใช้งานง่าย การติดตั้งก็สามารถทำได้ง่ายเช่นกัน
  • รองรับการใช้งานได้ทั้งใน Window, Mac, และ Linux
  • มีเครื่องมือที่ช่วยในการ Plot Graph หรือทำ Report ได้หลากหลายรูปแบบ สามารถ Visualize การทำงานของระบบได้ง่าย
  • สามารถทดสอบการทำงานของระบบได้ผ่าน Testing หลากหลายแบบ
 
ข้อเสีย
  • ต้องใช้ Memory เยอะ
  • ปัจจุบันการทำงานอาจจะเหมาะกับการทดสอบ Web Application เป็นหลัก
  • ไม่รองรับ Javascript  ไม่เหมาะกับการทดสอบ Frontend แต่สามารถใช้ในการทดสอบ API ได้
 
 

การทำงานของ JMeter เป็นอย่างไร?

 

หากอธิบายโดยง่ายหลักการทำงานของ JMeter คล้ายกับ Postman ซึ่งจะเริ่มที่การยิง Request ไป และรอรับ Response กลับมา สามารถออกแบบการทำงายแบบ Automate ได้ นอกจากนี้เมื่อได้รับ Response มาแล้ว JMeter สามารถนำข้อมูลมา Process และสร้างเป็น Report ออกมาตามที่กำหนดไว้ได้อีกด้วย
 
 
 
การติดตั้ง JMeter
 
เนื่องจากเป็น Open Source ผู้ใช้งานสามารถติดตั้งและใช้งาน JMeter ได้โดยไม่มีค่าใช้จ่าย ในส่วนของการติดตั้งผู้ใช้งานสามารถใช้ Brew Install ติดตั้งได้เลย
 
 

วิธีใช้ JMeter

 

0. หลังจากติดตั้ง JMeter เรียบร้อยแล้ว สามารถเริ่มใช้งานได้ทันที เมื่อเปิดแล้วจะเห็นหน้าตาดังรูป
 
 

1. ให้เริ่มสร้าง Thread Group โดยคลิกขวา → กด Add → Threads (Users) → Thread Group ผู้ใช้งานสามารถตั้งชื่อ Thread Group ได้ตามต้องการ

 
 
2. ผู้ใช้งานสามารถตั้งค่าต่างๆ ซึ่งจะเป็นเงื่อนไขที่ใช้ในการทดสอบ โดยแต่ละ Field จะมีความหมายดังนี้
    • Number of Thread (Users):  จำนวน Concorrent User ที่การงานพร้อมกัน โดยหากตั้งค่าไว้เที่ 1 จะหมายถึง 1 คน หรือหากตั้งค่าไว้ที่ 10 จะหมายถึง 10 คน
    • Ramp-up period (Seconds): อจำวน user ที่เพิ่มขึ้นตามระยะเวลา ใช้เวลากี่วินาที User ถึงจะเพิ่มขึ้น
    • Loop Count: การยิง Request ของแต่ละ User โดยสามารถเลือก “Infinite” ได้ด้วย
    • Duration (Seconds): ระยะเวลาที่เราจะยิง Request เพื่อทดสอบ
 
 
3. หลังจากทำการ Set Thread Group แล้วให้เพิ่ม HTTP Request ซึ่งจะทำหน้าที่คล้ายๆกับ Postman โดยจะยิง Request ไปหา Server ที่เราระบุไว้
ขั้นตอน Add → Sampler → HTTP Request → ระบุข้อมูลที่ต้องการให้ยิง Request ไป
 
 
ในส่วนนี้ต้องระบุชื่อ Server, Port Number, Path API ที่จะยิงไป
 
 
4. ในกรณีที่ต้องมี Authentication ในการยิง Request ไปยัง Server นั้นๆ ผู้ใช้งานสามารถเพิ่ม Authentication ได้ โดยกด Add → Config Element → HTTP Header Manger  → ระบุข้อมูล HTTP Header Manager เพื่อเป็นการเพิ่ม HTTP Header ในการยิง Request ไปด้วย
 
ข้อควรรู้ #1 ถ้าเป็น Basic Case ที่ไม่จำเป็นต้อง Login สามารถข้ามขั้นตอนนี้ได้เลย แต่หากว่า Website/Server นั้นมี Authentication จำเป็นต้องทำขั้นตอนนี้ ไม่เช่นนั้นจะมีการ Reponse Error กลับมา
 
 
 
ข้อควรรู้ #2 Authentication สามารถ Copy “Request Header จากหน้าเว็บมาวางได้เลย
 
 
 
 
5. จากนั้นสามารถ Add การดูผลลัพธ์ได้โดยหลายรูปแบบไม่ว่าจะการแสดงข้อมูเป็น Graph, Table, หรือ Report ได้ โดยสามารถเลือกได้มากกว่า 1 รูปแบบการแสดงผล
    • ขั้นตอน Add → Listener → เลือกรูปแบบการแสดงผลตามความต้องการ (ไม่ว่าจะเป็น View Results Tree, Summary Report ฯลฯ)
 
 
6. เมื่อตั้งค่าทั้งหมดเรียบร้อยสามารถเริ่มยิง Request ได้ทันที โดยการกด “Run” ที่ด้านบน
 
 
7. เมื่อ Run แล้วระบบจะได้​ผลลัพธ์ออกมา โดยจะสามารถเลือกรายการต่างๆ เพื่อทำการ debug และตรวจสอบ Response Data ได้
    • ในกรณีที่การยิง Request มีข้อผิดพลาด จะสามารถ debug เพื่อชี้จุดที่ต้องแก้ไขได้

 

 
8. ผู้ใช้งานสามารถตรวจสอบผลลัพธ์ที่ได้มา จาก Listerner ที่เลือกไว้ เพื่อจะได้เห็นภาพการทำงานได้อย่างชัดเจนยิ่งขึ้น นอกจากนี้ยังสามารถ Add Lisnter เพิ่มเติม เพื่อตรวจสอบการแสดงผลในรูปแบบอื่นๆได้ แต่ว่าต้องทำการยิง Request ใหม่ทุกครั้ง
 
 
ตัวอย่างการแสดงผลของ Summary Report ในกรณีที่มีการ Error ใน Field Error จะเห็นว่าจะขึ้นเป็น 100% ซึ่งในกรณีนี้เมื่อไป Debug จาก Error Message (ตามรูปในหัวข้อที่ 8) พบว่าเกิดจากยังไม่มีการเพิ่ม Authentication และสามารถเพิ่มได้ตามขั้นตอนในหัวข้อที่ 5 จากนั้นทำการยิง Request ใหม่อีกครั้ง
 
 
สำหรับ Field ต่างๆของ Summary Report จะมีความหมายดังต่อไปนี้
    • Average: ค่าเฉลี่ยของ Response Time ทุกรายการที่ยิงไปโดยมีหน่วยเป็น Milisec
    • Error Rate: เปอร์เซ็นต์ที่จะ Error
    • Throughout: Transaction Per Second โดยจะแสดงผลว่าใน 1 วินาทีมีการส่งไปกี่ Transaction
 
 
และนี่คือข้อมูลเบื้องต้นเกี่ยวกับ Apache JMeter  ทั้งความหมายโดยย่อ ใช้ทำอะไร วิธีการใช้โดยเบื้องต้น โดยหากทำตามขั้นตอนนี้ทุกคนจะทราบการทำงานโดยย่อของ JMeter และสามารถลองเล่นหรือใช้งานได้ตามต้องการ แต่ว่าการทำงานของ JMeter ยังมี Plugin ให้เราลองใช้อีกเป็นจำนวนมาก เช่น การทำกราฟเพื่อช่วยในการประมวลผลและวิเคราะห์ข้อมูล, การ Testing แบบอื่นๆ, หรือการใช้ Listener แบบอื่นในการดูข้อมูล
 
You may also like
Low Code Framework ทำงานอย่างไร?
Low Code Framework ทำงานอย่างไร?
SEP 03, 2021A DAY AGO READ
Front-end Tools
Back-end Tools
Automated Process
ข้อควรปฏิบัติสำหรับการทำ Server Hardening
ข้อควรปฏิบัติสำหรับการทำ Server Hardening
AUG 20, 2021A DAY AGO READ
Back-end Tools
ว่าด้วยเรื่องการทำ Realtime App
ว่าด้วยเรื่องการทำ Realtime App
JUN 10, 20212 DAYS AGO READ
Back-end Tools
5 ปัจจัยหลัก ที่ใช้ประเมินการทำงาน Developer
5 ปัจจัยหลัก ที่ใช้ประเมินการทำงาน Developer
JUN 04, 20214 DAYS AGO READ
Back-end Tools
Front-end Tools

SUBSCRIBE TO OUR

NEWS
LETTER .

Code , Consult , Communicate

Copyright © 2020 CODIUM Company Limited.