Google Espresso veya Robotium [kapalı]


116

Otomatik UI test aracını kullanmam gerekiyor ve Robotium ile Google Espresso arasında kafam karıştı.

İkisi arasındaki temel farklar nelerdir? Birinde var olan ancak diğerinde olmayan özellikler var mı?


20
İnsanların herhangi bir yorum yazmadan olumsuz oy vermesinden gerçekten nefret ediyorum. Olumsuz oy kullanan kişi neden bunu yaptığına dair bazı yorumlar yazarsa memnun olurum
Androidme

9
Sorunun çok yardımcı olduğunu düşünüyorum. Pek çok geliştirici bunu kendilerine soruyor. Farklılıklar nedir? Sanırım sorun, sorduğunuz yol. Daha detaylı sormalısınız ve sadece hangisini kullanacağınızı sormamalısınız.
tasomaniac

8
Bu tam olarak cevaplanmasını istediğim soru. Gönderdiğiniz için teşekkürler
Richard Fung

8
StackOverflow'a göre bunun konu dışı olmasından hoşlanmıyorum. Her bir kitaplığı ve aracı karşılaştırmamız gerekirse, fikir temelli pek çok yanıt olabileceğini biliyorum, ancak iki kaynak arasındaki farklılıkları soran böyle bir soru çok yardımcı olur.
David Argyle Thacker

Yanıtlar:


176

Tam açıklama: Ben Espresso'nun yazarlarından biriyim.

Hem Espresso hem de Robotium, enstrümantasyon tabanlı çerçevelerdir, yani test edilen Aktiviteleri incelemek ve bunlarla etkileşim kurmak için Android Cihazları kullanırlar.

Google'da, stok enstrümantasyondan daha uygun olduğu için Robotium'u kullanmaya başladık (bunu yapmak için Robotium geliştiricilerine şapka çıkarıyoruz). Ancak, geliştiriciler için güvenilir testler yazmayı kolaylaştıran bir çerçeve ihtiyacımızı karşılamadı .

Espresso'da Robotium'a kıyasla büyük gelişmeler

  1. Senkronizasyon. Varsayılan olarak, enstrümantasyon testi mantığı, UI işlemlerinden (UI iş parçacığında işlenir) farklı bir (enstrümantasyon) iş parçacığında çalışır. Test işlemlerinin UI güncellemeleriyle senkronizasyonu olmadan, testler kesintiye uğrayacaktır - yani zamanlama sorunları nedeniyle rastgele başarısız olacaktır. Çoğu test yazarı bu gerçeği görmezden gelir, bazıları uyku / yeniden deneme mekanizmaları ekler ve daha da azı daha karmaşık iş parçacığı güvenlik kodu uygular. Bunların hiçbiri ideal değil. Espresso, test eylemlerini ve iddiaları test edilen uygulamanın kullanıcı arayüzü ile sorunsuz bir şekilde senkronize ederek iş parçacığı güvenliğini sağlar. Robotium, yalnızca güvenilmez olmakla kalmayıp aynı zamanda testlerin gereğinden daha yavaş çalışmasına neden olan uyku / yeniden deneme mekanizmalarıyla bu sorunu çözmeye çalışır.

  2. API. Espresso, özelleştirmeye açık, küçük, iyi tanımlanmış ve tahmin edilebilir bir API'ye sahiptir. Çerçeveye, standart hamcrest eşleştiricileri kullanarak bir UI öğesini nasıl bulacağını söylersiniz ve ardından ona bir eylem gerçekleştirmesi veya hedef öğede bir iddiayı kontrol etmesi talimatını verirsiniz . Bunu, test yazarının 30'dan fazla tıklama yöntemi arasından seçim yapmasının beklendiği Robotium API'siyle karşılaştırabilirsiniz. Ayrıca Robotium, getCurrentActivity (zaten akım ne anlama geliyor?) Ve getView gibi tehlikeli yöntemleri ortaya çıkarır, bu da ana iş parçacığı dışındaki nesneler üzerinde işlem yapmanıza izin verir (yukarıdaki noktaya bakın).

  3. Arıza bilgilerini temizleyin. Espresso, bir arıza olduğunda zengin hata ayıklama bilgileri sağlamaya çalışır. Ayrıca, kendi arıza gidericinizle arızaların Espresso tarafından ele alınma şeklini özelleştirebilirsiniz. Bir süredir denemedim, ancak Robotium'un önceki sürümleri tutarsız hata işlemeden muzdaripti (örn. ClickOnView yöntemi SecurityExceptions'ı yutardı).

Önceki bir cevabın aksine, Espresso, önemli sayıda kullanıcıya sahip tüm API sürümlerinde desteklenmektedir (bkz . Http://developer.android.com/about/dashboards/index.html ). Bazı eski sürümlerde çalışır, ancak bunları test etmek kaynak israfı olur. Testlerden bahsetmişken ... Espresso, her değişiklikte kapsamlı bir test paketi (% 95'in üzerinde kapsama alanı ile) ve Google tarafından geliştirilen android uygulamalarının çoğu tarafından test edilir.


Selam ! Cevabınız için teşekkür ederiz. Espresso, aynı test durumunda birkaç uygulamayı test etme imkanı sunuyor mu? Başka bir uygulamadan (aynı paylaşılanKullanıcı Kimliğini paylaşan diğer uygulamam) bir etkinlik çağıran ve ardından sonucu alan uygulamamı test etmem gerekiyor. Bunu Robotium ile yapamam ama belki Espresso ile? :-)
nbe_42

1
Hayır - Espresso ile sürecinizin dışında UI ile etkileşim kuramazsınız. Bu, enstrümantasyon çerçevesinin bir sınırlamasıdır.
ValeraZakharov

1
@ValeraZakharov :: Hii ... !! Dediğin gibi espresso, UI Thread Synchronization ile ilgilenecek ve Sleeps koymaya gerek kalmayacak. Ama benim durumumda, birkaç test senaryosu yazdım ve tüm test senaryoları yerel makinemde çalışıyor (Başlangıç ​​olarak TestSuite başına bir uyku ile). Ancak yerel / sunucu jenkins ile çalıştırdığımda neredeyse% 99 test senaryosu başarısız oluyor. Jenkins öykünücüsündeki tüm animasyonları devre dışı bıraktım. Çoğu zaman AppNotIdleException alıyorum. Temel nedeni bulamıyorum. Lütfen bana yardım eder misin?
Naresh Gunda

@Radu yaptım. Yorumunuz geçersiz ve uygun bir açıklama olmadan dikkat çekmek için aptalca bir girişim gibi görünüyor.
Rakib

9

Espresso, Robotium'dan çok daha hızlıdır, ancak yalnızca bazı SDK sürümlerinde çalışır.

Dolayısıyla, tüm cihazlarda çalışan bir test istiyorsanız, Roboitum'a gidin. Değilse, espresso için gidin ve bir süre daha beta testçisi olacağınızı unutmayın.


Bir olumlu oy, bu etiket için bir eşanlamlı oluşturmama yardımcı olur ..;)
Snicolas

2
Yukarıdaki bağlantı değişti, bu yeni: google.github.io/android-testing-support-library/docs/espresso/…
Evin1_
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.