ในการทดสอบระบบ Web application ด้วย Robot framework
หนึ่งในปัญหาและสิ่งที่ต้องทำซ้ำ ๆ เสมอคือ
- การติดตั้ง python
- การติดตั้ง library ต่าง ๆ เช่น robot framework และ selenium2library ผ่าน pip
ยังไม่พอนะ ยิ่งนำการทดสอบไปทำงานร่วมกับระบบ Continuous Integration ด้วยแล้ว
ก็ยิ่งลำบากในการติดตั้งอีก เช่น
- การ configuration
- การทดสอบแบบ Headless ผ่าน Xvfb virtual display
ซึ่งทั้งหมดนี้ทำบ่อยจนน่าจะเบื่อแล้ว
ดังนั้นมาลองทำ image ด้วย Docker ไว้ใช้กันดีกว่า
เริ่มต้นด้วยสิ่งที่ต้องการประกอบไปด้วย
- ระบบปฏิบัติการใช้ Alpine เพราะว่าเล็กดี
- ติดตั้ง python และ pip
- ติดตั้ง robot framework
- ติดตั้ง selenium2library สำหรับทดสอบระบบ web application
- ติดตั้ง firefox และ google chrome รวมทั้ง chrome driver
- ติดตั้ง Xvfb virtual display
ดังนั้นจึงสร้าง Dockerfile ไว้ดังนี้
โดยก่อนที่จะทำการสร้าง container มาใช้งานนั้น
ต้องทำการกำหนดค่าต่าง ๆ เหล่านี้ก่อน
- กำหนดค่าต่าง ๆ สำหรับ Xvfb เช่น ความละเอียดของหน้าจอ
- ทำการ start Xvfb
- ทำการ run ชุดการทดสอบ ซึ่งอยู่นอก container ดังนั้นจึงต้องส่งเข้ามาเอง
- หยุดการทำงานของ Xvfb
สามารถเขียน shell script ได้ดังนี้
เมื่อทุกอย่างเรียบร้อยก็ทำการสร้าง image ด้วยคำสั่ง
docker build -t docker-robot-framework .
จากนั้นทำการ run container เพื่อทดสอบระบบงานด้วย robot framework
โดยชุดการทดสอบตัวอย่าง
จะอยู่ใน folder ชื่อว่า robots ซึ่งอยู่นอก container
ดังนั้นจึงต้องกำหนด volume เข้าไปด้วยเสมอ
ใช้งานด้วยคำสั่ง
docker run --rm \ -e ROBOT_TESTS=/robots/ \ -e BROWSER=firefox \ -v $(pwd)/robots:/robots \ -ti docker-robot-framework
ผลการทำงานเป็นดังนี้
เพียงเท่านี้ก็สามารถนำไปใช้งานแบบสบาย ๆ แล้วครับ
ตัวอย่างของ Dockerfile อยู่ที่ Github::Robot Alpine Docker
ปล. ยังมีปัญหากับ google chrome นะ