Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Apache JMeter ::  ต้องการกระจายการทดสอบแต่ละ Sampler แบบเปอร์เซ็นต์

$
0
0

Screen Shot 2558-11-09 at 9.34.17 PM

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 มากที่สุด

Viewing all articles
Browse latest Browse all 1997

Trending Articles