650_1000_espresso-test-ui-android-1
หลังจากที่เขียนอธิบายเรื่อง การเขียน Unit test สำหรับ Android application ไปแล้ว
ครั้งนี้เรามาดู การทดสอบในระดับที่สูงขึ้นมา
ซึ่งถ้าไปดูเรื่องการทดสอบ มันจะมีเยอะมากๆ
โดยในตอนนี้ขอแนะนำ UI Test ก็แล้วกัน มันชื่อว่า Espresso
มาดูกันว่า มันคืออะไร และ ใช้งานอย่างไร ?

Espresso คืออะไร ?

แน่นอนว่า มันคงไม่ใช่กาแฟนะครับ !!!

แต่มันคือ Android UI Test ซึ่งสร้างโดยทีมพัฒนาของ Google นั่นเอง
เปิดตัวมาตั้งแต่งาน Google Test Automation Conference 2013 โน่นเลย
และแน่นอนมันเป็น open source project ให้เราใช้งานกันแบบฟรีๆ
รวมทั้งมีชุดของ APIs ให้เราใช้งานกันแบบง่ายๆ

ทำไมเราต้องใช้งาน Espresso ด้วยล่ะ ?

จากที่ใช้งานมา พบว่า มันติดตั้งง่ายมากๆ
มีชุด APIs ที่ใช้งานง่าย แถมงอ่านง่ายอีก (อยากรู้ก็ต้องลองใช้สิ)
ที่สำคัญ มันทำงานเร็วมากๆ ด้วยนะ

Espresso มีความสามารถอะไรบ้าง ?

  • มันทำงานอยู่บน Android Instrument Framework
  • ใช้งานได้กับ Emulator และ มือถือจริงๆ
  • ใช้งาน Hamcrest matcher library ซึ่งเราสามารถ custom ได้ด้วย
  • มีความน่าเชื่อถือสูงเลยนะ เพราะว่าการทำงานมันจะ sync กับ UI Thread

Espresso มีข้อเสียอะไรบ้าง ?

  • มันไม่รองรับ Webview นะสิ
  • ไม่มี function สำหรับการ capture หน้าจอ ( แต่สามารถ custom ได้นะ ยากหน่อย )
  • ต้องการความสามารถด้วย programming พอสมควร

Espresso สามารถทดสอบบน API version เหล่านี้ได้

  • 8 => Froyo
  • 10 => Gingerbread
  • 15 => Ice Cream Sandwich
  • 16, 17, 18 => Jelly Bean
  • 19 => KitKat
  • 21 => Lollipop

มาใช้งาน Espresso กันดีกว่า

1. ทำการติดตั้งด้วยการ config ค่าต่างๆ ในไฟล์ build.gradle ของระบบงานเรา

เริ่มด้วยการเพิ่ม espresso library เข้ามาใน project

จากนั้นทำการเพิ่ม Instrument runner ดังนี้

2. ทำความรู้จักกับ API ของ Espresso กันนิดหน่อย

Screen Shot 2558-03-27 at 9.39.14 AM

เราสามารถใช้งานผ่าน method onView() หรือ onData()
จากนั้นเรียกใช้งานผ่าน method perform() ได้เลย

เช่น
เราต้องการกดปุ่ม id=convert เราสามารถเขียน code ได้ดังนี้

เราต้องการตรวจสอบว่า id=myText นั้นมีค่าตามที่คาดหวังไว้หรือไม่
สามารถเขียน code ได้ดังนี้

3. มาดูตัวอย่างที่ผมต้องการ มีขั้นตอนการทำงานดังนี้

  • เปิด application ขึ้นมา
  • กรอกคะแนน 50 เข้าไป
  • ทำการกดปุ่ม convert เพื่อทำการคำนวณเกรด
  • แสดงผลออกมาที่หน้าจอว่า Your grade = D

สามารถเขียน code การทดสอบแบบง่ายๆด้วย Espresso ดังนี้

สั่งให้ทำการทดสอบด้วยคำสั่ง
$./gradlew :App:connectedAndroidTest

ผลการทำงานเป็นดังรูป
Screen Shot 2558-03-27 at 9.54.27 AM

และ Gradle จะทำการสร้าง report แบบนี้ขึ้นมาให้ด้วย

Screen Shot 2558-03-27 at 9.58.12 AM

ตัวอย่างของ source code อยู่ที่
Github :: Up1 :: Demo android grade converter

การทดสอบบน Android application มันมีทางเลือกให้เยอะเลย

ลองดูนะครับ ว่าอะไรที่มันเหมาะสมกับเรา

Screen Shot 2558-03-26 at 5.23.31 PM