การทดสอบเป็นส่วนสำคัญของกระบวนการพัฒนาแอปบนอุปกรณ์เคลื่อนที่ ไม่ว่าคุณจะทำการทดสอบดังกล่าวโดยอัตโนมัติหรือไม่ก็ตามไม่มีนักพัฒนาที่มีสติคิดว่างานของพวกเขาจะเสร็จสิ้นเว้นแต่จะได้ทดสอบแอปของตน
แอปที่ผ่านการทดสอบอย่างดีมักจะต้องผ่านการทดสอบหลายขั้นตอน ได้แก่ การทดสอบหน่วยการทดสอบการรวมการทดสอบการยอมรับและอื่น ๆ เมื่อแอปของคุณเติบโตขึ้นความสำคัญของการทดสอบก็เพิ่มขึ้นและระบบอัตโนมัติในการทดสอบกลายเป็นสิ่งจำเป็น
ในขณะที่แพลตฟอร์มอื่น ๆ เช่นเว็บมีความก้าวหน้าอย่างมากในแง่ของกลไกการทดสอบและเฟรมเวิร์ก แต่ขอบเขตมือถือไม่ได้ล้าหลัง ในบทความนี้คุณจะได้เรียนรู้วิธีใช้ Calabash เพื่อทำให้ UI อัตโนมัติสำหรับแอป Android และ iOS ของคุณโดยใช้คำแนะนำภาษาอังกฤษล้วน ๆ และทำการทดสอบการยอมรับโดยไม่เจ็บปวดเท่าที่จะทำได้
หากคุณได้ทำการทดสอบแอปด้วยตนเองคุณอาจเสียเวลาส่วนใหญ่ในการทำงานเดิมซ้ำแล้วซ้ำเล่า คุณทำการเปลี่ยนแปลงบางอย่างกับโค้ดสร้างแอปเรียกใช้ในอุปกรณ์หรือโปรแกรมจำลองและดำเนินการกับแอปเพื่อดูว่ามันทำงานตามที่คาดไว้หรือไม่
หน่วยทดสอบคืออะไร
ด้วยการทดสอบ UI อัตโนมัติคุณสามารถดำเนินการตามขั้นตอนด้วยตนเองเหล่านั้นโดยอัตโนมัติ หากแอปของคุณมีขนาดที่เหมาะสมสิ่งนี้จะช่วยประหยัดเวลาได้มากและยังช่วยไม่ให้แอปของคุณเต็มไปด้วยข้อบกพร่องที่น่าอับอายโดยเฉพาะแอปที่ถดถอย
“ ฟังดูดีมาก” คุณพูด แต่จะทำอย่างไรกับแอป Android หรือ iOS ของคุณ
หากคุณอ่านเอกสารอย่างเป็นทางการสำหรับ Android และ iOS พวกเขาแนะนำให้คุณเขียนและเรียกใช้การทดสอบ UI ใน IDE อย่างเป็นทางการ สำหรับ Android มันคือ Android Studio และสำหรับ iOS คือ Xcode
เอกสารอย่างเป็นทางการไปไกลถึงการแนะนำกรอบเฉพาะสำหรับการทดสอบ เอกสารอย่างเป็นทางการของ Android ครอบคลุมบางหัวข้อเกี่ยวกับ แสดงออก กรอบการทดสอบ Android UI ในทำนองเดียวกัน Apple แนะนำให้ใช้ไฟล์ XCTest กรอบ.
และหากคุณกำลังจะดำเนินการทดสอบ UI อย่างจริงจังคุณอาจปฏิบัติตามคำแนะนำเหล่านี้ซึ่งเหมาะสมเนื่องจาก Google ดูแล Espresso และเป็นส่วนหนึ่งของ Android Support Repository มีความเป็นไปได้สูงมากที่ Espresso จะรองรับฟีเจอร์ใหม่ทั้งหมดที่ Google จะแนะนำสำหรับ Android ในอนาคต คุณสามารถพูดเช่นเดียวกันเกี่ยวกับกรอบงาน XCTest สำหรับ iOS
อย่างไรก็ตามโปรดทราบว่าแม้จะมีประโยชน์มากมายของการทดสอบอัตโนมัติ แต่นักพัฒนาหลายคนก็ไม่ได้เขียนเลย
นักพัฒนาซอฟต์แวร์ทุกคนที่ตระหนักถึงระบบอัตโนมัติในการทดสอบรู้ดีว่านี่เป็นแนวคิดที่ดี แต่เมื่อต้องนั่งลงและเขียนแบบทดสอบเหล่านี้นักพัฒนาหลายคนเริ่มตั้งคำถามว่าคุ้มค่ากับเวลาหรือไม่เพราะการ 'แตะปุ่ม' ด้วยตนเองนั้นเป็นการดำเนินการที่รวดเร็วกว่าการเขียนโค้ดที่จะ 'แตะปุ่มนี้' โดยอัตโนมัติ บางครั้งลูกค้าและผู้จัดการรออย่างใจจดใจจ่อที่จะลองใช้แอปก็ไม่ช่วยอะไรเช่นกัน
ในตอนนั้นนักพัฒนาหลายคนตัดสินใจว่าจะดีกว่าที่จะทำงานกับคุณสมบัติใหม่ของแอปพลิเคชันต่อไปแทนที่จะเขียนการทดสอบ UI อัตโนมัติสำหรับสิ่งที่มีอยู่
เมื่อแอปพลิเคชันเติบโตขึ้นการ“ แตะปุ่มเหล่านี้” ด้วยตนเองจะใช้เวลานานมากขึ้นทุกครั้งที่คุณอัปเดตแอปพลิเคชัน
การออกแบบในงานศิลปะคืออะไร
แต่จะเกิดอะไรขึ้นถ้ามีเฟรมเวิร์กที่ทำให้การทดสอบ UI ง่ายขึ้นและไม่มีข้ออ้างใด ๆ ที่จะไม่เขียนการทดสอบ UI สำหรับแอปของคุณ
พบกัน น้ำเต้า .
ประมาณหนึ่งปีที่แล้วฉันเริ่มค้นหากรอบการทดสอบที่จะใช้งานง่ายสำหรับผู้ที่ไม่ใช่นักพัฒนาซอฟต์แวร์ และนั่นคือตอนที่ฉันพบน้ำเต้า
กรอบการทดสอบโอเพ่นซอร์สนี้พัฒนาและดูแลโดย Xamarin ทีมทำงานได้ทั้ง Android และ iOS ช่วยให้คุณเขียนและดำเนินการทดสอบการยอมรับอัตโนมัติสำหรับแอปพลิเคชันมือถือ
โดยทั่วไปการทดสอบการยอมรับคือสิ่งที่เกิดขึ้นหลังจากการทดสอบระบบซึ่งจะตัดสินว่าแอปของคุณตรงตามข้อกำหนดทางธุรกิจหรือไม่ เนื่องจากมันทำงานในระดับ UI จึงทำงานได้ดีกับเฟรมเวิร์กการทดสอบ UI อัตโนมัติที่เราเลือก
น้ำเต้าสามารถโต้ตอบกับแอปของคุณได้เหมือน Espresso หรือ XCTest อย่างไรก็ตามสิ่งที่ทำให้ Calabash เป็นตัวเลือกที่ยอดเยี่ยมที่นี่คือการสนับสนุน Cucumber
แตงกวาเป็นเครื่องมือที่สามารถเรียกใช้การทดสอบอัตโนมัติที่เขียนเป็นภาษาอังกฤษล้วนได้ (หากต้องการคุณสามารถปรับให้ใช้ภาษาธรรมดาอื่น ๆ ได้) ดังนั้นในการเขียนการทดสอบอัตโนมัติบน Cucumber ผู้ทดสอบไม่จำเป็นต้องรู้ Java, Objective-C หรือภาษาโปรแกรมอื่น ๆ
กรอบงาน Calabash ประกอบด้วยไลบรารีที่สามารถโต้ตอบกับแอป Android และ iOS สามารถใช้งานได้บนอุปกรณ์จริง ดังนั้นจึงสามารถทำสิ่งต่างๆที่ผู้ทดสอบทำด้วยตนเองได้
มีสองโครงการที่แตกต่างกันใน GitHub ที่ทำให้ Calabash เป็นไปได้:
น้ำเต้า Android - สำหรับ Android
น้ำเต้าไอโอเอส - สำหรับ iOS
Calabash สามารถทำงานร่วมกับกรอบการทดสอบที่ใช้ Ruby ได้ ในบทความนี้เราจะกล่าวถึงแตงกวาซึ่งเป็นวิธีที่นิยมและสะดวกที่สุดในการเขียนแบบทดสอบสำหรับน้ำเต้า
ก่อนดำเนินการต่อหากคุณต้องการลองใช้น้ำเต้าตามส่วนที่เหลือของบทความตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Ruby ไว้ในเครื่องของคุณแล้ว คุณสามารถดูคำแนะนำโดยละเอียดของการติดตั้ง ที่นี่ .
จากนั้นติดตั้ง Calabash สำหรับแพลตฟอร์มโปรดของคุณโดยทำตามลิงก์ GitHub ด้านบน
อัลกอริธึมการเรียนรู้ของเครื่องใน python
การทดสอบการเขียนบนน้ำเต้านั้นค่อนข้างง่าย มาดูกันว่าการทดสอบอย่างง่ายสำหรับแอป 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
และรอสักครู่ก่อนที่จะเปลี่ยนไปยังขั้นตอนถัดไป
คำแรกของขั้นตอนอาจเป็น“ Given”“ When”“ Then”“ And” หรือ“ But” ไม่สำคัญว่าคุณจะใช้คำหลักใด คุณสามารถใช้สิ่งเหล่านี้เพื่อทำให้เรื่องราวชัดเจนขึ้น
หากคุณต้องการขั้นตอนที่ยังไม่ได้ใช้ในน้ำเต้าคุณสามารถเขียนได้ด้วยตัวเอง ไวยากรณ์เหมือนกับที่อยู่ในขั้นตอนที่กำหนดไว้แล้ว
ตัวอย่างเช่นหากผู้ทดสอบต้องการเข้าถึงฟิลด์อินพุตโดยใช้ตัวยึดแทนชื่อฟิลด์:
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
มีอีกหนึ่งความท้าทายเมื่อทดสอบแอปพลิเคชันบนมือถือ คุณควรทดสอบกับอุปกรณ์ต่างๆให้มากที่สุดเนื่องจากมีอุปกรณ์จำนวนมากและระบบปฏิบัติการหลายเวอร์ชัน
ฉันจะทำอย่างไรกับโหนด js
นี่คือที่ Xamarin Test Cloud ช่วยได้มาก มีอุปกรณ์จริงประมาณ 2,000 เครื่องในระบบคลาวด์และข่าวดีก็คือรองรับการทดสอบน้ำเต้า
การทดสอบน้ำเต้าแบบเดียวกับที่ช่วยให้คุณประหยัดเวลาโดยการประหยัดเวลาในการทำงานซ้ำ ๆ สามารถใช้ทดสอบแอปพลิเคชันของคุณบนอุปกรณ์จริงได้หลายประเภท
ไม่ว่าน้ำเต้าจะเป็นโซลูชันการทดสอบที่แอปของคุณต้องการหรือไม่ด้วยข้อดีที่นำมา แต่ก็ไม่มีที่ว่างให้แก้ตัวเมื่อต้องเขียนการทดสอบ UI อัตโนมัติสำหรับแอปบนอุปกรณ์เคลื่อนที่ของคุณ น้ำเต้าอาจขาดได้หากแอปของคุณต้องอาศัยคุณสมบัติบางอย่างของอุปกรณ์ (เช่นกล้อง) เป็นหลัก แต่ก็ยังทำให้การทดสอบการเขียนสำหรับแอปส่วนใหญ่ทำได้ง่ายขึ้นมาก
การทดสอบการยอมรับจะพิจารณาว่าแอปพลิเคชันของคุณตรงตามข้อกำหนดทางธุรกิจหรือไม่โดยปกติจะมาจากมุมมองของผู้ใช้
แตงกวาเป็นเครื่องมือที่สามารถเรียกใช้การทดสอบอัตโนมัติที่เขียนเป็นภาษาอังกฤษธรรมดา ช่วยให้ผู้ใช้สามารถเขียนการทดสอบอัตโนมัติโดยไม่จำเป็นต้องมีพื้นฐานการเขียนโปรแกรม