เทคนิคการใช้ For loops ใน Robot Framework
ในบทความนี้จะมาอธิบายเรื่องการใช้ For loops ใน Robot Framework รูปแบบต่างๆ
- Old for loop syntax
- Simple for loop
- Nested for loops
- Using several loop variables
- For-in-range loop
- For-in-enumerate loop
- For-in-zip loop
- Exiting for loop
- Continuing for loop
ใน Robot Framework สามารถใช้ For loop ได้สองรูปแบบดังนี้
แบบที่ 1 สามารถใช้งานได้กับ RF Version 3.1 ขึ้นไป
แบบที่ 2 สามารถใช้งานได้ใน Version 3.0.x ลงมา และใน Version 3.2.x แต่จะมีการแจ้งเตือนเป็น warning ไว้ครับ
Simple For loop
for loop ประเภทนี้จะวนซ้ำทำงานทีละค่า สามารถระบุค่า ภายใน loop หรือ เก็บข้อมูลในรูปแบบของ List ตามตัวอย่างด้านล่าง
Example
FOR ${no} IN one two three
Log ${no}
END
Example In List
@{NO} Create List 1 2 3 4
FOR ${no} IN @{NO}
log ${no}
END
Nested for loops
ใน Robot Framework นั้นไม่สามารถเขียน Loop ซ้อนกันได้เหมือนในภาษา Java หรือ ภาษาอื่นๆ ถ้าหากจำเป็นใช้ จำเป็นต้องสร้างเป็น Keyword ขึ้นมาเพื่อใช้งาน หรือเขียน Lib Core Python ขึ้นมาเพื่อใช้งานเพิ่มเติมได้
*** Keywords ***
Handle Table
[Arguments] @{table}
FOR ${row} IN @{table}
Handle Row @{row}
END
Handle Row
[Arguments] @{row}
FOR ${cell} IN @{row}
Handle Cell ${cell}
END
Using several loop variables
เป็นการใช้ For loop ประเภทหลายตัวแปร
Three loop variables
FOR ${index} ${noenglish} ${nothai} IN
... 1 one หนึ่ง
... 2 two สอง
... 3 three สาม
Log ${index} ${noenglish} ${nothai}
ENDTwo loop variables in list
@{EMPLOYERS} Create List 1 one หนึ่ง 2 two สอง
FOR ${index} ${english} ${finnish} IN @{EMPLOYERS}
Log ${index} ${english} ${finnish}
END
For-in-range loop
Only upper limit
# For loop จะเริ่มทำงานตั้งแต่ 0-9
FOR ${index} IN RANGE 10
Log ${index}
ENDStart and end
# For loop จะเริ่มทำงานที่ตำแหน่ง 5-10
# สามารถใส่ +1 เพิ่มได้ถ้าหากต้องการให้ Loop ทำงานถึง 11 รอบ
FOR ${index} IN RANGE 5 11
Log ${index}
ENDAlso step given
# เป็นการกำหนดตำแหน่งให้ Loop โดยจะทำงาน 3 รอบ ใน index ที่ 5,26,10
# สามารถกำหนด ให้ตำแหน่งเป็น - ได้โดยใส่ เครื่องหมาย -5 , -26
FOR ${index} IN RANGE 5 26 10
Log ${index}
END
For-in-enumerate loop
มีหลักการทำงานเหมือน Simple loop ทั่วไป แต่จะมีการรีเทิร์นค่า index ของ Loop ออกมาด้วย เหมาะสำหรับหากภายในลูป มี Keyword ที่ต้องการตำแหน่งไปใช้ต่อ ทำให้เราสามารถเขียน loop ได้สั้นลง
For-in-enumerate
FOR ${index} ${item} IN ENUMERATE 1 2 3 4
Log ${index}
Log ${item}
END
For-in-zip loop
เป็นคำสั่งสำหรับใช่รวม 2 lists จับคู่เป็น lists เดียวกันและจะทำงาน วนลูบจำนวนรอบเท่ากับ lists ที่สั้นที่สุด
ตัวอย่างเช่น
*** Variables ***
@{ABC} a b c
@{XYZ} x y z
@{NUM} 1 2 3 4 5
*** Test Cases ***
For-in-zip with multiple lists
FOR ${a} ${x} ${n} IN ZIP ${ABC} ${XYZ} ${NUM}
Log Many ${a} ${x} ${n}
END
For-in-zip with one variable
FOR ${items} IN ZIP ${ABC} ${XYZ} ${NUM}
Length Should Be ${items} 3
Log Many ${items}[0] ${items}[1] ${items}[2]
END
Exiting for loop
หลักการทำงานคือ จะมีเงื่อนไขดักอยู่ใน for loop เพื่อให้หลุดลูบก่อนถึงรอบที่จะกำหนด โดยการกำหนดเงื่อนไข ตามตัวอย่างด้านล่าง สามารถออกจาก for loop ได้ 2 Keyword คือ Exit For Loop , Exit For Loop If
*** Test Cases ***
Exiting for loop
FOR ${var} IN a b c
Run Keyword If '${var}'=='c' Exit For Loop
Exit For Loop If '${var}'=='c'
log ${var}
END
Continuing for loop
หลักการทำงานคือ เมื่อ For loop ทำงานถึง Keyword Continue For Loop , Continue For Loop If For loop จะข้ามไปทำงาน รอบถัดไปทันทีหากเข้าเงื่อนไข ตามตัวอย่างด้านล่างนี้ การทดสอบจะไม่ Fail เพราะว่า เราใส่ Continue For Loop ให้ทำงานในรอบถัดไปก่อนที่จะถึงคำสั่ง Fail และจะหยุดทำงานเมื่อรันครบ 1000 รอบ
Continue Example
FOR ${index} IN RANGE 1000
Continue For Loop
Fail
END
หากต้องการดูข้อมูลเพิ่มเติมสามารถดูได้ที ลิ้งด้านล่างครับ
สรุป
ใน Robot Framework นั้นจะมี For loop ทั้งแบบใหม่และแบบเก่า ควรใช้ Robot Framework ในเวอชั่นที่เหมาะสมกับการใช้งาน และใน Robot Framework V 4.0 จะสามารถใช้ ลูป ซ้อน ลูป ได้ตามลิ้งด้านล่าง
Robot Framework 4.0 New For loops Syntax
Be giving, enjoy sharing. :)