ช่วงนี้จำเป็นต้องทดสอบ Mobile App ที่พัฒนาด้วย React Native จึงได้ลองนำ Detox Test Framework มาใช้งานแทน Appium ในการทดสอบ Mobile App เนื่องจาก Appium มีปัญหาในเรื่อง Performance เวลาทดสอบเพจที่มี Element เยอะๆ และปัญหาความไม่เสถียรของ test script
Detox คืออะไร
Detox เป็น Cross platform test framework ที่พัฒนามาเพื่อทดสอบ iOS & Android Application
Detox วางตัวเองเป็น Gray box end-to-end test framework หรือก็คือเป็น framework ที่จำเป็นต้องเข้าถึง process ของ app ที่เราจะเทส โดยมีการ monitor สถาณะของแอพ และไม่ต้องพึ่งพา Web Driver Agent แบบ Appium
ถ้าทีมใครใช้ React Native ในการพัฒนา App ล่ะก็ Detox เองประกาศตัวว่าเป็น first level support ให้ React Native หมายความว่า feature ต่างๆ และรูปแบบการใช้งาน รองรับการทดสอบ App ที่พัฒนาจาก React Native โดยเฉพาะเลย
เราสามารถเขียน test script ด้วยภาษา Java script / Type script ก็ได้
Detox ต่างกับ Appium ยังไงบ้าง
Detox client คุยกับ server ผ่าน Web Socket ซึ่งไม่ต้องเปิด connection ซ้ำๆ แบบ Appium ที่ใช้ REST API
Detox มีการตรวจสอบสถาณะของ App แบบอัตโนมัติ ก่อนที่จะส่งคำสั่งต่อๆไป Detox จะรอจนกว่า App จะอยู่ในสถาณะ Idle ก่อนเสมอ
คำสั่ง Expect ที่ใช้ในการตรวจสอบค่าจะรันบน App process โดยตรง ต่างจาก Appium ที่จะรันอยู่บน test process ซึ่งทำให้มี performance ที่ดีกว่านั่นเอง
เริ่มต้น Setup Detox Environment เพื่อเทส iOS กัน
สำหรับการทดสอบ iOS App จำเป็นต้องใช้ mac OS ในการทดสอบ iOS App โดยทำการลง Software ที่จำเป็นตาม step นี้ได้เลย (สำหรับ Android ไว้ EP หน้าเรามาดูกันนะ)
ติดตั้ง XCode จาก Appstore
ติดตั้ง Node.js โดยรันคำสั่ง
brew install node
ติดตั้ง Detox CLI
npm install detox-cli --global
ติดตั้ง xcode homebrew และ applesimutils สำหรับจัดการ iOS simulator
xcode-select --install
brew tap wix/brew
brew install applesimutils
Setup Test Project
เพิ่อประหยัดเวลา ให้ download demo project บน Github โดยผมได้ config ค่าพื้นฐานไว้ให้แล้วโดยใช้งาน Jest เป็น test runner ควบคู่ไปกับ Detox
หลังจาก Download เสร็จแล้วให้รัน npm install ก่อนเพื่อติดตั้ง library ต่างๆ ที่ใช้งาน จากนั้นสามารถลองรันเทสโดยใช้คำสั่ง
npm run test:ios-release
โดยถ้าต้องการเพิ่ม Test Case สามารถทำการเพิ่มไว้ที่ folder e2e/tests และตั้งชื่อ test suite ให้อยู่ใน format <test suite>.e2e.ts เช่น update-todo-list.e2e.ts
ข้อจำกัดของ Detox
- Detox ไม่รองรับการทดสอบ iOS บน Real device
- Community ของ Detox เล็กกว่า Appium ทำให้มีตัวอย่างโค้ดต่างๆน้อยกว่า