WebSocket Performance Test on JMeter

วันนี้อยู่ๆก็มีอารมณ์อยากลองทำ performance test ของ websocket ขึ้นมา. ก็เลยทดลองเล่น JMeter 3 with plugin JMeter-WebSocketSampler.
เชิญชมวิธีการทำ performance test บน websocket (ws/wss) กัน.

Contents

Install WebSocket Protocol Support.
pluginMenu

  1. Go to Options > Plugins Manager.
  2. Go to “Available Plugins” แล้วเลือก WebSocket Protocol Support.
  3. กด Apply Changes and Restart JMeter.

Add a WebSocket Sampler

พอ JMeter เปิดมาใหม่แล้วจะพบกับ Sampler อันใหม่ที่ชื่อ “WebSocket Sampler”
newSamplernewWss

Fill The Form

กรอกข้อมูลกันเลย! โดยรวมแล้วมันเหมือนกับ HTTP Sampler นี่ล่ะฮะ. มีจุดต่างเล็กน้อย เช่น
fillData

  1. Implementation: ไม่มีให้เลือกนะฮะ มันบังคับใช้ตัวล่าสุด.
  2. Port Number: ต้องใส่ให้ถูกนะฮะ เพราะว่ามันตั้ง default มาเป็น 80 ซึ่งอาจจะทำให้พัง.
  3. Connection Id: เท่าที่งมดู มันใช้ในกรณีสร้าง WebSocket Sampler เพิ่มอีกอันเพื่อส่งข้อมูลให้ server. ถ้าไม่ใส่ Connection Id ไว้, plugin นี้มันจะเปิด socket เพิ่ม แทนที่จะส่งไปใน socket เดิม.
  4. Streaming Connection (checkbox): ถ้าไม่เลือก มันจะปิด socket ทันทีที่ได้ response.



  5. Response pattern (regex): เอาไว้เช็คว่า response อยู่ใน regular expression ที่กำหนดหรือไม่.
  6. Close connection pattern (regex): ถ้า response ตรงกับ regular expression ที่กำหนด, มันจะปิด socket.
  7. Proxy Server: ใช้ไม่ได้นะฮะ.

 

Issues

ปัญหาสำคัญที่พบก็คือ มันไม่รองรับ cookies และ headers. ซึ่งแปลว่า wss ที่ authen โดยใช้การเช็ค token จาก cookies จะไม่สามารถทำงานได้นะฮะ. แต่ยังดีที่โลกเรามีคนใจบุญไปแก้ไว้ให้แล้ว แต่มันยังไม่ได้เอาไปรวมกับตัว plugin, ดังนั้นเราต้องไป download JAR file เอาเอง แล้วเอาไปวางที่ \lib\ext. ดูรายละเอียด.

แต่ทว่าตัว plugin มันไม่บอกเราเลยสักนิดว่ามันส่ง header อะไรไปบ้าง ซึ่งบางครั้งเราก็จะงงว่า เอ๊ะ สรุปว่า cookies มันส่งไปมั้ยนะ. วิธีเดียวที่จะดูได้คือต้องไปเอาโค้ดของ plugin ลงมาโม ใส่ log แล้ว build และเอาไปวางใน plugin folder. ใครที่อยากดูก็ download ตัวที่ผมแก้ไว้ให้แล้วไปใช้ได้ โดยเอาไปวางที่ \lib\ext.

Leave a Reply

Your email address will not be published. Required fields are marked *