มีคำถามที่น่าสนใจคือ

ถ้าเราต้องการบันทึกผลการทดสอบ UI testing แบบอัตโนมัติในรูปแบบ VDO ได้ไหม ?

ตอบง่าย ๆ ก็ได้นะ ทำง่ายด้วย
คือเครื่องที่ทดสอบก็เปิดโปรแกรมบันทึก VDO เอาเลย
หรือไม่ก็ตั้งกล้องหน้าจอกันไปเลย

แต่วิธีการดังกล่าวมันอาจจะจะไม่โดนใจเราเท่าไร
ดังนั้นจึงเป็นที่มาของการทดลองสร้างระบบง่าย ๆ
โดยรวมใช้เวลาในการศึกษาและลองสร้าง
จนได้ prototype ของสิ่งที่ต้องการประมาณ 4 ชั่วโมง

จึงทำการสรุปไว้นิดหน่อย

Software ที่ใช้งานประกอบไปด้วย

  • ffmpeg สำหรับบันทึกการทดสอบในรูปแบบ VDO
  • xvfb (X Virtual Frame Buffer) เป็น virtual display ซึ่งทำงานอยู่บน memory ทำให้เราสามารถ run UI test โดยไม่ต้องมีหน้าจอ (Headless)
  • Robot framework + Selenium2Library สำหรับทดสอบระบบ Web application
  • Browser ที่ใช้ใน prototype ชุดนี้คือ Google Chrome
  • ระบบปฏิบัติการที่ใช้งานคือ Alpine เพราะว่าเล็กดี
  • จัดการทุกอย่างอยู่ในโลกของ container ด้วย Docker

ปล. ถ้าทำการติดตั้งและ configuration บนเครื่องแบบปกติได้แล้ว
การใช้งาน Docker จะง่ายขึ้นอีกเป็นกอง

การออกแบบระบบ Prototype

แยกส่วนการทำงานออกเป็น 3 container คือ
1. สำหรับการบันทึกผลการทดสอบเป็น VDO ด้วย ffmpeg
2. สำหรับ virtual display ซึ่งใช้งาน xvfb จะต้องทำการ start xvfb server ทิ้งไว้
3. สำหรับ Robotframework และ Google Chrome

เมื่อแยกกันทำงานแล้ว ปัญหาที่ตามมาคือ

จะทำงานร่วมกันอย่างไร ? เช่น
ffmpeg กับ xvfb container จะทำงานร่วมกันอย่างไร ?
ตามจริงรวมกันทำงานเป็น container เดียวก็จบไปแล้ว
แต่จากที่ออกแบบต้องการให้แต่ละส่วนการทำงานแยกกันทำงานอย่างเป็นอิสระ
เพื่อให้ง่ายต่อการสร้างและดูแลต่อไป
ดังนั้นเพื่อเชื่อมต่อการทำงานทั้งสองส่วน
จึงต้องนำ Python Remote Server for Robotframework
ซึ่งทั้งสอง container จะต้องทำการ run Python remote server ขึ้นมา
โดยมี port default คือ 8270
ตรงนี้ก็เขียนโปรแกรมนิดหน่อย

ต่อมาคือส่วนของ Robotframework และ Google chrome

ก็ติดตั้ง library ต่าง ๆ ตามปกติ
แต่ส่วนที่มีปัญหานิดหน่อยคือ การติดตั้ง font ภาษาไทยใน Alpine linux นิดหน่อย
โดย font ที่ใช้คือ Fonts-TLWG
การติดตั้งก็อธิบายได้ดีเหลือเกิน หาไม่เจอเลย
ต้องทำการ extract ไฟล์ของ font ดังกล่าวมาถึงเห็นวิธีการติดตั้ง
ความจริงงงตั้งแต่การ extract ไฟล์นามสกุล tar.xz แล้วนะ !!

ปล. ไม่มีใครอธิบายส่วนนี้เลย !!

ใน Dockerfile สามารถเขียนการติดตั้ง font ได้ดังนี้

คำอธิบาย
ขั้นตอนการติดตั้งคือ
1. Download font จาก internet
2. ทำการ extract
3. จากนั้นก็ทำการ copy ตามเอกสารการติดตั้งของ font ซึ่งอยู่ในไฟล์ INSTALL

จากนั้นจึงทำการสร้าง image ของ 3 ส่วนการทำงานได้ดังนี้

โดย image ทั้ง 3 ตัวใช้ base image จาก python:alpine ทั้งหมด
แต่ก็ยังมีขนาดใหญ่เนื่องจาก library ที่ทำการติดตั้ง
ซึ่งน่าจะลดลงได้อีกมาก !!

ซึ่งผม upload image ทั้งสามไปไว้ที่ Docker Hub แล้ว
ใครสนใจก็ลแงใช้งานแบบขำ ๆ ได้นะครับ

ต่อมาถึงการใช้งานซึ่งใช้งานผ่าน Docker compose เนื่องจากง่ายดี

มีการ configuration เพิ่มนิดหน่อยคือ

  • ทำการ map volume กับ ffmpeg container เพื่อนำ vdo ที่บันทึกไว้ออกมาง่าย ๆ
  • ทำการ map volume กับ robotframework container เพื่อให้จัดการ test case และ report ต่าง ๆ ได้ง่าย
  • robotframework container นั้นกำหนด entry point ไว้คือ pybot ดังนั้นใน compose file ก็ส่ง command ที่ต้องการซึ่งเป็น parameter ต่าง ๆ ของ pybot ได้เลย
  • จากตัวอย่างจะเป็นการกำหนด output folder และ ไฟล์ test case ที่ต้องการทดสอบ

สามารถเขียนได้ดังนี้

จากนั้นก็ถึงเวลาทดสอบการทำงานด้วยคำสั่งดังนี้

เพียงเท่านี้ก็จะได้ผลการทดสอบในรูปแบบ VDO แล้วครับ
ผลการทำงานดังนี้

Reference Websites
https://devopsism.wordpress.com/2016/06/20/capturing-video-during-test-runs/
https://linux.thai.net/projects/fonts-tlwg
https://github.com/robotframework/PythonRemoteServer