คำถาม
ถ้าต้องการกำหนดให้แต่ละ Sampler ใน Apache JMeter
ให้ทำงานตามที่ต้องการแบบนี้ล่ะ
- URL ที่ 1 ให้ทำการทดสอบ 40% จากจำนวนการทดสอบทั้งหมด
- URL ที่ 2 ให้ทำการทดสอบ 30% จากจำนวนการทดสอบทั้งหมด
- URL ที่ 3 ให้ทำการทดสอบ 20% จากจำนวนการทดสอบทั้งหมด
- URL ที่ 4 ให้ทำการทดสอบ 10% จากจำนวนการทดสอบทั้งหมด
- แยก Thread Group
- ใช้ Throughput Controller
- ใช้ Switch Controller
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 คน
2. ใช้ Throughput Controller
เป็น Logic controller หนึ่ง ซึ่งใช้กำหนดการทำงานของ Sampler ที่อยู่ภายใต้ controller ว่าจะให้ทำงานบ่อยเท่าไร ? โดยใน Thread Group กำหนด Number of Thread หรือผู้ใช้งานเป็น 100 สามารถเพิ่ม Throughput Controller ใน Thread Group ดังรูป โดยแต่ละ Controller สามารถกำหนดให้เป็น Percent Executions และกำหนดค่าดังรูป ผลการทดสอบเป็นดังรูป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
${__javaScript( var s="0000111223"; new Number(s.charAt( Math.floor(Math.random()*s.length) )) )}
ผลการทดสอบเป็นดังรูป
ซึ่งแน่นอนว่าผลไม่ถูกต้องตามที่เราต้องการ
เนื่องจากเป็นการ Random ให้ให้น้ำหนักเท่านั้นเองนะ
แต่ก็ใกล้เคียงกับสิ่งที่ต้องการเช่นเดียวกัน
ลองดูว่าทั้งสามวิธีนี้
วิธีไหนที่เหมาะกับ use case มากที่สุด