fastlane-00
หลังจากที่ได้แบ่งปันการใช้งาน Fastlane
เพื่อสร้างระบบ Automation สำหรับ iOS app
ตั้งแต่การ compile source code, Unit testing, UI testing ไปจนถึงการ deploy ไปยัง App Store
จึงทำการสรุปการใช้งานพร้อมตัวอย่างไว้นิดหน่อย
ซึ่งในบทความนี้ประกอบไปด้วย

  • Scan เป็นเครื่องมือสำหรับการ compile และ ทดสอบทั้ง Unit test และ UI Test
  • Snapshot เป็นเครื่องมือสำหรับการ snapshot หน้าจอ app ใน UI Test

มาเริ่มใช้งานกันดีกว่า

1. การใช้งาน Scan

เริ่มต้นด้วยการติดตั้ง

$gem install scan

โดยที่ Scan เข้ามาเพื่อช่วยลดความยุ่งยากของการการใช้งานผ่าน xcodebuild นั่นเอง
การใช้งานก็ง่ายมาก ๆ คือ

$scan

เพียงเท่านี้ก็จะทำการ compile และทดสอบระบบงานให้
ทั้ง Unit test และ UI test
และสามารถทำการ configuration ต่าง ๆ เพิ่มได้อีกเยอะ
ซึ่งแนะนำให้สร้างไฟล์ Scanfile ขึ้นมา ด้วยคำสั่ง

$scan init

ผลการทำงานเป็นดังรูป

fastlane-01

โดยผลการทำงานจะอยู่ใน folder test_output
ซึ่งประกอบไปด้วย 2 ไฟล์ คือ

  1. report.html
  2. report.junit

ปล. จะมีปัญหาในการสร้าง junit report ด้วย xcpretty เมื่อชุดการทดสอบไม่ผ่าน !!

2. การใช้งาน Snapshot

สิ่งที่ทีมต้องการ
สิ่งที่หลาย ๆ คนต้องการ
คือ ต้องการเห็นหน้าจอการทำงานของ app ทุกขั้นตอน
ว่าทำงานถูกต้องหรือไม่ ?
ว่าแสดงผลถูกต้องหรือไม่ ?

แน่นอนว่า สิ่งที่ดีที่สุดคือ ก็ต้องทดสอบแบบ manual นี่แหละ
แต่ถ้า app มีการทำงานเยอะมาก ๆ
การทดสอบแบบ manual แบบทั้งหมดต้องใช้เวลามากมาย
ดังนั้นถ้ามีเครื่องมือใช้ snapshot หน้าจอการทำงานแต่ละขั้นตอนให้ล่ะ ?
มันน่าจะดีไม่น้อย
ซึ่ง Snapshot ก็คือ หนึ่งในเครื่องมือที่ช่วยเหลือเรื่องเหล่านี้
ที่ทำงานร่วมกับ UI test นั่นเอง
ดังนั้นจำเป็นต้องเขียน UI test ขึ้นมาด้วยนะ
ถึงจะใช้งาน Snapshot ได้

เริ่มต้นด้วยการติดตั้ง

$gem install snapshot

จากนั้นทำการ initial ก่อนเริ่มใช้งานด้วยคำสั่ง

$snapshot init

จะทำการสร้างไฟล์ Snapfile ขึ้นมา
รวมทั้งไฟล์ (ตัวอย่างเป็น Swift project)

  • SnapshotHelper.swift
  • SnapshotHelper2-3.swift

ซึ่งให้นำไปใส่ไว้ในส่วน UI Test นะครับ
โดยในไฟล์นั้นประกอบไปด้วย configuration ที่น่าสนใจคือ

  • Devices ที่ต้องการให้ snapshot โดยปกติก็จะทดสอบ device และ simulator ทั้งหมดที่มี
  • Languages คือภาษาที่เราต้องการให้ทดสอบ เหมาะมาก ๆ สำหรับ app ที่รองรับมากกว่า 1 ภาษา

จำนวนครั้งในการทำงานและรูปที่ได้จะเท่ากับ
จำนวน Device คูณกับจำนวน Language นั่นเอง
ตัวอย่างเป็นการกำหนดให้ทดสอบบน 1 device และ 2 ภาษา

devices([ "iPhone 6s"])

languages([
  "en-US",
  "de-DE"
])

ทำการแก้ไข code ใน UI Test นิดหน่อย
เพื่อใช้งาน Snapshot ดังนี้

จากนั้นทำการ run ด้วยคำสั่ง

$snapshot

ผลการทำงานจะสร้างไฟล์รูปภาพและ ไฟล์ HTML

fastlane-02

หน้าตาของไฟล์ HTML เป็นดังนี้

fastlane-03

ปล. ถ้ามีปัญหาว่าหา folder screenshots ไม่เจอ
ก็ให้ทำการสร้างให้มันไปเองนะครับ

Source code ตัวอย่างอยู่ที่ Github::Up1::Demo CI iOS

มาถึงตรงนี้เราก็พร้อมจะเริ่มต้นสร้างระบบ Automation สำหรับการพัฒนา iOS app แล้วนะครับ

ได้ทั้งการ compile code
ได้ทั้งการทดสอบระดับ Unit และ UI
ได้ทั้งการ snapshot หน้าจอการทำงานของ app ในขั้นตอนต่าง ๆ
ต่อไปก็ไปจัดการเรื่อง certificated, การสร้างไฟล์ IPA และการ deploy …

แต่ว่าวันนี้คุณเขียน Test สำหรับ iOS app กันแล้วหรือยัง ?