![fastlane-00]()
![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
เริ่มต้นด้วยการติดตั้ง
[code]
$gem install scan
[/code]
โดยที่ Scan เข้ามาเพื่อช่วยลดความยุ่งยากของการการใช้งานผ่าน xcodebuild นั่นเอง
การใช้งานก็ง่ายมาก ๆ คือ
[code]
$scan
[/code]
เพียงเท่านี้ก็จะทำการ compile และทดสอบระบบงานให้
ทั้ง Unit test และ UI test
และสามารถทำการ configuration ต่าง ๆ เพิ่มได้อีกเยอะ
ซึ่งแนะนำให้สร้างไฟล์ Scanfile ขึ้นมา ด้วยคำสั่ง
[code]
$scan init
[/code]
ผลการทำงานเป็นดังรูป
โดยผลการทำงานจะอยู่ใน folder test_output
ซึ่งประกอบไปด้วย 2 ไฟล์ คือ
- report.html
- report.junit
ปล. จะมีปัญหาในการสร้าง junit report ด้วย xcpretty เมื่อชุดการทดสอบไม่ผ่าน !!
2. การใช้งาน Snapshot
สิ่งที่ทีมต้องการ
สิ่งที่หลาย ๆ คนต้องการ
คือ ต้องการเห็นหน้าจอการทำงานของ app ทุกขั้นตอน
ว่าทำงานถูกต้องหรือไม่ ?
ว่าแสดงผลถูกต้องหรือไม่ ?
แน่นอนว่า สิ่งที่ดีที่สุดคือ ก็ต้องทดสอบแบบ manual นี่แหละ
แต่ถ้า app มีการทำงานเยอะมาก ๆ
การทดสอบแบบ manual แบบทั้งหมดต้องใช้เวลามากมาย
ดังนั้นถ้ามีเครื่องมือใช้ snapshot หน้าจอการทำงานแต่ละขั้นตอนให้ล่ะ ?
มันน่าจะดีไม่น้อย
ซึ่ง Snapshot ก็คือ หนึ่งในเครื่องมือที่ช่วยเหลือเรื่องเหล่านี้
ที่ทำงานร่วมกับ UI test นั่นเอง
ดังนั้นจำเป็นต้องเขียน UI test ขึ้นมาด้วยนะ
ถึงจะใช้งาน Snapshot ได้
เริ่มต้นด้วยการติดตั้ง
[code]
$gem install snapshot
[/code]
จากนั้นทำการ initial ก่อนเริ่มใช้งานด้วยคำสั่ง
[code]
$snapshot init
[/code]
จะทำการสร้างไฟล์ Snapfile ขึ้นมา
รวมทั้งไฟล์ (ตัวอย่างเป็น Swift project)
- SnapshotHelper.swift
- SnapshotHelper2-3.swift
ซึ่งให้นำไปใส่ไว้ในส่วน UI Test นะครับ
โดยในไฟล์นั้นประกอบไปด้วย configuration ที่น่าสนใจคือ
- Devices ที่ต้องการให้ snapshot โดยปกติก็จะทดสอบ device และ simulator ทั้งหมดที่มี
- Languages คือภาษาที่เราต้องการให้ทดสอบ เหมาะมาก ๆ สำหรับ app ที่รองรับมากกว่า 1 ภาษา
จำนวนครั้งในการทำงานและรูปที่ได้จะเท่ากับ
จำนวน Device คูณกับจำนวน Language นั่นเอง
ตัวอย่างเป็นการกำหนดให้ทดสอบบน 1 device และ 2 ภาษา
[code]
devices([ "iPhone 6s"])
languages([
"en-US",
"de-DE"
])
[/code]
ทำการแก้ไข code ใน UI Test นิดหน่อย
เพื่อใช้งาน Snapshot ดังนี้
[gist id="27a2501dd2c0eab1103ac7347b22b0a5" file="UITest.swift"]
จากนั้นทำการ run ด้วยคำสั่ง
[code]
$snapshot
[/code]
ผลการทำงานจะสร้างไฟล์รูปภาพและ ไฟล์ HTML
หน้าตาของไฟล์ 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 กันแล้วหรือยัง ?