Screen Shot 2558-11-09 at 9.34.17 PM
คำถาม

ถ้าต้องการกำหนดให้แต่ละ Sampler ใน Apache JMeter
ให้ทำงานตามที่ต้องการแบบนี้ล่ะ

  • URL ที่ 1 ให้ทำการทดสอบ 40% จากจำนวนการทดสอบทั้งหมด
  • URL ที่ 2 ให้ทำการทดสอบ 30% จากจำนวนการทดสอบทั้งหมด
  • URL ที่ 3 ให้ทำการทดสอบ 20% จากจำนวนการทดสอบทั้งหมด
  • URL ที่ 4 ให้ทำการทดสอบ 10% จากจำนวนการทดสอบทั้งหมด

จะต้องทำอย่างไร ?

คำตอบ
ใน Apache JMeter นั้นสามารถทำได้หลายวิธี เช่น

  1. แยก Thread Group
  2. ใช้ Throughput Controller
  3. ใช้ Switch Controller

โดยทำการทดสอบบน Apache JMeter 2.13
มาดูแต่ละวิธีกันว่าทำอย่างไร ?

1. แยก Thread Group

น่าจะเป็นวิธีการที่ง่ายที่สุดแล้ว
และเหมาะสำหรับระบบที่มี logic การทำงานง่าย ๆ

สามารถกำหนดให้แต่ละ Sampler แยกกันอยู่ในแต่ละ Thread Group ซะ
เช่น ถ้าทำการทดสอบด้วยผู้ใช้งาน 100 คน
สามารถกำหนดจำนวนผู้ใช้งานในแต่ละ Thread Group ได้ดังนี้

  • URL ที่ 1 ให้ทำการทดสอบ 40% = 40 คน
  • URL ที่ 2 ให้ทำการทดสอบ 30% = 30 คน
  • URL ที่ 3 ให้ทำการทดสอบ 20% = 20 คน
  • URL ที่ 4 ให้ทำการทดสอบ 10% = 10 คน

แสดงดังรูป

Screen Shot 2558-11-09 at 8.03.55 PM

ผลการทดสอบเป็นดังรูป

Screen Shot 2558-11-09 at 8.06.56 PM

2. ใช้ Throughput Controller

เป็น Logic controller หนึ่ง
ซึ่งใช้กำหนดการทำงานของ Sampler ที่อยู่ภายใต้ controller
ว่าจะให้ทำงานบ่อยเท่าไร ?

โดยใน Thread Group กำหนด Number of Thread หรือผู้ใช้งานเป็น 100
สามารถเพิ่ม Throughput Controller ใน Thread Group ดังรูป

Screen Shot 2558-11-09 at 8.12.32 PM

โดยแต่ละ Controller สามารถกำหนดให้เป็น Percent Executions
และกำหนดค่าดังรูป

Screen Shot 2558-11-09 at 8.20.55 PM

ผลการทดสอบเป็นดังรูป

Screen Shot 2558-11-09 at 8.22.21 PM

3. ใช้ Switch Controller

ทำการกำหนดค่าของ Switch controller ได้ว่าจะให้ทำงานที่ URL ไหนบ้าง
ซึ่งน่าจะเป็นวิธีการที่ยากที่สุดแล้ว
ซึ่งค่านั้นจะอยู่ใน Switch value
แสดงดังรูป

Screen Shot 2558-11-09 at 8.41.22 PM

สิ่งที่ยากก็คือ แล้วใน Switch value มันมีค่าอะไรได้บ้าง ?
ตอบได้เลยว่า เป็นได้ทั้ง integer และ string
จากรูปข้างบน
ถ้าเราต้องการให้ URL 1 ทำงาน จะกำหนดค่าเป็น 0 หรือ URL 1
ถ้าเราต้องการให้ URL 2 ทำงาน จะกำหนดค่าเป็น 1 หรือ URL 2

คำถาม
แล้วเราจะกำหนดค่าอย่างไรให้มัน dynamic หรือ กระจายผู้ใช้งานไปแต่ละ URL ล่ะ ?
คำตอบ
มันยากนะ
แต่ลองงคิดหน่อยสิ ว่า สิ่งที่ทำได้คือ
การ Random ตัวเลข และ กำหนดน้ำหนักซะ
โดยการให้น้ำหนักจะเป็นดังนี้

  • URL ที่ 1 ให้ทำการทดสอบ 40% ดังนั้นกำหนด 0000
  • URL ที่ 2 ให้ทำการทดสอบ 30% ดังนั้นกำหนด 111
  • URL ที่ 3 ให้ทำการทดสอบ 20% ดังนั้นกำหนด 22
  • URL ที่ 4 ให้ทำการทดสอบ 10% ดังนั้นกำหนด 3

ดังนั้นจะได้ข้อมูลดังนี้ 0000111223
จากนั้นทำการเขียน script ใน Apache JMeter นิดหน่อย เพื่อ Random ค่าใน Switch value
ดังนี้

${__javaScript( var s="0000111223"; new Number(s.charAt( Math.floor(Math.random()*s.length) )) )}

Screen Shot 2558-11-09 at 9.09.23 PM
ผลการทดสอบเป็นดังรูป
ซึ่งแน่นอนว่าผลไม่ถูกต้องตามที่เราต้องการ
เนื่องจากเป็นการ Random ให้ให้น้ำหนักเท่านั้นเองนะ
แต่ก็ใกล้เคียงกับสิ่งที่ต้องการเช่นเดียวกัน

Screen Shot 2558-11-09 at 9.10.48 PM

ลองดูว่าทั้งสามวิธีนี้
วิธีไหนที่เหมาะกับ use case มากที่สุด

Tags: