![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 นั้นสามารถทำได้หลายวิธี เช่น
- แยก Thread Group
- ใช้ Throughput Controller
- ใช้ 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]()
ผลการทดสอบเป็นดังรูป
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]()
ผลการทดสอบเป็นดังรูป
3. ใช้ Switch Controller
ทำการกำหนดค่าของ Switch controller ได้ว่าจะให้ทำงานที่ URL ไหนบ้าง
ซึ่งน่าจะเป็นวิธีการที่ยากที่สุดแล้ว
ซึ่งค่านั้นจะอยู่ใน Switch value
แสดงดังรูป
สิ่งที่ยากก็คือ แล้วใน 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 มากที่สุด