feature-image-how-to-use-test-data-in-robot-framework
feature-image-how-to-use-test-data-in-robot-framework

สรุปสั้นๆก่อนอ่านเนื้อหา

การจัดการกับ Test Data ใน Robot Framework มีหลากหลายวิธีมาก แต่วิธีที่ทุกคนชอบใช้กันก็คือ เอาไฟล์ test data ใส่ใน excel ไฟล์ หรือ csv เพราะมันสามารถอ่านง่ายกว่า และแก้ไขง่ายด้วย แต่ด้วยวิธีนี้ทําให้เราต้องมาเขียน Library เพิ่มเพื่ออ่านไฟล์ ซึ่งมันสามารถดูได้จากเนื้อหาในบทความนี้ ว่าอะไรเป็นอะไร เพื่อให้เข้าใจง่ายขึ้น และเขียนต่อยอดได้เอง

Test Data คืออะไร?

การเขียนเทสไม่ว่าจะบนเว็ป มือถือ หรืออื่นๆ เราต้องมีการออกแบบ Test Cases ที่เราต้องการจะทําการเทส และ เตรียมข้อมูลที่จะใช้ในการเทสเช่น username,password และ รายละเอียดอื่นๆที่จําเป็นสําหรับการเทส scenario นั้นๆ เพื่อให้การทดสอบเป็นไปเหมือน user มาใช้งานจริงๆมากที่สุด ซึ่งในบางครั้งข้อมูลที่เราต้องเตรียมน่ะ มันไม่ได้มีแค่ 5-10 อย่าง มันอาจจะมีเป็น 100 เป็น 1,000 อย่างเลยก็เป็นได้ พวกนี้นี่แหละคือ Test Data สิ่งเหล่านี้ถ้าไม่มีการแมนเนจและออกแบบ Test cases ที่ดีจะก่อให้เกิดปัญหาในการจัดการภายหลัง Definition Test Data

RobotFramework กับ Test Data

โชคดีที่ RobotFramework เองได้ออกแบบรับมือเรื่องของ Test Data ไว้แล้วตั้งแต่สร้าง Robot Framework โดยเราสามารถดูได้จาก Architecture ของตัว Robot Framework เอง

robotframework-architecture
robotframework-architecture

จะเห็นได้ว่ามันแบบเป็น Layer ชัดเจนเพื่อใช้ในการแมนเนจ Test Data โดยเฉพาเลย

ซึ่งใน Robot Framework นั้นรองรับ Test Data ถึง 3 แบบคือ

  1. HTML format (.html)
  2. TSV format (tab-separated values .tsv)
  3. Plain txt format (.txt)
  4. reStructuredText format (.rst,.rest)

HTML format (.html)

จริงๆโดยส่วนตัวไม่ค่อยเคยเห็นใครใช้ HTML format ในการจัดการกับ test data มากนัก เพราะว่าการใช้ HTML เป็นไฟล์ test data เน่ยมันจะมีปัญหาเรื่องของ structure ของ html syntax เอง เช่น รองนึกว่า เราต้องการจะแก้ test data จํานวน 100 ตัว แต่แล้วอยู่ดีๆ แทนที่เราจะแก้ไขแค่ test data แต่เราจะต้องมานั่งแก้ html syntax ด้วย เช่น เพิ่ม tr,td มันก็ไม่สนุกแล้วล่ะ เพราะจะแก้แค่ test data อย่างเดียวเป็นไปไม่ได้ เลยจะค่อนข้างยุ่งยากทีเดียว ข้อดีก็คงเป็นที่มัน Display ได้สวยงามนั้นแหละ ตัวอย่างไฟล์

TSV format (tab-separated values .tsv)

ฟังดูแล้ว งงๆ เพราะเราไม่ค่อยได้ใช้จริงๆแล้วมันแปลง่ายมากก็คือ ไฟล์ test data ที่แบ่งกันด้วย Tab นั้นแหละ ซึ่งไฟล์พวกนี้สามารถแก้ไขได้ง่ายมากเช่น text editor เปิดมาก็แก้ไขได้เลย หรือจะใช้ excel เปิดก็ได้ ซึ่งเจ้านี้มันดีมากกับการแก้ไขเลยล่ะ เพราะเราไม่ต้องแก้ไข syntax อื่นๆเพิ่มเหมือน html format น่ะ ตัวอย่างไฟล์

โดยการทํางานของมันก็คือ Robot Framework ก็จะ Parse ไฟล์ .tsv เข้าไป แล้วก็จะ remove double quote ออก เพราะบาง SPreadsheet programs มันจะสร้าง quotes ขึ้นมา หลังจากนั้นก็จะถึงเอาข้อมูลมาเก็บเป็น rows ๆไป

Plain txt format (.txt)

จริงๆแล้ว plain txt เนี่ยไม่ได้แตกต่างอะไรจาก tsv มากนักเลย เพราะว่าวิธีการทํางานเหมือนกันมาก เจ้า tsv ใช้ tabs แต่ plain text ใช้อะไรก็ได้ spaces หรือ pipe ในการแบ่งก็ได้ เช่น ”   ” หรือ ” | ” 2ตัวนี้ในการแบ่งนั้นเอง หรือจริงๆจะใช้ tab เหมือนกับ tsv (แต่ plain text multiple tab จะ เท่ากับ seperator 1ตัว แต่ถ้า tsv every tab จะเป็น seperator ทั้งหมด)

reStructuredText format

เจ้าตัวนี้คนเราอาจจะไม่ค่อยได้ใช้เท่าไร แต่มันเป็น easy-to-read plain text markup syntax ตัวอย่างก็จะเป็นแบบด้านล่างนี้

example-code-block-test-data-robot-framework
example-code-block-test-data-robot-framework
example-table-resturcture-test-data-robot-framework
example-table-resturcture-test-data-robot-framework

ซึ่งดูไปๆมาๆแล้วมันก็ไม่ใช่เรื่องที่สะดวกสบายเลย ฮ่าๆ อ่านแล้วยังไม่เห็นเข้าใจง่ายอย่างที่คิดเลย reStructuredText format ก็ตามที

จบแล้วทฤษฐี มาดูโลกความเป็นจริงว่าใช้ Test Data อะไรกัน

ที่พูดไปมาทั้งหมด…..ไม่ได้ใช้เลยล่ะ แหะๆ เพราะจริงๆแล้วส่วนตัวไฟล์ที่เราใช้จริงๆแล้วนั้นอะ ก็คือ

  • Excel
  • CSV (command-separated values)

เท่านั้นแหละ ไม่ได้ใช้ไฟล์พวกที่พูดมาเลยเลย ฮ๋าๆ

เพราะความเป็นจริงนั้นเราอจจะต้องมองว่าไฟล์ที่เราทําเป็น test data มันจะไปเชื่อมโยงกับคนอื่นๆเช่นให้ทีมอื่นๆดูด้วย หรือ เอามานั่ง review ด้วยกัน การที่จะใช้ text file มานั่งไล่บรรทัดกันคงลําบาก เพราะฉะนั้นเราควรที่จะเลือกที่มันใช้งานง่ายๆหน่อย

แล้วทําไง? ไฟล์ไม่ Supportในการใช้เป็น Test Data

ไฟล์ไม่ support ….. เราก็สร้าง library อ่านเองสิ ไม่เห็นยากอะไรเลย

CSV

สําหรับ csv เองก็มี CSV Module ที่พร้อมให้เราใช้งานอยู๋แล้วคือ CSV File Reading and Writing สิ่งที่เราต้องทําก็ไม่ยากเลย มี step 3 อย่างเอง

  1. ก็คือแค่เขียน python ขึ้นมาไฟล์นึงเพื่อใช้ในการเรียก Module CSV นี้

    example-of-csv-reader-in-python
    example-of-csv-reader-in-python
  2. แล้ว import library นี้เข้ามาใน Robot Framework File ที่ต้องการจะเทส
  3. หลังจากนั้นก็แค่เรียก Keyword ใช้งานเท่านั้นเอง เช่น Unicode Csv Reader เท่านี้เอง อ่านไฟล์ได้ล่ะ

ทีนี้เราก็จะได้ LIST ของ data มาใช้แล้ว

แล้วก็อย่าลืมเวลามันกลับมาเนี่ยมันกลับมาเป็น List แต่เราจะไปรับค่าแบบ List ตัวเดียวไม่ได้ เราต้องเอาทั้ง Object ของมันจากบทความ เทคนิคการใช้ Argument ใน Robot Frameworkนี้

robotframework-scalar-object-example
ตัวอย่างการใช้งาน scalar เก็บ Object ใน robot framework

ไม่งั้นถ้าเราไปรับค่าเป็น List @ อย่างเดียว รับรองพังครับพี่น้อง…..

ตัวอย่างการใช้งาน scalar เก็บตัวแปรใน robot framework
ตัวอย่างการใช้งาน scalar เก็บตัวแปรใน robot framework

ซึ่งแปลว่าหลังจากได้ List Object แล้ว เราก็เอาไปวนลูปใช้งานมันได้เลย ไม่ต้องแก้ไขอะไรเพิ่มเติมเลย มันจะออกมาเป็นแถวๆของข้อมูลที่มีใน CSV นั้นๆ

Noted:

เวลาเราทํา Test Data เนี่ยจุดควรระวังเลยคือ ไฟล์อะมันต้องทําการแปลง utf-8 เพราะว่าบางที character บางตัวมันมีปัญหานั่นเอง เวลาแสดงผล ในตัวอย่างเลยมี def utf_8_endcoder ทุกครั้งในการอ่านไฟล์แต่ละไฟล์นั่นเอง

Excel

จริงๆ excel ก็ไม่ได้อยากอะไร เพียงแต่มันมีข้อจำกัดบ้างไปหน่อยแค่นั้นเอง มาดูกันว่า robot framework อ่าน excel ต้องรู้ไรบ้าง

  1. Library ยอดนิยมสําหรับจัดการ excel http://navinet.github.io/robotframework-excellibrary/ 
  2. Python Excel เกิด package หลายอย่างรวมกันนั่นก็คือ openpyxl, xlsxwriter, xlrd, xlwt, xlutils รวมตัวกันอยู่ในนี้เลย python-excel.org
  3. natsort เจ้าตัวนี้ช่วยในการ sort list number เพราะว่าเวลาถ้าเรา sort list ที่ contain ตัวเลขเนี่ย เวลากด sort มันจะไม่สามารเรียง order ได้ถูก เช่น
    example-sort-list-with-number-python
    example-sort-list-with-number-python

    เจ้าตัว natsort เนี่ยมันจะช่วยแก้ปัญหาออกมาเป็นแบบนี้

    nartsort-example-sort-list
    nartsort-example-sort-list

     

แต่จริงๆพอเราลง robotframework-excelibrary มันก็จะดึงทุกอย่างลงมาให้เอง โดยที่เราไม่ได้ไปยุ่งเกี่ยวกับอย่างอื่น เพียงแต่รู้ไว้ก็ดี เพราะถึงเวลาเราไป แก้ไขโค้ด หรือสร้าง function จะได้รู้ว่ามันคืออะไร

นี่คือ Source code ของ ExcelLibrary ที่เราใช้ๆกัน

example-robotframework-excel-library-source-code
example-robotframework-excel-library-source-code

จะเห็นว่ามันมีการเรียกใช้ natsort, xlrd, xlwt, xlutils เต็มไปหมดเลย

Noted:

  • xlrd = python package ใช้ในการ อ่าน data ของ excel file สําหรับ version เก่าหรือพวก xls
  • xlwt = python package ใช้สําหรับการ write data ของ excel file สําหรับ version เก่าหรือพวก xls
  • xlsxwriter = python package ใช้สําหรับการ write data ของ excel file สําหรับ version เก่าหรือพวก xlsx
  • openpyxl = python package ใช้สําหรับการ write data ของ excel file สําหรับ version เก่าหรือพวก xlsx

ถ้าย้อนกลับไปดู source code ที่ library นี้ Import เข้ามา จะเห็นเลยว่ามันไม่ได้ใช้ xlsxwriter กับ openpyxl เลยน่ะ แปลว่าไร?

แปลว่า http://navinet.github.io/robotframework-excellibrary/ ไม่สามารถใช้กับ excel version ใหม่ได้ หรือหมายถึง xlsx นั่นเอง!! (e.g. 2010 ขึ้น)

เห็นมะ พอเรารู้ที่มาที่ไป เราก็จะเข้าใจว่าทําไมมันใช้ไม่ได้ ที่นี้วิธีแก้ก็ง่ายๆเลย เรา save file เป็น xls ได้ใน excel นั่นเอง เป็น workaround ง่ายๆ หรือเราจะ folk ออกมาเขียนใหม่ก็ได้ โดยไปดูวิธีเขียนจาก openpyxl กับ xlsxwriter นั่นเอง

ตัวอย่าง Robot Framework Excel

ไฟล์สามารถดูใน github ได้เลย

แต่หลักๆคือเราสามารถใช้ keyword ที่มีไว้ให้ในการ Read – Write excel ไฟล์ได้เลย ตามตัวอย่างด้านล่างนี้

excel-robot-framework-example
excel-robot-framework-example

จะเห็นว่า step ที่เราต้องรู้ก็ไม่ยากอะไรแค่

  1. เปิด Excel ไฟล์
  2. รู้ตำแหน่ง row,column ที่ต้องการจะ read หรือ write
  3. Put “some data” To Cell
  4. Put Data เสร็จก็ save excel แค่นั้นเอง

จากการ Review Keyword คร่าวๆแล้ว ถ้าจะเอามาจัดการ Test Data น่าจะพออยู่ ไม่น่าจะมีปัญหาอะไร เพราะเราก็แค่ ใช้ For-Loop วนตามแถวหรือ Rows ให้หมด แล้วการดึงค่าออกมาใช้งานใน Keyword อื่นๆ น่าจะไม่มีปัญหา อาจจะมีเรื่องควรระวังเรื่อง Date-time format แต่ก็คิดว่าไม่มีอะไร ใช้งานทั่วๆไปไว้อยู่

Leave a Reply

avatar

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