การทดสอบ UI ของ Android และ iOS ด้วย Calabash
เผยแพร่แล้ว: 2022-03-11การทดสอบเป็นส่วนสำคัญของกระบวนการพัฒนาแอพมือถือ ไม่ว่าคุณจะทำการทดสอบดังกล่าวโดยอัตโนมัติหรือไม่ก็ตาม ไม่มีนักพัฒนาที่มีเหตุผลใดที่คิดว่างานของพวกเขาจะต้องทำให้เสร็จ เว้นแต่พวกเขาจะได้ทดสอบแอปของตน
แอปที่ได้รับการทดสอบอย่างดีมักจะต้องผ่านการทดสอบหลายขั้นตอน: การทดสอบหน่วย การทดสอบการรวม การทดสอบการยอมรับ และอื่นๆ เมื่อแอปของคุณเติบโตขึ้น การทดสอบก็มีความสำคัญมากขึ้น และระบบอัตโนมัติในการทดสอบก็กลายเป็นสิ่งจำเป็น
ในขณะที่แพลตฟอร์มอื่นๆ เช่น เว็บ มีความก้าวหน้าอย่างมากในแง่ของกลไกการทดสอบและเฟรมเวิร์ก แต่ขอบเขตของอุปกรณ์พกพาไม่ได้ล้าหลัง ในบทความนี้ คุณจะได้เรียนรู้วิธีที่คุณสามารถใช้ Calabash เพื่อทำให้ UI อัตโนมัติสำหรับแอป Android และ iOS ของคุณใช้คำแนะนำภาษาอังกฤษธรรมดาๆ และทำให้การทดสอบยอมรับได้ไม่ลำบากเท่าที่เป็นไปได้
การทดสอบ UI ทั้งหมดเกี่ยวกับอะไร?
หากคุณได้ทดสอบแอปด้วยตนเอง คุณอาจเสียเวลาอย่างมากในการทำงานเดิมซ้ำแล้วซ้ำอีก คุณทำการเปลี่ยนแปลงโค้ด สร้างแอป เรียกใช้ในอุปกรณ์หรือโปรแกรมจำลอง และเล่นซอกับแอปเพื่อดูว่าทำงานตามที่คาดไว้หรือไม่
ด้วยการทดสอบ UI แบบอัตโนมัติ คุณสามารถดำเนินการตามขั้นตอนด้วยตนเองแบบเดียวกันได้โดยอัตโนมัติ หากแอปของคุณมีขนาดพอเหมาะ จะช่วยประหยัดเวลาได้มาก และยังช่วยให้แอปของคุณไม่เต็มไปด้วยข้อบกพร่องที่น่าอาย โดยเฉพาะตัวถดถอย
"ฟังดูยอดเยี่ยม" คุณพูด แต่จะทำอย่างไรกับแอป Android หรือ iOS ของคุณ?
กรอบการทดสอบ UI สำหรับ Android และ iOS
หากคุณอ่านเอกสารอย่างเป็นทางการสำหรับ Android และ iOS พวกเขาแนะนำให้คุณเขียนและเรียกใช้การทดสอบ UI ใน IDE อย่างเป็นทางการ สำหรับ Android คือ Android Studio และสำหรับ iOS คือ Xcode
เอกสารอย่างเป็นทางการสามารถแนะนำเฟรมเวิร์กเฉพาะสำหรับการทดสอบได้ เอกสารอย่างเป็นทางการของ Android ครอบคลุมบางหัวข้อเกี่ยวกับ Espresso ซึ่งเป็นกรอบการทดสอบ Android UI ในทำนองเดียวกัน Apple แนะนำให้ใช้เฟรมเวิร์ก XCTest
และหากคุณตั้งใจจะทำการทดสอบ UI อย่างจริงจัง คุณอาจปฏิบัติตามคำแนะนำเหล่านี้ ซึ่งก็สมเหตุสมผล เนื่องจาก Espresso ได้รับการดูแลโดย Google และเป็นส่วนหนึ่งของ Android Support Repository เป็นไปได้มากที่ Espresso จะสนับสนุนคุณลักษณะใหม่ทั้งหมดที่ Google จะเปิดตัวสำหรับ Android ในอนาคต คุณสามารถพูดเช่นเดียวกันเกี่ยวกับเฟรมเวิร์ก XCTest สำหรับ iOS
อย่างไรก็ตาม ควรระลึกไว้เสมอว่าถึงแม้จะมีข้อดีมากมายของการทดสอบอัตโนมัติ นักพัฒนาจำนวนมากก็ไม่ได้เขียนเลย
นักพัฒนาทุกคนที่ตระหนักถึงการทดสอบอัตโนมัติ ลึก ๆ รู้ดีว่าเป็นความคิดที่ดี แต่เมื่อพูดถึงการนั่งลงและเขียนการทดสอบเหล่านี้ นักพัฒนาหลายคนเริ่มตั้งคำถามว่าควรค่าแก่เวลาหรือไม่ เพราะการ "แตะปุ่ม" ด้วยตนเองกลายเป็นการดำเนินการที่เร็วกว่าการเขียนโค้ดที่จะ "แตะปุ่มนี้" มาก โดยอัตโนมัติ บางครั้งลูกค้าและผู้จัดการต่างรอคอยที่จะลองใช้แอปอย่างใจจดใจจ่อก็ไม่ได้ช่วยอะไรเช่นกัน
ณ จุดนั้น นักพัฒนาหลายคนตัดสินใจว่าจะดีกว่าที่จะทำงานกับคุณลักษณะใหม่ของแอปพลิเคชัน แทนที่จะเขียนการทดสอบ UI อัตโนมัติสำหรับคุณลักษณะที่มีอยู่
เมื่อแอปพลิเคชันเติบโตขึ้น จะใช้เวลานานขึ้นเรื่อยๆ ในการ "แตะปุ่มเหล่านี้" ด้วยตนเองทุกครั้งที่คุณอัปเดตแอปพลิเคชัน
แต่ถ้ามีเฟรมเวิร์กที่ทำให้การทดสอบ UI ง่ายขึ้น และไม่มีข้ออ้างที่จะไม่เขียนการทดสอบ UI สำหรับแอปของคุณล่ะ
พบกับคาลาแบช
Calabash: การทดสอบการยอมรับอัตโนมัติสำหรับแอพมือถือ
ประมาณหนึ่งปีที่แล้ว ฉันเริ่มค้นหากรอบการทดสอบที่จะใช้งานง่ายสำหรับผู้ที่ไม่ใช่นักพัฒนาซอฟต์แวร์ และนั่นคือตอนที่ฉันพบคาลาแบช
เฟรมเวิร์กการทดสอบโอเพ่นซอร์สที่พัฒนาและดูแลโดยทีม Xamarin นี้ใช้ได้กับทั้ง Android และ iOS ช่วยให้คุณเขียนและดำเนินการทดสอบการยอมรับอัตโนมัติสำหรับแอปพลิเคชันมือถือ
การทดสอบการยอมรับมักจะเกิดขึ้นหลังจากการทดสอบระบบที่กำหนดว่าแอปของคุณตรงตามข้อกำหนดทางธุรกิจหรือไม่ เนื่องจากทำงานในระดับ UI จึงทำงานได้ดีกับตัวเลือกเฟรมเวิร์กการทดสอบ UI อัตโนมัติของเรา
น้ำเต้าสามารถโต้ตอบกับแอปของคุณเช่น Espresso หรือ XCTest อย่างไรก็ตาม สิ่งที่ทำให้ Calabash เป็นตัวเลือกที่ยอดเยี่ยมก็คือการรองรับ Cucumber
แตงกวาเป็นเครื่องมือที่สามารถเรียกใช้การทดสอบอัตโนมัติที่เขียนเป็นภาษาอังกฤษธรรมดา (ถ้าคุณต้องการ คุณสามารถปรับเปลี่ยนเพื่อใช้ภาษาธรรมดาอื่น ๆ ได้) ดังนั้น ในการเขียนการทดสอบอัตโนมัติบน Cucumber ผู้ทดสอบไม่จำเป็นต้องรู้ Java, Objective-C หรือภาษาการเขียนโปรแกรมอื่นๆ
อะไรทำให้เห็บน้ำเต้า?
เฟรมเวิร์ก Calabash ประกอบด้วยไลบรารีที่สามารถโต้ตอบกับแอป Android และ iOS สามารถทำงานบนอุปกรณ์จริงได้ จึงสามารถทำสิ่งที่ผู้ทดสอบทำด้วยตนเองได้
มีสองโครงการที่แตกต่างกันบน GitHub ที่ทำให้ Calabash เป็นไปได้:
calabash-android - สำหรับ Android
น้ำเต้า-ios - สำหรับ iOS
Calabash สามารถทำงานร่วมกับกรอบการทดสอบที่ใช้ Ruby ได้ ในบทความนี้เราจะพูดถึง Cucumber ซึ่งเป็นวิธีเขียนแบบทดสอบยอดนิยมและสะดวกที่สุดสำหรับ Calabash

ก่อนดำเนินการต่อ ถ้าคุณต้องการลองใช้ Calabash ขณะที่คุณติดตามบทความที่เหลือ ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Ruby ไว้ในเครื่องของคุณแล้ว คุณสามารถดูคำแนะนำการติดตั้งโดยละเอียดได้ที่นี่
ถัดไป ติดตั้ง Calabash สำหรับแพลตฟอร์มที่คุณชื่นชอบโดยทำตามลิงก์ GitHub ด้านบน
การเขียนการทดสอบครั้งแรกของคุณบน Calabash
การเขียนแบบทดสอบเกี่ยวกับ Calabash นั้นค่อนข้างง่าย มาดูกันว่าการทดสอบอย่างง่ายสำหรับแอป iOS มีลักษณะอย่างไร:
Feature: User Login Scenario: Unsuccessful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "tstuser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Username you entered is incorrect" Scenario: Successful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "testeruser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Hey testeruser!"
ที่นี่ กำลังทดสอบแอปด้วยชื่อผู้ใช้และรหัสผ่านที่ไม่ถูกต้อง จากนั้นจึงทดสอบด้วยชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง การทดสอบคาดว่าแอปจะล้มเหลวในการเข้าสู่ระบบสำหรับสถานการณ์แรก แต่จะประสบความสำเร็จในสถานการณ์ที่สอง
คุณสามารถสร้างสถานการณ์ได้มากเท่าที่ต้องการ และสิ่งที่คุณต้องทำคือแบ่งขั้นตอน/คำแนะนำออกเป็นประโยคภาษาอังกฤษง่ายๆ เช่นเดียวกับที่คุณจะเขียนเรื่องราว!
ใครก็ตามที่รู้เกี่ยวกับการพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม (BDD) จะพบว่าตนเองคุ้นเคยกับสิ่งนี้อยู่แล้ว
น้ำเต้าทำงานอย่างไร?
หากต้องการดูสิ่งที่เกิดขึ้นเบื้องหลังขั้นตอนที่ผู้ทดสอบใช้ คุณสามารถเปิดโปรเจ็กต์บน GitHub และตรวจสอบไฟล์ต่อไปนี้:
calabash-cucumber/features/step_definitions/calabash_steps.rb
มาดูคำจำกัดความของขั้นตอนต่อไปนี้กัน:
When I enter "testeruser" into the "Username" field
Then /^I enter "([^\"]*)" into the "([^\"]*)" field$/ do |text_to_type, field_name| touch("textField marked: '#{field_name}'") wait_for_keyboard keyboard_enter_text text_to_type sleep(STEP_PAUSE) end
ข้อมูลโค้ด Ruby ขนาดเล็กนี้จะค้นหาฟิลด์เฉพาะ แตะ รอให้แป้นพิมพ์ปรากฏขึ้น พิมพ์ข้อความจากตัวแปร text_to_type
และรอสักครู่ก่อนที่จะเปลี่ยนไปใช้ขั้นตอนถัดไป
คำแรกของขั้นตอนอาจเป็น "ให้" "เมื่อใด" "แล้ว" "และ" หรือ "แต่" ไม่สำคัญว่าคุณจะใช้คำหลักใด คุณสามารถใช้สิ่งใดสิ่งหนึ่งเพื่อทำให้เรื่องราวชัดเจนขึ้น
วิธีเพิ่มขั้นตอนที่กำหนดเอง
หากคุณต้องการขั้นตอนที่ยังไม่ได้ใช้ใน Calabash คุณสามารถเขียนได้ด้วยตัวเอง ไวยากรณ์เหมือนกันทุกประการกับขั้นตอนที่กำหนดไว้ล่วงหน้าแล้ว
ตัวอย่างเช่น หากผู้ทดสอบจำเป็นต้องเข้าถึงช่องใส่ข้อมูลตามพื้นที่ที่สำรองไว้ แทนที่จะใช้ชื่อช่อง:
Then /^I enter "([^\"]*)" into the field with placeholder "([^\"]*)"$/ do |text_to_type, placeholder| touch("textField placeholder:'#{placeholder}'") wait_for_keyboard() keyboard_enter_text text_to_type sleep(STEP_PAUSE) end
ข้อกำหนดขั้นตอนนี้จะเหมือนกับขั้นตอนก่อนหน้ามาก แต่คุณกำลังเข้าถึงฟิลด์ตามพื้นที่ที่สำรองไว้ แทนที่จะเป็นชื่อฟิลด์ ด้วยรูปลักษณ์ของแอป การทำเช่นนี้อาจทำให้ผู้ทดสอบทำสิ่งต่างๆ ได้ง่ายขึ้น
และก็ง่ายสำหรับนักพัฒนาเช่นกัน นักพัฒนาซอฟต์แวร์ใช้ขั้นตอนเพียงครั้งเดียว จากนั้นผู้ทดสอบจะใช้เมื่อใดก็ได้ที่ต้องการ นอกจากนี้ คุณไม่จำเป็นต้องรู้ Ruby มากนักเพื่อดำเนินการตามขั้นตอนที่คุณกำหนดเอง
คุณสามารถค้นหาฟังก์ชัน Ruby ที่คุณสามารถใช้ได้ที่นี่:
http://www.rubydoc.info/gems/calabash-cucumber/Calabash/Cucumber
Xamarin ทดสอบคลาวด์
มีความท้าทายอีกอย่างหนึ่งเมื่อทดสอบแอปพลิเคชันมือถือ คุณควรทดสอบอุปกรณ์เหล่านี้ในอุปกรณ์ต่างๆ ให้ได้มากที่สุด เนื่องจากมีอุปกรณ์จำนวนมากและระบบปฏิบัติการเวอร์ชันต่างๆ มากมาย
นี่คือที่ที่ Xamarin Test Cloud ช่วยได้มาก มีอุปกรณ์จริงประมาณ 2,000 เครื่องในระบบคลาวด์ และข่าวดีก็คือมันรองรับการทดสอบ Calabash
การทดสอบน้ำเต้าแบบเดียวกับที่ช่วยให้คุณประหยัดเวลาโดยช่วยให้คุณไม่ต้องทำงานซ้ำๆ ตอนนี้สามารถใช้เพื่อทดสอบแอปพลิเคชันของคุณบนอุปกรณ์จริงจำนวนมากได้
เริ่มเขียนการทดสอบ UI
ไม่ว่า Calabash จะเป็นโซลูชันการทดสอบที่แอปของคุณต้องการหรือไม่ก็ตาม ด้วยข้อดีที่มีอยู่ จึงไม่มีข้อแก้ตัวใดๆ ในการเขียนการทดสอบ UI อัตโนมัติสำหรับแอปบนอุปกรณ์เคลื่อนที่ของคุณ น้ำเต้าอาจไม่เพียงพอหากแอปของคุณใช้คุณลักษณะของอุปกรณ์บางอย่าง (เช่น กล้อง) เป็นหลัก แต่ก็ยังทำให้การทดสอบการเขียนสำหรับแอปส่วนใหญ่ทำได้ง่ายกว่ามาก