Android บทช่วยสอนการทดสอบแอปพลิเคชันด้วยเฟรมเวิร์กอัตโนมัติ

⚡ สรุปอย่างชาญฉลาด

Android การทดสอบแอปพลิเคชันจะตรวจสอบความถูกต้องของเวอร์ชันที่สร้างขึ้นบนอุปกรณ์ที่หลากหลาย โดยผสมผสานการตรวจสอบระดับหน่วย การตรวจสอบการบูรณาการ การตรวจสอบการทำงาน และการตรวจสอบระบบเข้ากับเฟรมเวิร์กอัตโนมัติที่ทำงานบนอุปกรณ์หรือบน JVM โดยตรง

  • 🔘 ทำไมมันเรื่อง: Android ใช้งานได้กับอุปกรณ์และเวอร์ชันที่หลากหลายนับไม่ถ้วน ดังนั้นจึงแทบแน่นอนว่าจะพบข้อบกพร่องด้านความเข้ากันได้
  • ☑️ มีการทดสอบทั้งหมดสี่ระดับ: การทดสอบระดับหน่วย การทดสอบการบูรณาการ การทดสอบการทำงาน และการทดสอบระบบ แต่ละประเภทจะตรวจจับข้อบกพร่องที่แตกต่างกัน
  • ✅ เฟรมเวิร์กบนอุปกรณ์: การขอ Android กรอบการทดสอบสร้างขึ้นบน JUnit และอุปกรณ์เครื่องมือวัด
  • 🧪 ทางเลือกอื่นสำหรับ JVM: เงาโรโบเลคทริก Android คลาสเหล่านี้ทำให้ชุดโปรแกรมสามารถทำงานบน JVM ได้โดยไม่ต้องใช้อุปกรณ์หรือโปรแกรมจำลอง
  • 🛠️ ชุดเครื่องมือที่หลากหลายยิ่งขึ้น: EspressoUI Automator และ Appium ขยายขอบเขตการครอบคลุมให้กว้างกว่าคลาสที่มีอยู่แล้ว
  • 📊 ความเชื่อผิดๆ ที่ควรหลีกเลี่ยง: การใช้เพียงโปรแกรมจำลอง อุปกรณ์เพียงไม่กี่ชิ้น หรือการทดสอบแบบสำรวจในนาทีสุดท้าย อาจทำให้เกิดข้อบกพร่องในขั้นตอนการผลิตได้

Android บทแนะนำการทดสอบแอปพลิเคชัน ครอบคลุมระดับการทดสอบ เฟรมเวิร์กการทำงานอัตโนมัติ และการครอบคลุมอุปกรณ์

ทำไม Android การทดสอบ?

Android เป็นระบบปฏิบัติการที่ใหญ่ที่สุดในโลก ในเวลาเดียวกัน Android มันกระจัดกระจาย: มีอุปกรณ์มากมายและ Android เวอร์ชันที่แอปของคุณต้องเข้ากันได้

ไม่ว่าคุณจะทุ่มเทเวลาให้กับการออกแบบและการพัฒนามากแค่ไหน ความผิดพลาดก็เป็นสิ่งที่หลีกเลี่ยงไม่ได้ และบั๊กก็จะปรากฏขึ้นอย่างแน่นอน

Android กลยุทธ์การทดสอบ

ถูกต้อง Android กลยุทธ์การทดสอบควรประกอบด้วยสิ่งต่อไปนี้

  1. การทดสอบหน่วย
  2. การทดสอบบูรณาการ
  3. Operaการทดสอบเชิงลึก
  4. การทดสอบระบบ

การทดสอบหน่วย

การทดสอบหน่วย (Unit Tests) คือชุดโปรแกรมที่ออกแบบมาเพื่อตรวจสอบหน่วยย่อยของซอร์สโค้ด เช่น เมธอดหรือคลาส

การขอ Android แพลตฟอร์มนี้มาพร้อมกับการผสานรวมล่วงหน้ากับ JUnit เฟรมเวิร์ก 3.0 เป็นเฟรมเวิร์กโอเพนซอร์สสำหรับการทำงานอัตโนมัติ การทดสอบหน่วยและยังช่วยให้นักพัฒนาสามารถเขียนโปรแกรมทดสอบหน่วยที่มีประสิทธิภาพได้อีกด้วย

นอกเหนือจากการทดสอบหน่วย (Unit Testing) แล้ว ยังมีการทดสอบส่วนติดต่อผู้ใช้ (User Interface หรือ UI Testing) ซึ่งครอบคลุมส่วนประกอบ UI ของแอปพลิเคชันเป้าหมายของคุณ และตรวจสอบให้แน่ใจว่าได้แสดงผลลัพธ์ที่ถูกต้องตามลำดับการกระทำของผู้ใช้บนอุปกรณ์

การกระทำทั่วไปของส่วนติดต่อผู้ใช้บน Android แอปพลิเคชันต่างๆ เช่น การแตะ การพิมพ์ และการปัด

วิธีทั่วไปในการทดสอบ UI บนอุปกรณ์คือ Android การประพันธ์ดนตรี- แต่นี่มีปัญหาด้านประสิทธิภาพ หนึ่งในเครื่องมือที่ดีที่สุดในการดำเนินการทดสอบ UI Android is Robotium.

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: JUnit 3 ประเภท เช่น เครื่องมือวัดTestCase ฟังก์ชันเหล่านี้ถูกยกเลิกการใช้งานใน API เวอร์ชัน 24 โครงการปัจจุบันยังคงใช้ฟังก์ชันนี้อยู่ Androidการทดสอบ X Espresso และ UI Automator Robotium ไม่มีผลงานออกใหม่นับตั้งแต่ปี 2016

การทดสอบบูรณาการ

In การทดสอบการผสานรวมโมดูลที่ผ่านการทดสอบหน่วยทั้งหมดจะถูกรวมเข้าด้วยกันและตรวจสอบแล้ว Android ซึ่งมักหมายถึงการตรวจสอบการทำงานร่วมกับส่วนประกอบต่างๆ เช่น การทดสอบบริการ กิจกรรม และผู้ให้บริการเนื้อหา

ประเภทของการทดสอบบูรณาการ Android ครอบคลุมการทดสอบผู้ให้บริการด้านบริการ กิจกรรม และเนื้อหา

มีเฟรมเวิร์กการทดสอบมากมายที่ใช้ในการดำเนินการทดสอบการบูรณาการสำหรับ Androidเช่น Troyd, Robolectric และ Robotium.

Operaการทดสอบทางภาษา

Operaการทดสอบเชิงคุณภาพ หรือที่เรียกว่าการทดสอบการทำงานหรือการทดสอบการยอมรับ เป็นการทดสอบระดับสูงที่ตรวจสอบความสมบูรณ์และความถูกต้องของแอปพลิเคชัน

In Android, ฟิตเนส เป็นเฟรมเวิร์กโอเพนซอร์สที่ช่วยให้การทดสอบการทำงานกับแอปพลิเคชันเป้าหมายทำได้ง่ายขึ้น

การทดสอบระบบ

In การทดสอบระบบ ระบบได้รับการทดสอบโดยรวมและมีการตรวจสอบปฏิสัมพันธ์ระหว่างส่วนประกอบ ซอฟต์แวร์ และฮาร์ดแวร์

In Android,การทดสอบระบบตามปกติประกอบด้วย

  • การทดสอบ GUI
  • การทดสอบการใช้งาน
  • การทดสอบประสิทธิภาพ
  • การทดสอบความเครียด

ในรายการข้างต้น การทดสอบประสิทธิภาพ ได้รับการมุ่งเน้นมากขึ้น คุณสามารถใช้เครื่องมือเช่น Tracทวนทบ เพื่อดำเนินการทดสอบประสิทธิภาพ Androidเครื่องมือนี้สามารถช่วยคุณในการแก้ไขข้อผิดพลาดของแอปพลิเคชันและวิเคราะห์ประสิทธิภาพได้ Traceview ถูกยกเลิกการใช้งานแล้ว และให้ใช้แทนด้วย โปรแกรมวิเคราะห์ประสิทธิภาพ CPU.

อัตโนมัติ Android การทดสอบ

As Android เนื่องจากระบบกระจัดกระจาย การทดสอบบนอุปกรณ์หลายชนิดจึงจำเป็น และนั่นก็มีค่าใช้จ่าย การทำงานแบบอัตโนมัติ Android การทดสอบช่วยลดค่าใช้จ่ายเหล่านั้นได้

ประโยชน์ของระบบอัตโนมัติ Android การทดสอบ

  • ลดเวลาในการดำเนินการกรณีทดสอบ
  • เพิ่มประสิทธิผลของกระบวนการพัฒนาของคุณ
  • การตรวจจับข้อบกพร่องตั้งแต่เนิ่นๆ ประหยัดค่าใช้จ่ายในการบำรุงรักษาซอฟต์แวร์
  • พบและแก้ไขข้อบกพร่องในการใช้งานได้อย่างรวดเร็ว
  • ตรวจสอบคุณภาพของซอฟต์แวร์

เราจะศึกษากรอบการทำงานทั้ง 2 กรอบต่อไปนี้

  • Android กรอบการทดสอบ
  • กรอบการทดสอบ Robolectric

Android กรอบการทดสอบ

หนึ่งในกรอบการทดสอบมาตรฐานสำหรับ Android แอปพลิเคชันคือ Android กรอบการทดสอบ มีการบูรณาการอย่างดีกับ Android เครื่องมือ SDK และโครงสร้างของมันประกอบด้วยสามส่วน

  1. แพ็คเกจแอปพลิเคชันคือแอปพลิเคชันเป้าหมายของคุณที่ต้องการทดสอบ
  2. InstrumentationTestRunner คือ กรณีทดสอบ ตัวรันเนอร์ที่ดำเนินการทดสอบบนแอปพลิเคชันเป้าหมาย ประกอบด้วย:
    • เครื่องมือทดสอบ: เครื่องมือ SDK สำหรับสร้างชุดทดสอบ สามารถใช้งานร่วมกับ IDE หรือเรียกใช้งานได้จากบรรทัดคำสั่ง
    • ลิงรันเนอร์: เครื่องมือที่ให้บริการ API สำหรับการเขียนโปรแกรมเพื่อควบคุม Android อุปกรณ์หรือโปรแกรมจำลองภายนอก Android รหัส.
  3. แพ็กเกจทดสอบถูกจัดระเบียบเป็นโปรเจกต์ทดสอบและปฏิบัติตามหลักการตั้งชื่อ หากแอปพลิเคชันที่กำลังทดสอบมีชื่อแพ็กเกจเป็น “com.mydomain.myapp” แพ็กเกจทดสอบก็ควรจะเป็น “com.mydomain.myapp.test” แพ็กเกจทดสอบประกอบด้วย 2 อ็อบเจ็กต์:
    • คลาสกรณีทดสอบ: รวมถึงวิธีการทดสอบที่จะดำเนินการกับแอปพลิเคชันเป้าหมาย
    • วัตถุจำลอง: รวมข้อมูลจำลองที่จะใช้เป็นตัวอย่างข้อมูลป้อนเข้าสำหรับกรณีทดสอบ

Android คลาสกรณีทดสอบ

Androidแผนภาพคลาส TestCase แสดงให้เห็นถึง... JUnit และลำดับชั้นของกรณีทดสอบเครื่องมือวัด

  1. กรณีทดสอบประกอบด้วย JUnit วิธีการทำงาน JUnit ทดสอบ
  2. TestSuite ใช้สำหรับรันชุดกรณีทดสอบ
  3. InstrumentationTestSuite คือชุดทดสอบที่แทรกข้อมูลการตรวจสอบเข้าไปใน InstrumentationTestCase ก่อนที่จะทำการทดสอบ
  4. InstrumentationTestRunner รันเคสทดสอบบนแอปพลิเคชันเป้าหมาย
  5. Androidกรณีทดสอบขยาย JUnit กรณีทดสอบที่มีเมธอดสำหรับเข้าถึงทรัพยากรต่างๆ เช่น Activity Context
  6. ApplicationTestCase ตรวจสอบความถูกต้องของคลาส Application ในสภาพแวดล้อมที่มีการควบคุม
  7. InstrumentationTestCase ใช้ตรวจสอบคุณสมบัติหรือพฤติกรรมเฉพาะอย่าง เช่น การแสดงผล UI ของแอปพลิเคชัน
  8. ActivityTestCase เป็นคลาสพื้นฐานที่รองรับการทดสอบกิจกรรมของแอปพลิเคชัน
  9. ProviderTestCase เป็นคลาสสำหรับทดสอบ ContentProvider ตัวเดียว
  10. ServiceTestCase ทดสอบคลาส Service ในสภาพแวดล้อมการทดสอบและสนับสนุนวงจรชีวิตของ Service
  11. SingleLaunchActivityTestCase ใช้สำหรับทดสอบ Activity เดียวโดยใช้ InstrumentationTestCase
  12. กรณีทดสอบหน่วยกิจกรรม ใช้สำหรับทดสอบกิจกรรมเดี่ยวที่แยกออกมา
  13. กรณีทดสอบการวัดกิจกรรม2 ขยาย JUnit คลาส TestCase จะเชื่อมต่อคุณกับแอปพลิเคชันเป้าหมายด้วยเครื่องมือวัด ทำให้คุณสามารถเข้าถึงส่วนประกอบ GUI และส่งเหตุการณ์ UI เช่น การกดแป้นพิมพ์หรือการสัมผัสได้

ด้านล่างนี้คือตัวอย่างของ ActivityInstrumentationTestCase ซึ่งใช้ตรวจสอบการทำงานของส่วนติดต่อผู้ใช้ (UI) ของแอปพลิเคชันเครื่องคิดเลข และตรวจสอบความถูกต้องของผลลัพธ์ที่แสดงบน UI

ตัวอย่าง ActivityInstrumentationTestCase2 การตรวจสอบผลลัพธ์ UI เครื่องคิดเลข Android

กรอบการทดสอบโรโบเล็กทริค

การทดสอบโดยใช้ Android การสร้างเฟรมเวิร์กสำหรับการทดสอบบนอุปกรณ์จริงหรืออีมูเลเตอร์นั้นทำได้ยาก การสร้างและรันการทดสอบนั้นช้าและต้องใช้ความพยายามในการพัฒนามาก เพื่อแก้ไขปัญหานี้ จึงมีทางเลือกอื่น นั่นคือ เฟรมเวิร์กการทดสอบ Robolectric

Robolectric ช่วยให้คุณใช้งานได้ Android ทดสอบโดยตรงบน JVM โดยไม่จำเป็นต้องใช้อุปกรณ์หรือโปรแกรมจำลอง

คลาสกรณีทดสอบ Robolectric

Robolectric สามารถดำเนินการดังต่อไปนี้:

  • ลงทะเบียนและสร้างคลาส Shadow
  • สกัดกั้นการโหลดของ Android ชั้น
  • การใช้งาน Javaช่วยเขียนทับเนื้อหาของเมธอด Android ชั้น
  • ผูกวัตถุ Shadow ไปที่ Android ชั้น

วิธีนี้ช่วยให้โค้ดที่กำลังทดสอบสามารถทำงานได้โดยไม่ต้องมีข้อผิดพลาด Android สิ่งแวดล้อม

กรอบการทดสอบอื่นๆ

นอกจากเฟรมเวิร์กสำหรับการทดสอบที่กล่าวมาข้างต้นแล้ว ยังมีเฟรมเวิร์กอื่นๆ อีกมากมาย เช่น:

  • Android รายงานจูนิตนักวิ่งทดสอบเครื่องมือวัดแบบกำหนดเองสำหรับ Android ที่สร้างรายงาน XML เพื่อใช้งานร่วมกับเครื่องมืออื่น ๆ
  • Espresso
  • Appium

ตำนานของ Android การทดสอบ

องค์กรธุรกิจหลายแห่งพัฒนา Android การทดสอบ กลยุทธ์ที่ตั้งอยู่บนพื้นฐานของความเข้าใจผิดทั่วไป ในส่วนนี้จะตรวจสอบตำนานและความเป็นจริงที่เป็นที่นิยมบางประการของ Android การทดสอบ

ความเชื่อผิดๆ ข้อที่ 1: ทั้งหมด Android อุปกรณ์เหมือนกัน ดังนั้นการทดสอบบนโปรแกรมจำลองจึงเพียงพอแล้ว

แอปพลิเคชันอาจทำงานได้อย่างสมบูรณ์แบบบนโปรแกรมจำลอง แต่กลับเกิดข้อผิดพลาดระหว่างการทำงานบนอุปกรณ์จริงบางประเภท

Android ข้อความแสดงข้อผิดพลาดของแอปพลิเคชันปรากฏขึ้นระหว่างการใช้งานบนอุปกรณ์จริง

โปรแกรมจำลองไม่เพียงพอสำหรับการทดสอบแอปบนมือถือ คุณต้องทดสอบแอปของคุณบนอุปกรณ์จริง

ความเชื่อผิดๆ ข้อที่ 2: การทดสอบบนอุปกรณ์ทั่วไปบางรุ่นก็เพียงพอแล้ว

แอปพลิเคชันของคุณแสดงผลแตกต่างกันไปในแต่ละอุปกรณ์ เนื่องจากฮาร์ดแวร์ ขนาดหน้าจอ และหน่วยความจำแตกต่างกัน จึงควรทดสอบบนอุปกรณ์หลากหลายประเภท เวอร์ชันระบบปฏิบัติการ เครือข่ายผู้ให้บริการ และสถานที่ต่างๆ

ความเชื่อผิดๆ ข้อที่ 3: การทดสอบแบบสำรวจก่อนเปิดตัวก็เพียงพอแล้ว

  • โดยทั่วไปแล้วในการทดสอบ เราจะออกแบบกรณีทดสอบก่อนแล้วจึงทำการทดสอบ แต่ในการทดสอบแบบสำรวจ (Exploratory testing) การออกแบบและการดำเนินการจะเกิดขึ้นพร้อมกัน
  • ไม่มีแผนหรือการเตรียมการใดๆ ดังนั้นผู้ทดสอบจึงทำการทดสอบตามที่ตนเลือก ฟังก์ชันบางอย่างถูกทดสอบซ้ำๆ ในขณะที่บางฟังก์ชันไม่เคยถูกทดสอบเลย

ความเชื่อผิดๆ ข้อที่ 4: หากแอปพลิเคชันมีข้อผิดพลาด ผู้ใช้จะเข้าใจเอง

  • หากแอปพลิเคชันใช้งานไม่ได้และมีข้อผิดพลาด ผู้ใช้จะถอนการติดตั้งแอปของคุณ
  • ปัญหาด้านคุณภาพเป็นสาเหตุหลักอันดับแรกที่ทำให้ได้รับรีวิวที่ไม่ดี Google การกระทำดังกล่าวทำลายชื่อเสียงของคุณและทำให้คุณสูญเสียความไว้วางใจจากลูกค้า

ดังนั้นการมีสิ่งที่เหมาะสมจึงเป็นสิ่งจำเป็น Android มีการวางแผนกลยุทธ์การทดสอบไว้แล้ว

แนวทางปฏิบัติที่ดีที่สุดใน Android การทดสอบ

  • นักพัฒนาแอปพลิเคชันควรสร้างกรณีทดสอบพร้อมกันในขณะที่เขียนโค้ด
  • ควรจัดเก็บชุดทดสอบทั้งหมดไว้ในระบบควบคุมเวอร์ชัน พร้อมกับซอร์สโค้ด
  • ใช้การผสานรวมอย่างต่อเนื่องและรันการทดสอบทุกครั้งที่มีการเปลี่ยนแปลงโค้ด
  • อย่าพึ่งพาแต่โปรแกรมจำลองและอุปกรณ์ที่รูทแล้วเพียงอย่างเดียว ตรวจสอบผลลัพธ์บนฮาร์ดแวร์จริงด้วยโปรแกรมตรวจสอบ เช่น uiautomatorviewer

คำถามที่พบบ่อย

ไม่ โครงการสมัยใหม่ใช้ Androidการทดสอบ X กับ JUnit 4 และ AndroidJUnitนักวิ่ง. JUnit คลาสทดสอบ 3 คลาสที่อธิบายไว้ในที่นี้ถูกยกเลิกการใช้งานใน API 24 และยังคงใช้ได้เฉพาะกับชุดทดสอบรุ่นเก่าเท่านั้น

การเรียนรู้ของเครื่องจะซ่อมแซมตัวระบุตำแหน่งหลังจากมีการเปลี่ยนแปลงเค้าโครง จัดกลุ่มรายงานข้อผิดพลาดและ ANR ที่ซ้ำกัน และคาดการณ์ว่าการเปลี่ยนแปลงใดจะทำให้การทดสอบใดล้มเหลว เพื่อให้ชุดทดสอบที่ทำงานต่อการคอมมิตสั้นลง

Copilot จะสร้างรูปแบบ onView และ check ทั่วไปจากสถานการณ์ที่อธิบายไว้ มันไม่สามารถทราบตัวระบุวิวหรือช่วงเวลาของคุณได้ ดังนั้นให้ลองรันแต่ละคำแนะนำหนึ่งครั้งและปรับตัวจับคู่ก่อน

Espresso UI Automator ทดสอบภายในแอปพลิเคชันของคุณเอง รวดเร็ว และเสถียร UI Automator ข้ามขอบเขตของแอปพลิเคชัน จึงเหมาะสำหรับการแจ้งเตือน การตั้งค่า และกล่องโต้ตอบระบบ ชุดโปรแกรมหลายชุดใช้ทั้งสองอย่าง

API ActivityScenario ใน AndroidX Test ซึ่งโดยปกติจะใช้ร่วมกับ ActivityScenarioRule โดยจะเคลื่อนย้ายกิจกรรมผ่านสถานะวงจรชีวิตที่กำหนดไว้โดยไม่ต้องขยายคลาสกรณีทดสอบที่เลิกใช้งานแล้ว

เริ่มจากโทรศัพท์ระดับล่าง ระดับกลาง และรุ่นเรือธงล่าสุด โดยเลือกจากรุ่นที่มีช่วงราคาประมาณสองถึงสามรุ่น Android มีหลายเวอร์ชัน รวมถึงแท็บเล็ตด้วย เพิ่มการใช้งานระบบคลาวด์บนอุปกรณ์ก่อนวางจำหน่าย แทนที่จะซื้อฮาร์ดแวร์เพิ่ม

โค้ดเหล่านี้ทำงานบน JVM ของเครื่องสร้างโปรแกรมโดยใช้คลาสเสมือนแทนที่จะทำงานบนอุปกรณ์จริง ดังนั้นจึงไม่มีการบรรจุ การติดตั้ง หรือการบูตอีมูเลเตอร์ ทำให้สามารถใช้งานได้จริงในทุกๆ การแก้ไขโค้ด

Googleชุดไลบรารีทดสอบปัจจุบันของ 's ซึ่งประกอบด้วย JUnit และส่วนขยายความจริง, ActivityScenario, Espresso และ UI Automator อยู่เบื้องหลังกลุ่มการพึ่งพาเพียงกลุ่มเดียวที่ใช้งานได้บนอุปกรณ์จริง โปรแกรมจำลอง และ Robolectric

สรุปโพสต์นี้ด้วย: