มีคำถามที่น่าสนใจคือ
ถ้าเราต้องการบันทึกผลการทดสอบ 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
การออกแบบระบบ 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 ได้ดังนี้ [gist id="556581f40e67b86412a58a8ce0d29554" file="FontDockerfile"] คำอธิบาย ขั้นตอนการติดตั้งคือ 1. Download font จาก internet 2. ทำการ extract 3. จากนั้นก็ทำการ copy ตามเอกสารการติดตั้งของ font ซึ่งอยู่ในไฟล์ INSTALLจากนั้นจึงทำการสร้าง image ของ 3 ส่วนการทำงานได้ดังนี้
โดย image ทั้ง 3 ตัวใช้ base image จาก python:alpine ทั้งหมด แต่ก็ยังมีขนาดใหญ่เนื่องจาก library ที่ทำการติดตั้ง ซึ่งน่าจะลดลงได้อีกมาก !! [gist id="556581f40e67b86412a58a8ce0d29554" file="image.txt"] ซึ่งผม 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 ที่ต้องการทดสอบ