การทดสอบระบบอัตโนมัติของ iOS ด้วย Xcode กรอบงาน UI
⚡ สรุปอย่างชาญฉลาด
การทดสอบระบบอัตโนมัติ iOS ด้วย Xcode บันทึกและเล่นซ้ำการกระทำของส่วนติดต่อผู้ใช้กับแอปพลิเคชันที่กำลังทดสอบ โดยทำตามวงจรการพัฒนาแบบทดสอบนำ (test-driven cycle) คือ ออกแบบ ทดสอบ พัฒนา และทดสอบอีกครั้ง จนกว่าทุกกรณีจะผ่าน
การทดสอบระบบอัตโนมัติของ iOS โดยใช้ Xcode
เพื่อให้มั่นใจในคุณภาพของแอปพลิเคชัน iOS ของคุณ คุณควรปฏิบัติตามกระบวนการพัฒนาแบบทดสอบนำ (Test-Driven Development) ดังแสดงในรูปด้านล่าง
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ (TDD) คือ การทดสอบ โมเดลที่นำมาใช้ในการทดสอบแอปพลิเคชัน iOS และอยู่ในกรอบแนวทางปฏิบัติที่กว้างขึ้นของ การทดสอบมือถือในแบบจำลองนี้ ผู้ทดสอบจะต้องปฏิบัติตาม 4 ขั้นตอนดังต่อไปนี้:
- ได้รับการออกแบบ: ระบุสิ่งที่คุณต้องการทดสอบและออกแบบกรณีทดสอบของคุณ
- การทดสอบ: ทำการทดสอบทั้งหมดและตรวจสอบดูว่ามีกรณีทดสอบใดบ้างที่ล้มเหลว
- ดำเนินการ: Revทดสอบโค้ดของคุณและแก้ไขข้อผิดพลาดที่ทำให้การทดสอบล้มเหลว
- ทดสอบอีกครั้ง: หากการทดสอบล้มเหลว ให้ย้อนกลับไปใช้การออกแบบเดิม หากกรณีทดสอบทั้งหมดผ่าน แสดงว่าโค้ดตรงตามข้อกำหนดที่ทดสอบทั้งหมด
การตั้งค่า Xcode โครงการทดสอบ UI
ในการสร้างโปรแกรมทดสอบ iOS คุณต้องใช้ Mac โดย Mac ของคุณต้องติดตั้งสิ่งต่อไปนี้ไว้แล้ว:
- OS X — ระบบปฏิบัติการสำหรับเครื่อง Mac
- Xcode IDE — เครื่องมือพัฒนาสำหรับ iOS
- กรอบงานการทดสอบอัตโนมัติ — UI Automation, OCUnit และอื่นๆ
- iOS SDK 4 หรือสูงกว่า
⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: ข้อกำหนดเบื้องต้นข้างต้นอธิบายถึงเครื่องมือที่ใช้ในยุคที่เขียนบทแนะนำสองบทต่อไปนี้ บนเครื่อง Mac รุ่นปัจจุบัน Xcode โปรแกรมนี้ได้รวมเฟรมเวิร์ก XCTest และ XCUITest ไว้ในกล่องแล้ว และเครื่องมือ UI Automation แยกต่างหากไม่ได้เป็นส่วนหนึ่งของการติดตั้งอีกต่อไป ขั้นตอนเดิมยังคงเก็บไว้ด้านล่างเนื่องจากเป็นการบันทึกวิธีการทำงานของเฟรมเวิร์ก และขั้นตอนที่เทียบเท่าในปัจจุบันจะอธิบายไว้ในส่วนถัดไป
วิธีสร้าง iOS Automation โดยใช้ UI Automation Framework
ขั้นตอนทั้งแปดด้านล่างนี้จะบันทึกสคริปต์ด้วยเครื่องมือ Automation และเล่นซ้ำกับแอปพลิเคชันที่กำลังทดสอบ
ขั้นตอนที่ 1) เปิดตัวเครื่องมือ
เปิด XCode -> เปิดเครื่องมือสำหรับนักพัฒนา -> เครื่องมือวัด
ขั้นตอนที่ 2) เพิ่มเครื่องมืออัตโนมัติ
ในหน้าต่าง Instruments ให้เลือกเครื่องมือ Automation
ในการสร้างสคริปต์ทดสอบ คุณสามารถบันทึกได้สองวิธี คือ สถานการณ์การทดสอบ หรือคุณสามารถตั้งโปรแกรมด้วยตนเองได้
ขั้นตอนที่ 3) กดปุ่มสีแดง
กำลังเริ่มบันทึกเสียงเครื่องดนตรี — หยุดการบันทึกทันที หากต้องการเริ่มบันทึก ให้กดปุ่มสีแดง
ขั้นตอนที่ 4) สร้างสคริปต์ใหม่
ในหน้าต่างสคริปต์ ให้คลิก เพิ่ม > สร้าง เพื่อสร้างสคริปต์ใหม่
ขั้นตอนที่ 5) เลือกเป้าหมาย
คุณอยู่ใน... Tracหน้าต่าง e ใช้ปุ่ม เลือก Target เลื่อนลงเพื่อไปยังเวอร์ชันดีบักของแอปของคุณ
ในกรณีนี้คือตัวอย่างของแอปเปิล SimpleDrillDown แอปนี้ใช้เป็นแอปพลิเคชันที่กำลังทดสอบ โดยมีส่วนติดต่อผู้ใช้แบบกราฟิก (GUI) ดังแสดงด้านล่าง
ขั้นตอนที่ 6) เริ่มบันทึกสคริปต์ของคุณ
บันทึกสคริปต์ของคุณโดยกดปุ่มบันทึกที่ด้านบนหรือด้านล่างของเครื่องมือ
ตอนนี้คุณสามารถดำเนินการบางอย่างกับส่วนติดต่อผู้ใช้ (UI) ของแอปพลิเคชันที่คุณกำลังทดสอบได้แล้ว และสคริปต์ของคุณจะถูกบันทึกไว้
ขั้นตอนที่ 7) ดูสคริปต์ของคุณ
หากต้องการดูสคริปต์ของคุณ ให้กดที่ Tracเลือกเมนูแบบเลื่อนลง e Log / Editor Log แล้วสลับไปที่มุมมองบันทึกสคริปต์
คุณจะเห็นสคริปต์ที่บันทึกไว้
ขั้นตอนที่ 8) เล่นสคริปต์ของคุณ
กดปุ่มเล่น สคริปต์จะเริ่มทำงาน และคุณสามารถหยุดได้หลังจากที่บันทึกปรากฏขึ้น
⚠️ หมายเหตุทางประวัติศาสตร์: เครื่องมืออัตโนมัติที่ใช้ในแปดขั้นตอนเหล่านี้ถูกยกเลิกการใช้งานแล้วใน Xcode เวอร์ชัน 8 และเวอร์ชันต่อมาได้ถูกลบออกไปแล้ว ดังนั้นจึงไม่มีอยู่ในเวอร์ชันปัจจุบันอีกต่อไป Xcode ขั้นตอนการติดตั้งต่างๆ ถูกบันทึกไว้ที่นี่เพื่อเป็นวิธีการทำงานของเฟรมเวิร์ก สำหรับงานใหม่ โปรดใช้คำแนะนำการใช้งาน XCUITest ที่อยู่ด้านล่างของหน้านี้
วิธีสร้าง iOS Automation โดยใช้เฟรมเวิร์ก OCUnit
เส้นทางที่สองวางการทดสอบไว้ภายใน Xcode โปรเจ็กต์นั้นเอง ไม่ได้อยู่ภายในเครื่องมือ
ขั้นตอนที่ 1) เริ่มต้น Xcode IDE, เพิ่มเป้าหมาย Unit Test Bundle
ขั้นตอนที่ 2) เขียนชื่อของชุดทดสอบหน่วยใหม่ ตามที่แสดงในรูปด้านบน จากนั้นคลิก เสร็จสิ้น
ขั้นตอนที่ 3) กำหนดให้ Unit Test เป็นเป้าหมายที่ใช้งานอยู่
ขั้นตอนที่ 4) เพิ่มกลุ่มสำหรับชั้นเรียนทดสอบ
ขั้นตอนที่ 5) เพิ่มคลาสการทดสอบหน่วย
ขั้นตอนที่ 6) เริ่มดำเนินการได้เลย
OCUnit ใช้ภาษา Objective-C ในการสร้างโปรแกรมทดสอบ ดังนั้นผู้พัฒนาจึงต้องมีความรู้ในภาษานั้น (Modern) Xcode การจัดส่งเวอร์ชัน การทดสอบหน่วย ผ่านทาง XCTest แทน ซึ่งรองรับทั้ง Objective-C และ Swiftแต่โครงสร้างเป้าหมายและคลาสที่แสดงในหกขั้นตอนเหล่านี้ยังคงไม่เปลี่ยนแปลง
UIAutomation กับ XCUITest: มีอะไรเปลี่ยนแปลงบ้าง
เนื่องจากเฟรมเวิร์กทั้งสองที่กล่าวถึงข้างต้นเป็นของชุดเครื่องมือรุ่นก่อนๆ ของ Apple จึงควรระบุให้ชัดเจนว่าอะไรมาแทนที่ และเพราะเหตุใด
| แง่มุม | การทำงานอัตโนมัติของ UI (เครื่องมือ) | เอ็กซ์คิวเทสต์ |
| สถานะ | เลิกใช้แล้วใน Xcode 8 และถูกลบออกจากเวอร์ชันที่ออกในภายหลัง | เฟรมเวิร์กการทดสอบ UI ที่ Apple รองรับ |
| ที่ที่การทดสอบอยู่ | สคริปต์ภายในเครื่องดนตรี tracเอกสารอิเล็กทรอนิกส์ | เป้าหมาย UI Testing Bundle ภายใน Xcode โครงการ |
| ภาษาที่ใช้ | Javaต้นฉบับ | Swift หรือออบเจกทีฟซี |
| นักวิ่งทดสอบ | เครื่องมืออัตโนมัติ | XCTest คือตัวรันเดียวกับที่ใช้รันการทดสอบหน่วย |
| บูรณาการอย่างต่อเนื่อง | น่าอึดอัดใจ — ขับเคลื่อนผ่านเครื่องดนตรี | รันจากบรรทัดคำสั่งพร้อมกับการทดสอบหน่วย |
| การบันทึก | ปุ่มบันทึกในแถบเครื่องมือเครื่องดนตรี | ปุ่มบันทึกใน Xcode บรรณาธิการ ซึ่งปล่อยออกมา Swift |
ผลที่ตามมาในทางปฏิบัติก็คือ ชุดทดสอบ XCUITest ก็คือซอร์สโค้ดของโปรเจ็กต์ทั่วไปนั่นเอง มันจะถูกตรวจสอบ กำหนดเวอร์ชัน และเรียกใช้งานเหมือนกับโค้ดเบสส่วนอื่นๆ ซึ่งเป็นเหตุผลหลักที่ทำให้มีการบันทึกไว้tracโมเดล e หายไปแล้ว
วิธีการเขียน UI Test สำหรับ iOS ด้วย XCUITest
โครงสร้างที่เทียบเท่ากับขั้นตอนทั้งแปดของเครื่องดนตรีในยุคปัจจุบันนั้นสั้นกว่า โครงสร้างด้านล่างสะท้อนแนวคิดการบันทึกแล้วเล่นซ้ำแบบเดียวกัน แต่ผลลัพธ์ที่ได้คือไฟล์ต้นฉบับแทนที่จะเป็นไฟล์เสียง trace.
- เพิ่มเป้าหมาย In Xcode เลือก ไฟล์ > สร้างใหม่ > Target และเลือกเทมเพลต UI Testing Bundle หรือติ๊กตัวเลือกเพื่อรวมการทดสอบเมื่อสร้างโปรเจ็กต์ใหม่
- เปิดคลาสทดสอบที่สร้างขึ้น Xcode สร้างคลาสย่อย XCTestCase ที่มีเมธอด setup และ test ว่างเปล่า
- เปิดใช้งานแอปพลิเคชันที่กำลังทดสอบ สร้างอินสแตนซ์ของ XCUIApplication แล้วเรียกใช้เมธอด launch เพื่อเริ่มแอปในกระบวนการแยกต่างหาก
- สอบถามและดำเนินการ เข้าถึงองค์ประกอบต่างๆ ผ่านการค้นหาองค์ประกอบ เช่น ปุ่ม ตาราง ข้อความคงที่ และเรียกใช้ฟังก์ชันแตะ พิมพ์ข้อความ หรือปัดนิ้วบนองค์ประกอบเหล่านั้น
- ยืนยัน. ใช้ XCTAssert เพื่อตรวจสอบว่าองค์ประกอบที่คาดหวังนั้นมีอยู่จริงหลังจากดำเนินการแล้ว
- วิ่ง. ดำเนินการทดสอบจาก Xcode ใช้ตัวนำทางทดสอบ หรือจากบรรทัดคำสั่ง เพื่อให้ชุดทดสอบเดียวกันทำงานในระบบการรวมอย่างต่อเนื่อง
การทดสอบแบบง่ายที่สุดมีรูปแบบดังนี้:
import XCTest final class AppUITests: XCTestCase { func testTappingFirstRowShowsDetail() { let app = XCUIApplication() app.launch() // act on the first row of the list app.tables.cells.element(boundBy: 0).tap() // verify that the next screen appeared XCTAssertTrue(app.staticTexts.firstMatch.waitForExistence(timeout: 5)) } }
ตัวบันทึกยังคงมีอยู่: การวางเคอร์เซอร์ไว้ภายในเมธอดทดสอบและกดปุ่มบันทึกในเอดิเตอร์จะสร้างแบบสอบถามเหล่านี้โดยอัตโนมัติ ซึ่งเป็นผลสืบเนื่องโดยตรงจากขั้นตอนที่ 6 ข้างต้น หลักการที่กว้างขึ้นของ การทดสอบอัตโนมัติ นำไปใช้โดยไม่เปลี่ยนแปลง
ตัวอย่างการทำงานอัตโนมัติของ UI Code
บทความนี้มีตัวอย่างโค้ดบางส่วน ซึ่งจะช่วยให้คุณเข้าใจบทเรียนได้ชัดเจนและรวดเร็วยิ่งขึ้น
ตัวอย่างการทำงานอัตโนมัติของ UI — สคริปต์ทดสอบสำหรับสาธิตการทำงานอัตโนมัติของ UI















