จากมีการสอบถามเกี่ยวกับการทำ Load testing ใน facebook group WeLoveBug
ซึ่งสามารถเข้าไปดูการพูดคุยได้ที่นี่

Screen Shot 2557-10-08 at 5.20.48 PM

เป็นการพูดคุยที่มีความรู้ที่น่าสนใจจากมุมมองต่างๆ มากมาย
จึงขอนำมาขยายความสิ่งที่ตอบไปดังนี้

โดยผมได้ตอบไปนี้

JMeter สามารถทำ distributed testing ได้ เหมือนกับ Master-Slave
Master จะเป็นตัวควบคุม และสรุปผลการทำงานจาก slave
Slave จะเป็นตัวทำงานจริง สามารถอยุ่ทั้งภายในและภายนอก network

แต่ครื่องมือเดียวไม่สามารถเชื่อใจได้เลย ต้องใช้ monitoring tool อื่นๆ ไปด้วย เช่น network, server monitoring และ application เป็นต้น
หรือ load ได้ แต่ใช้งานจริงๆ ช้า อันนี้ก็ไม่น่า work

ส่วน tool ตัวอื่นๆ ก็เช่น wrk, tsung เป็นต้น

สิ่งที่ขออธิบายเพิ่มเติมก็คือ JMeter Distributed Testing

วิธีการนี้ เกิดมาจากปัญหาในการนำ JMeter ไปทดสอบประสิทธิภาพของระบบ
ที่ต้องการสร้างจำนวนผู้ใช้งานขึ้นมาจำนวนมาก
ส่งผลให้เครื่องที่ JMeter ทำงานนั้นทำการสร้างหรือจำลองผู้ใช้งานน้อยลงไป
หรืออาจจะไม่ได้ผลตามที่เราคาดหวังไว้
เนื่องจากในการสร้างหรือจำลองผู้ใช้งานนั้น
จะต้องใช้ Memory และ CPU จำนวนมาก รวมทั้งต้องเก็บผลการทำงานลงระบบไฟล์อีก
ดังนั้น การทำงานแบบนี้มันไม่ดีแน่นอน จึงมีแนวคิด Remote Testing ขึ้นมา

เราสามารถสร้างหรือสั่งให้ JMeter ทำงานบนเครื่องต่างๆ ได้
ทั้งเครื่องที่มีความสามารถสูงหรือต่ำ เพื่อช่วยกันสร้างจำนวนผู้ใช้งานระบบขึ้นมา
ตามความสามารถของแต่ละเครื่อง

ซึ่งส่วนใหญ่แล้วมักจะกำหนดให้ JMeter 1 เครื่อง เป็นตัวหลัก
เพื่อให้สำหรับควบคุมหรือสั่งงาน JMeter ที่ทำงานอยู่ต่างเครื่อง
และคอยทำการรวบรวมข้อมูลผลการทดสอบจากแต่ละเครื่อง
เพื่อสรุปออกมาเป็นรายงานรูปแบบต่างๆ ต่อไป

สามารถสรุปความสามารถของ JMeter Remote ได้ดังนี้

  • ในแต่ละเครื่องที่ติดตั้งและสั่งให้ JMeter ทำงาน จะเก็บข้อมูลแต่ละเครื่องไว้ เพื่อส่งไปยังเครื่องควบคุม เรียกว่าเครื่อง Slave
  • สามารถควบคุม เช่น การ Start/Stop การทำงานของ JMeter จากเครื่องตรงกลางได้ เรียกว่าเครื่อง Master
  • เราไม่ต้องทำการ copy ไฟล์ test plan ไปยังเครื่อง Slave แต่ถ้ามีการใช้ไฟล์ข้อมูล เช่น CSV จะต้อง copy ไปไว้ในแต่ละเครื่องด้วย

 

รูปแสดงการทำงานของ JMeter Distributed Testing

Distributed-Testing-in-JMeter

วิธีการทดสอบแบบนี้ ก็จะมีปัญหาที่เครื่อง Master หรือ JMeter GUI เช่นเดียวกัน
ถ้าขนาด bandwidth ของ network น้อย หรือ เครื่องมีประสิทธิภาพที่ต่ำ
ซึ่งจะทำให้เกิดปัญหาคอขวดขึ้นมาได้อีก
นั่นส่งผลต่อการทดสอบ และ ผลที่ได้อาจจะไม่ถูกต้องเช่นเดียวกัน

ดังนั้น วิธีการแก้ไขก็คือ พยายามตั้ง JMeter เอาไว้ให้ใกล้กับ Web Server ที่เป็นเป้าหมายในการทดสอบให้มากที่สุด
เพื่อลดปัญหาเรื่อง performance ต่างๆ ลงไป

ส่วนวิธีการใช้งานหรือติดตั้ง

ผมเคยเขียนอธิบายไว้ที่ Narisa.com Up1 Blog :: Distributed Testing
หรือตามเอกสารจาก JMeter เรื่อง Distributed Testing ได้เช่นเดียวกัน

ตัวอย่างหน้าจอของเครื่อง Master ที่ควบคุมการทำงานของ Slave

Screen Shot 2557-10-08 at 5.05.59 PM


การใช้งานนั้นจะมีปัญหาเรื่อง network นิดหน่อย

เพราะว่า JMeter แต่ละตัว มันติดต่อกันผ่าน RMI protocol (Remote Method Invocation)

ดังนั้นข้อจำกัดที่ควรรู้มีดังนี้

  • เครื่อง Master และ Slave ควรที่ใน network วงเดียวกัน ถ้าอยู่ต่าง network กันมันจะมองไม่เห็นกัน ต้องใช้ท่ายาก
  • JMeter แต่ละตัวนั่นสามารถจัดการหรือมีจำนวน thread ได้ประมาณ  100-300 thread เท่านั้น
  • การทดสอบในรูปแบบนี้จะมีความซับซ้อนในเรื่องการติดตั้ง และ ใช้งานพอสมควร ดังนั้นควรระวังตอนเริ่มใช้งาน

สุดท้ายแล้ว

ก่อนที่จะทำ Load Testing นั้น คุณควรรู้ก่อนว่า จะทำไปเพื่ออะไร เป้าหมายคืออะไร
และเครื่องมือเดียว ไม่สามารถที่จะตอบอะไรได้ ต้องใช้เครื่องมือื่นๆ เข้ามาช่วยด้วย