feature-image-robotframework-argument-technique
บทความสอนเรื่องการใช้ arguments ใน robotframework

เรื่องง่ายๆอย่างการส่ง Argument ไปมาระหว่าง Keyword ฟังดูแล้วเหมือนจะไม่มีอะไร ยุ่งยาก ก็แค่กําหนดค่าว่าจะรับตัวแปรกี่ตัว จะส่งกี่ตัว ก็แค่นั้น

Noted: แบบนี้เรียก Positonal

แต่จริงๆแล้วมันยังมีเทคนิคมากมายที่มีประโยชน์มากๆ เนื่องจาก Robot Framework สร้าง Based on Python เพราะฉะนั้นพวกเทคนิคต่างๆที่ Python ทําได้ Robot Framework ก็ทําได้ด้วยเหมือนกัน ซึ่งวันนี้จะมาพูดถึงเรื่องการใช้งาน *args กับ **kwargs หรือ เรียกอีกอย่างว่า

  • *args = variable length arguments ( use when you’re not sure how many arguments might be passed to your function)
  • **kwargs = keyword arguments ( same as above but kwargs is a dict of the keyword args passed to the function)

อ่านวิธีใช้งานใน Python ได้ที่นี้

แล้วมันมาเกี่ยวอะไรกับ Argument ใน Robot Framework…..

อย่างที่บอกว่า Based on Python เพราะฉะนั้นเราก็สามารถใช้คุณสมบัตินี้กับ Robot Framework ได้เหมือนกัน

Noted: Arguments แบ่งเป็น 4 แบบ positonal, named, vararg, kwargs

  • positional ตามตําแหน่ง
  • named กําหนดชื่อ argument ไว้เลย ซึ่งเราสามารถกําหนดค่า default ของมันไว้ได้ด้วย ถ้าในกรณีข้างบนก็คือ arg= 
  • vararg คือ *args ใช้เมื่อเราไม่รู้จํานวนที่สิ้นสุดของ argument นั้น
  • kwarg คือแบบเดียวกันกบั vararg เพียงแต่จะมาในรูปของ dictionary และไม่สิ้นสุด

จากรูปตัวอย่างจะเห็นได้ว่า ถ้าเราสร้าง python ไว้ชื่อ various_args และสร้าง argument แบบ *args และ **kwargs เราจะสามารถส่งค่า args แบบ Kw และไม่ใช่ kw ได้เลย โดยมันจะแยกจาก argument ที่เราสร้างขึ้นมาเองเลยว่าตัวไหนเป็น keyword ตัวไหนเป็น named หรือ positonal เป็นวิธีนึงเมื่อเราจะสร้าง Library ใช้เอง อ่านต่อที่นี้

แต่

ถ้าเราไม่อยากยุง่ยากขนาดนี้ เราสามารถแค่ทําตัว wrapper user keyword ง่ายๆเลยก็ได้ เพียงแค่กําหนดค่าของ Robot Framework ให้ตรงกัน แล้วถ้าตัวไหนเป็น kw มันจะแมพค่าให้เอง ตามรูปด้านล่าง

จะเห็นว่ามันรับตัวแปรแบบ Positional , named และ kwarg ตามลําดับเลย วิธีนี้จะทําให้เราไม่ยุ่งยากไปสร้าง Python ขึ้นมาใหม่ให้เยอะแยะ แถมยังเอาไปประยุกต์ใช้กับพวก config ต่างๆที่่เป็น Optional ได้ด้วย ตัวอย่างเช่น config ของ WebServer เวลา start หรือ Jmeter นั่นเอง

หรือเราจะเอามาสร้างแบบ *args กับ **kwargs อย่างเดียวไม่มี Positional ก็ได้น่ะแบบตัวอย่างด้านล่าง 

จะเห็นว่ามันจะรับเป็น List ของตัวแปรก่อนหน้า Keyword Arguments ทั้งหมดลง List เลย

มันแยกกันตรง Dicitionary และถ้าจะดูง่ายๆน่ะ

อ่านต่อที่นี้ Free Keyword Arguments

สรุป

เป็นเทคนิคที่ไว้ใช้ในสถานการณ์ของ Robot Framework ที่เราต้องการจะส่งค่าจํานวนเยอะๆไปให้กับ Keyword ใดๆ หรือ ส่งให้ Custom Library ของเรานั่นเอง

Remark:

มีเรื่องน่าสนใจเวลาเรารับค่าโยนค่าของ Robot Framework แบบนี้คือเรื่อง การใช้”$” กับ “@”

  • Scala ไม่ได้ใช้เพื่อเก็บ String อย่างเดียว มันใช้ในการเก็บ Object ด้วย
  • ถ้าเรารับตัวแปรใส่ @แล้ว Log To Console ตรงๆจะเห็นว่ามันดึงค่าแค่ค่าแรกออกมาเพียงเท่านั้น
  • แต่ถ้าใช้ $ จะเห็นว่ามันนํามาทั้ง object

เพราะฉะนั้นเวลาจัดการเรื่อง Arguments หรือ Element ก็ระวังจุดนี้ไว้ด้วยครับ

ตัวอย่าง code ที่พร้อมรันอยู่ที่ repository นี้ครับ

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.