Google Espresso หรือ Robotium [ปิด]


116

ฉันต้องใช้เครื่องมือทดสอบ UI อัตโนมัติและฉันสับสนระหว่างการใช้ Robotium กับ Google Espresso

อะไรคือความแตกต่างที่สำคัญระหว่างทั้งสอง? มีคุณสมบัติที่มีอยู่ในตัวเดียว แต่ไม่มีคุณสมบัติอื่น ๆ หรือไม่?


20
ฉันเกลียดเวลาที่มีคนลงคะแนนโดยไม่เขียนความคิดเห็นใด ๆ ฉันจะขอบคุณถ้าคนที่ลงคะแนนเขียนความคิดเห็นว่าทำไมเขา / เธอถึงทำเช่นนั้น
Androidme

9
ฉันคิดว่าคำถามมีประโยชน์มาก นักพัฒนาจำนวนมากถามสิ่งนี้กับตัวเอง อะไรคือความแตกต่าง? ฉันคิดว่าปัญหาคือวิธีที่คุณถาม คุณควรถามในรายละเอียดเพิ่มเติมไม่ใช่แค่ถามว่าจะใช้ตัวไหน
tasomaniac

8
นี่คือคำถามที่ฉันต้องการคำตอบ ขอบคุณสำหรับการโพสต์
Richard Fung

8
ฉันไม่ชอบข้อเท็จจริงที่ว่านี่เป็นเรื่องนอกประเด็นตาม StackOverflow ฉันรู้ว่าถ้าเราต้องเปรียบเทียบทุกไลบรารีและเครื่องมืออาจมีคำตอบตามความคิดเห็นมากมาย แต่คำถามเช่นนี้ที่ขอความแตกต่างระหว่างแหล่งข้อมูลทั้งสองนั้นมีประโยชน์มาก
David Argyle Thacker

คำตอบ:


176

การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นหนึ่งในผู้เขียนของ Espresso

ทั้งเอสเพรสโซ่และ Robotium กรอบวัดตามความหมายที่พวกเขาใช้Android Instrumentationในการตรวจสอบและมีปฏิสัมพันธ์กับกิจกรรมภายใต้การทดสอบ

ที่ Google เราเริ่มต้นด้วยการใช้ Robotium เพราะสะดวกกว่าเครื่องมือวัดสต็อก (สำหรับผู้พัฒนา Robotium ในการทำเช่นนั้น) อย่างไรก็ตามมันไม่ได้ตอบสนองความต้องการของเราสำหรับกรอบการทำงานที่ทำให้การเขียนแบบทดสอบที่เชื่อถือได้เป็นเรื่องง่ายสำหรับนักพัฒนา

ความก้าวหน้าที่สำคัญใน Espresso เหนือ Robotium:

  1. การประสานข้อมูล ตามค่าเริ่มต้นตรรกะการทดสอบเครื่องมือวัดจะรันบนเธรด (เครื่องมือวัด) ที่แตกต่างจากการดำเนินการของ UI (ประมวลผลบนเธรด UI) หากไม่มีการซิงโครไนซ์การดำเนินการทดสอบกับการอัปเดต UI การทดสอบจะมีแนวโน้มที่จะเกิดรอยแตก - นั่นคือจะล้มเหลวแบบสุ่มเนื่องจากปัญหาเรื่องเวลา ผู้เขียนทดสอบส่วนใหญ่ไม่สนใจข้อเท็จจริงนี้บางคนเพิ่มกลไกการพัก / ลองใหม่และแม้แต่ใช้รหัสความปลอดภัยเธรดที่ซับซ้อนน้อยกว่า สิ่งเหล่านี้ไม่เหมาะ เอสเปรสโซดูแลความปลอดภัยของด้ายด้วยการซิงโครไนซ์การทดสอบและการยืนยันกับ UI ของแอปพลิเคชันที่อยู่ระหว่างการทดสอบ Robotium พยายามแก้ไขปัญหานี้ด้วยกลไกการนอนหลับ / การลองใหม่ซึ่งไม่เพียง แต่ไม่น่าเชื่อถือ แต่ยังทำให้การทดสอบทำงานช้ากว่าที่จำเป็น

  2. API Espresso มี API ขนาดเล็กที่กำหนดไว้อย่างดีและคาดเดาได้ซึ่งเปิดให้ปรับแต่งได้ คุณบอกกรอบวิธีค้นหาองค์ประกอบ UI โดยใช้ตัวจับคู่แฮมเครสต์มาตรฐานจากนั้นสั่งให้ดำเนินการหรือตรวจสอบการยืนยันองค์ประกอบเป้าหมาย คุณสามารถเปรียบเทียบสิ่งนี้กับ API ของ Robotium ซึ่งคาดว่าผู้เขียนทดสอบจะเลือกวิธีการคลิกมากกว่า 30 วิธี นอกจากนี้ Robotium ยังเปิดเผยวิธีการที่เป็นอันตรายเช่น getCurrentActivity (ปัจจุบันหมายความว่าอย่างไร) และ getView ซึ่งช่วยให้คุณสามารถดำเนินการกับวัตถุนอกเธรดหลัก (ดูประเด็นด้านบน)

  3. ล้างข้อมูลความล้มเหลว เอสเปรสโซมุ่งมั่นที่จะให้ข้อมูลการแก้ไขข้อบกพร่องที่ครบถ้วนเมื่อเกิดความล้มเหลว นอกจากนี้คุณสามารถปรับแต่งวิธีจัดการความล้มเหลวโดย Espresso ด้วยตัวจัดการความล้มเหลวของคุณเอง ฉันไม่ได้ลองใช้มาระยะหนึ่งแล้ว แต่ Robotium เวอร์ชันก่อนหน้าต้องทนทุกข์ทรมานจากการจัดการความล้มเหลวที่ไม่สอดคล้องกัน (เช่นเมธอด clickOnView จะกลืน SecurityExceptions)

ตรงกันข้ามกับคำตอบก่อนหน้านี้ Espresso ได้รับการสนับสนุนในเวอร์ชัน API ทั้งหมดที่มีผู้ใช้จำนวนมาก (ดู: http://developer.android.com/about/dashboards/index.html ) ใช้งานได้กับเวอร์ชันเก่าบางเวอร์ชัน แต่การทดสอบเวอร์ชันเหล่านั้นจะเป็นการสิ้นเปลืองทรัพยากร การพูดเกี่ยวกับการทดสอบ ... Espresso ได้รับการทดสอบในทุกการเปลี่ยนแปลงโดยชุดทดสอบที่ครอบคลุม (ครอบคลุมมากกว่า 95%) รวมถึงแอปพลิเคชัน Android ส่วนใหญ่ที่พัฒนาโดย Google


ไฮ! ขอบคุณสำหรับคำตอบ Espresso เสนอความเป็นไปได้ในการทดสอบแอปพลิเคชั่นหลายตัวในกรณีทดสอบเดียวกันหรือไม่? ฉันต้องทดสอบแอปพลิเคชันของฉันที่เรียกกิจกรรมจากแอปพลิเคชันอื่น (แอปอื่นของฉันที่แชร์ sharedUserId เดียวกัน) จากนั้นจึงดึงผลลัพธ์ออกมา ฉันทำแบบนั้นกับ Robotium ไม่ได้ แต่อาจจะใช้ Espresso? :-)
nbe_42

1
ไม่ - คุณไม่สามารถโต้ตอบกับ UI นอกกระบวนการของคุณกับ Espresso นี่เป็นข้อ จำกัด ของกรอบเครื่องมือวัด
ValeraZakharov

1
@ValeraZakharov :: หวัดดี ... !! อย่างที่คุณบอกเอสเปรสโซจะดูแล UI Thread Synchronization และไม่จำเป็นต้องใส่ Sleeps แต่ในกรณีของฉันฉันได้เขียน testcases ไม่กี่ชิ้นและ testcases ทั้งหมดทำงานในเครื่องของฉัน (โดยใช้หนึ่ง sleep ต่อ TestSuite เป็นจุดเริ่มต้น) แต่เกือบ 99% testcases ล้มเหลวเมื่อฉันรันด้วย jenkins local / server ฉันปิดการใช้งานแอนิเมชั่นทั้งหมดในโปรแกรมจำลองเจนกินส์แล้ว เกือบตลอดเวลาที่ฉันได้รับ AppNotIdleException ฉันไม่สามารถหาสาเหตุที่แท้จริงได้ คุณช่วยฉันออกไปได้ไหม
Naresh Gunda

@Radu เคยทำมาแล้ว. ความคิดเห็นของคุณเป็นโมฆะและไม่มีคำอธิบายที่เหมาะสมดูเหมือนเป็นความพยายามที่โง่เขลาที่จะได้รับความสนใจ
Rakib

9

Espresso เร็วกว่า Robotium มาก แต่ใช้ได้กับ SDK บางเวอร์ชันเท่านั้น

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


การเพิ่มคะแนนจะช่วยให้ฉันสร้างคำพ้องความหมายสำหรับแท็กนี้ .. ;)
Snicolas

2
การเชื่อมโยงดังกล่าวข้างต้นการเปลี่ยนแปลงนี้เป็นหนึ่งใหม่: google.github.io/android-testing-support-library/docs/espresso/...
Evin1_
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.