KBTG: AUTOMATION TECH THE SERIES
[Automation Tech the Series] Ep.4 ทำ Test Automation ให้ Automate ขึ้นไปอีก ด้วย CI/CD Tool จากทาง DevOps
ปกติเวลารัน Test Automation ที่เราเขียนไว้ ภาพที่มีคือการที่ต้องมารันบนเครื่อง ต้องมาคอยมอนิเตอร์ ต้องมาคอยเก็บ Test Result ซึ่งมันไม่สะดวกอย่างแรง ทั้งกินเวลา แถมกินทรัพยากรเครื่องคอมเราอีกต่างหาก (คอมช้าทำงานอื่นไปด้วยไม่ได้นะเออ 😆) จะดีกว่าไหมถ้าเรามีอะไรซักอย่างมาช่วยรัน Test Automation แทนเรา เก็บ Test Result และคอยแจ้งเตือนเวลามีปัญหาเกิดขึ้น!
ใน Automation Tech the Series Ep.4 นี้จะมาพูดถึง Tool ตัวนั้น ตัวที่พาการทำ Test Automation ไปเจอกับ DevOps เพื่อให้ Test Automation มัน Automate ขึ้นไปอีก
ก่อนอื่นเรามารู้จักกับ DevOps ก่อน
DevOps คือการนำคำ 2 คำมาผสมกัน ระหว่าง Dev ที่มาจากคำว่า Development และ Ops มาจากคำว่า Operations แต่ในที่นี้เราจะเน้นไปที่ทีม/กลุ่มคน (DevOps Engineer) พี่ๆ เขามีความสามารถในการ Coding และทำงานด้าน Operations ได้ มีความรู้และความเชี่ยวชาญหลากหลายแบบเกี่ยวกับ Operations และ Automation Tools ต่างๆ รู้ว่าตัวเองควรจะอยู่จุดไหนของการออกแบบและการพัฒนางาน มี Soft Skills ในการทำงานร่วมกับทีมอื่นๆ
ถ้าอ่านต่อแล้วรู้สึกบางส่วนที่ไม่ใช่ Area ของ Test Automation
Area นั้นเราจะได้ซัพพอร์ตจากพี่ๆ DevOps กลุ่มนี้นั่นเอง
รู้จักคนแล้ว ไปกันต่อที่ Tool ซึ่งก็คือ…
Jenkins
Jenkins เป็น Tool ตัวนึงที่นำมาใช้ทำ CI/CD (Continuous Integration/Continuous Delivery) เพื่อให้เราสามารถผลิตและส่งมอบ Software ไปยังผู้ใช้ได้อย่างต่อเนื่อง เกิดความราบรื่น และลดต้นทุนด้านเวลาในระหว่างการพัฒนา Software โดยอาศัยหลักการของ Automation คือการทำทุกอย่างให้เป็นไปอย่างอัตโนมัติ ตั้งแต่ Build Source Code, Test, Release ไปจนถึง Deploy
ในการใช้ Jenkins ของ Test Automation เราจะนำความสามารถของมันมาช่วยรัน บวกกับมาช่วยเก็บ Test Result แทนเรา ซึ่ง Process ของการทำงาน Jenkins สำหรับงาน Test Automation จะเป็นตามภาพด้านล่าง
ก่อนที่จะใช้งาน Jenkins สิ่งที่ต้องเตรียม มีอยู่ 3 ส่วนหลักๆ ได้แก่
- Test Script ที่เก็บไว้บน Source Control (GitLab)
- Jenkins ซึ่ง DevOps จะเป็นคนจัดการเตรียมและซัพพอร์ตเรื่องการใช้งานให้
- Worker เครื่องคอมที่จะให้ Jenkins เอา Test Scripts ไปรันบนนั้น
เสริมเรื่อง Worker
Worker หลักๆ ของเราจะมี…
- Dockers (Linux Base) เป็นเครื่องหลัก เอามาช่วยใช้รันเทส non-GUI
- Windows Pool (VM) เอาไว้รันเทส Windows Application
- Mac มารันเทสกลุ่ม Mobile
สำหรับตัว Worker เราเตรียมร่วมกับทาง DevOps พร้อมกับพัฒนาตัว Jenkins Shared Library ที่ทำให้การใช้งานเครื่องเหล่านี้ทำได้ง่ายและสะดวกขึ้น
มาถึงตรงนี้ขอเสริมที่หลายๆ คนอาจจะงง เราจำเป็นจะต้องเลือกตัว Worker ให้เหมาะสมกับการทำ Test Automation ของเรา ดูวิธีการทดสอบ Application Type ที่เกี่ยวข้องและความเหมาะสม ซึ่งวิธีการทำงานเบื้องต้นจะเป็นภาพด้านล่าง พร้อมทั้ง Action ที่เวลา Worker ตัวนึงถูกสะกิดเรียกให้มาทำงานมีอะไรบ้าง
ถึงเวลาใช้งาน Jenkins
ให้ทำการสร้าง Pipeline ซึ่งอันนี้แล้วแต่ Style ของแต่ละที่ (ต้องดูเพิ่มและให้เหมาะกับทีมงาน) อย่างที่ KBTG เราจะใช้ Jenkinsfile (Groovy Script) เป็นหลัก
// Sample Jenkinsfilestage ('AUTOMATION TEST'){
container('robotframework') {
script {
sh """
robot --nostatusrc -F robot -L TRACE -P libs -v DEVICE:* sit_tests
rebot --nostatusrc --removekeywords all -l NONE -r NONE -o output.xml output.xml
"""
}
}
stage ('PUBLIC TEST RESULT'){
step([
$class: 'RobotPublisher',
disableArchiveOutput: false,
outputFileName: 'output.xml',
reportFileName: 'report.html',
logFileName: 'log.html',
otherFiles: '*.png',
outputPath: '.',
passThreshold: 100,
unstableThreshold: 0
]);
emailext( ...
ถ้าอยากรู้รายละเอียดเพิ่มของการ Build Container สำหรับ Automation รอติดตาม Content ฝั่ง DevOps ในอนาคตได้ที่ https://medium.com/kbtg-life
และจะมี Stage การทำงานเต็มๆ ตามภาพด้านล่าง
Stage
- Pull Code ดึง Test Scripts ลงบน Worker
- Prep Environment เนื่องจากเครื่อง Worker จะเป็น Pool ตรงกลางที่เราแชร์ให้กับทุก Application มาใช้งาน ดังนั้นการเตรียมการพิเศษบางอย่างจะเกิดขึ้นตรงนี้ เช่น DataPrep, Install Package, Config Network, Etc.
- Smoke Test เพื่อกันความผิดพลาดหรือปัญหาบางอย่างที่อาจจะกระทบต่อการทำ Test Automation เราจะเช็ค Application หรือ System ก่อนด้วยการ Smoke Test
- Automation Test รันเทสบนเครื่อง Worker จาก Command หรือ Automated Test Tool ที่ถนัด
- Public Test Result (+Raise Defect) นำผลไป Public ให้กับส่วนอื่นๆ ไม่ว่าจะเป็นบน Jenkins เอง (ผ่าน Robot Framework Plugin), Mail, Test Management Tool อย่าง HPQC รวมไปถึงการเปิด Defect บน Jira เพื่อให้ทราบปัญหาของ Application จากการทดสอบผ่าน Test Automation
- Record Dashboard บันทึกผลขึ้น Dashboard (Grafana) ส่วนกลาง แสดงผล Real Time
ทีนี้เราก็จะได้ Test Automation Pipeline ที่สามารถให้ Jenkins รัน Test Automation ให้เราได้ ซึ่งเราจะมากดรันเอง (Manual) จะให้มันรันเป็นรายวัน รายสัปดาห์ รายเดือน (Schedule) หรือให้ Deploy Pipeline มาเรียกมันทำงานก็สามารถทำได้ทั้งนั้น
รวมทั้งควบเรื่องการเก็บ Test Result (เช่น Log, Report, Output, Attachment) ยาวไปจนถึงเก็บข้อมูลที่เป็นประโยชน์ เช่น Metadata, Execution Time, Cost Avoidance (ร่วมคำนวณกับข้อมูลอื่นๆ) ของการทำ Test Automation ได้ในที่เดียว 😎
สรุป
ในปลายทางการทำ Test Automation ของทุก Application ใน KBTG จะต้องเป็นภาพนี้ และกลายเป็นส่วนหนึ่งของการทำ CI/CD ให้ Full Loop และ Test Automation จะ Automate มากกว่าเดิม แล้วพบกันใหม่ใน Automation Tech the Series ตอนต่อไป 👋
Read More
สำหรับชาวเทคคนไหนที่สนใจเรื่องราวดีๆแบบนี้ หรืออยากเรียนรู้เกี่ยวกับ Product ใหม่ๆ ของ KBTG สามารถติดตามรายละเอียดกันได้ที่เว็บไซต์ www.kbtg.tech