คำถาม
ถ้าต้องการกำหนดให้แต่ละ 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 คน
แสดงดังรูป
ผลการทดสอบเป็นดังรูป
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
ดังนั้นจะได้ข้อมูลดังนี้ 0000111223
จากนั้นทำการเขียน script ใน Apache JMeter นิดหน่อย เพื่อ Random ค่าใน Switch value
ดังนี้
${__javaScript( var s="0000111223"; new Number(s.charAt( Math.floor(Math.random()*s.length) )) )}
ผลการทดสอบเป็นดังรูป
ซึ่งแน่นอนว่าผลไม่ถูกต้องตามที่เราต้องการ
เนื่องจากเป็นการ Random ให้ให้น้ำหนักเท่านั้นเองนะ
แต่ก็ใกล้เคียงกับสิ่งที่ต้องการเช่นเดียวกัน
ลองดูว่าทั้งสามวิธีนี้
วิธีไหนที่เหมาะกับ use case มากที่สุด