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 ทำงานอย่างไร?
ก.ย. 25, 2024•อ่านเมื่อ 1 วันที่แล้ว
Back-end Tools
Front-end Tools
Automated Process
วิธีสร้าง Chatbot ในแบบฉบับง่ายๆ ไม่ใช่ คนTech ก็ทำได้
ก.ย. 25, 2024•อ่านเมื่อ 28 นาทีที่แล้ว
Back-end Tools
Front-end Tools
Digital Transformation
มารู้จักกับ CI/CD ตัวช่วยให้งานโปรแกรมเมอร์ง่ายขึ้น
ก.ย. 25, 2024•อ่านเมื่อ ไม่กี่วินาทีที่แล้ว
Automated Process
Front-end Tools
Bot
HR Bot สร้างขึ้นมาได้อย่างไร
ก.ย. 25, 2024•อ่านเมื่อ 4 ชั่วโมงที่แล้ว
Bot
Automated Process
Front-end Tools