Kullanıcı arayüzü testlerini otomatikleştirin

Kullanıcı etkileşimlerini test etmek, kullanıcıların uygulamanızla etkileşimde bulunurken beklenmeyen sonuçlarla karşılaşmamasını veya kötü bir deneyim yaşamasını önlemeye yardımcı olur. Uygulamanızın kullanıcı arayüzünün doğru şekilde çalıştığını doğrulamanız gerekiyorsa kullanıcı arayüzü testleri oluşturma alışkanlığı edinmelisiniz.

Kullanıcı arayüzü testindeki yaklaşımlardan biri, gerçek kişi olan bir test kullanıcısının hedef uygulamada bir dizi kullanıcı işlemini gerçekleştirmesini ve uygulamanın doğru şekilde davrandığını doğrulamasını sağlamaktır. Ancak, bu manuel yaklaşım çok zaman alabilir ve hataya açık olabilir. Kullanıcı arayüzü testlerinizi, kullanıcı işlemlerinin otomatik bir şekilde gerçekleştirileceği şekilde yazmak, daha verimli bir yaklaşımdır. Otomatik yaklaşım, testlerinizi hızlı ve güvenilir bir şekilde tekrarlanabilir bir şekilde çalıştırmanızı sağlar.

Kullanıcı arayüzü testleri bir uygulamayı (veya uygulamanın bir kısmını) başlatır, ardından kullanıcı etkileşimlerini simüle eder ve son olarak uygulamanın uygun tepki verip vermediğini kontrol eder. Bunlar, küçük bir bileşenin davranışını doğrulamaktan tüm kullanıcı akışını kat eden büyük bir gezinme testine kadar değişebilen entegrasyon testleridir. Regresyonları kontrol etmenin yanı sıra farklı API düzeyleri ve fiziksel cihazlarla uyumluluğu doğrulamak için yararlıdır.

Android Studio'da araçlı kullanıcı arayüzü testleri

Araçlı kullanıcı arayüzü testlerini Android Studio'yu kullanarak çalıştırmak için test kodunuzu ayrı bir Android test klasöründe (src/androidTest/java) uygularsınız. Gradle için Android Eklentisi, test kodunuza dayalı bir test uygulaması oluşturur, ardından test uygulamasını hedef uygulamayla aynı cihazda yükler. Test kodunuzda, belirli kullanım senaryolarını kapsayan test görevlerini gerçekleştirmek için hedef uygulamadaki kullanıcı etkileşimlerini simüle etmek üzere kullanıcı arayüzü test çerçevelerini kullanabilirsiniz.

Jetpack çerçeveleri

Jetpack, kullanıcı arayüzü testleri yazmak için API'ler sağlayan çeşitli çerçeveler içerir:

  • Espresso test çerçevesi (Android 4.0.1, API düzeyi 14 veya üstü), tek bir hedef uygulama içindeki Görünümler ile kullanıcı etkileşimlerini simüle etmek üzere kullanıcı arayüzü testleri yazmaya yönelik API'ler sağlar. Espresso kullanmanın önemli bir avantajı, test ettiğiniz uygulamanın kullanıcı arayüzü ile test işlemlerinin otomatik olarak senkronize edilmesini sağlamasıdır. Espresso, ana iş parçacığının boşta olduğunu algılayarak test komutlarınızı uygun zamanda çalıştırabilir. Bu da testlerinizin güvenilirliğini artırır.
  • Jetpack Compose (Android 5.0, API düzeyi 21 veya sonraki sürümler), Oluşturma ekranları ve bileşenlerini başlatmak ve bunlarla etkileşimde bulunmak için bir dizi test API'si sağlar. Oluşturma öğeleriyle etkileşimler testlerle senkronize edilir ve zaman, animasyonlar ve yeniden derlemeler üzerinde tam kontrole sahiptir.
  • UI Automator (Android 4.3, API düzeyi 18 veya üstü), sistem ve yüklü uygulamalarda uygulamalar arası işlevsel kullanıcı arayüzü testi için uygun bir kullanıcı arayüzü test çerçevesidir. UI Automator API'leri, bir test cihazında Ayarlar menüsünü veya uygulama başlatıcıyı açma gibi işlemleri gerçekleştirmenize olanak tanır.
  • Robofactric (Android 4.1, API düzeyi 16 veya üstü), iş istasyonunuzda veya bir emülatör ya da cihaz yerine normal bir JVM'deki sürekli entegrasyon ortamında çalışan yerel testler oluşturmanıza olanak tanır. Kullanıcı arayüzü bileşenleriyle etkileşimde bulunmak için Espresso veya Compose test API'lerini kullanabilir.

Aksaklık ve senkronizasyon

Mobil uygulamaların ve çerçevelerin eşzamansız doğası çoğu zaman güvenilir ve tekrarlanabilir testlerin yazılmasını zorlaştırır. Bir kullanıcı etkinliği yerleştirildiğinde test çerçevesi, uygulamanın buna tepki vermeyi tamamlamasını beklemelidir. Bu işlem, ekrandaki bazı metinleri değiştirmekten etkinliğin eksiksiz bir şekilde yeniden oluşturulmasına kadar değişebilir. Testin belirleyici bir davranışı yoksa kesintisiz olur.

Compose veya Espresso gibi modern çerçeveler testler düşünülerek tasarlanmıştır. Bu nedenle, kullanıcı arayüzünün bir sonraki test işlemi veya onaylamadan önce boşta kalacağına dair belirli bir garanti vardır. Bu, senkronizasyondur.

Senkronizasyonu test et

Bir veritabanından veri yükleme ya da sonsuz animasyonlar gösterme gibi test tarafından bilinmeyen eşzamansız veya arka plan işlemleri çalıştırdığınızda da sorunlar ortaya çıkabilir.

Test başarılı olmadan önce uygulamanın boşta olup olmadığını kontrol eden bir döngüyü gösteren akış diyagramı
Şekil 1: Senkronizasyonu test etme.

Test paketinizin güvenilirliğini artırmak için Espresso Boşta Kalma Kaynakları gibi arka plan işlemlerini izlemek üzere bir yöntem yükleyebilirsiniz. Ayrıca, boşta olup olmadığını sorgulayabileceğiniz veya senkronizasyonu iyileştiren test sürümleri için modülleri de değiştirebilirsiniz. Örneğin, eşgüdümler için TestDispatcher veya RxJava için RxIdler.

Senkronizasyon belirli bir süre beklemeye dayalıyken test hatasını gösteren şema
Şekil 2: Testlerde uyku kullanımı, testlerin yavaş veya düşük olmasına yol açar.

Mimari ve test kurulumu

Uygulamanızın mimarisi, testlerin ikili programları test etmek için bazı parçalarının yerine geçmesine izin vermelidir ve teste yardımcı olacak yardımcı programlar sağlayan kitaplıklar kullanmalısınız. Örneğin, bir veri deposu modülünü, teste sahte, deterministik veriler sağlayan bellek içi sürümüyle değiştirebilirsiniz.

Üretim ve test mimarisi diyagramları. Üretim şeması, depoya veri sağlayan yerel ve uzak veri kaynaklarını gösterir. Bu kaynaklar, verileri kullanıcı arayüzüne eşzamansız olarak sağlar. Test diyagramı, verilerini kullanıcı arayüzüyle eşzamanlı olarak sağlayan Sahte bir depoyu göstermektedir.
Şekil 3: Bağımlılıklarını sahte öğelerle değiştirerek bir kullanıcı arayüzünü test etme.

Bu işlevi etkinleştirmek için önerilen yaklaşım, bağımlılık yerleştirme kullanmaktır. Kendi sisteminizi manuel olarak oluşturabilirsiniz ancak bunun için Hilt gibi bir DI çerçevesi kullanmanızı öneririz.

Neden otomatik olarak test edilmeli?

Bir Android uygulaması, birçok API düzeyinde ve form faktöründe binlerce farklı cihazı hedefleyebilir. İşletim sisteminin kullanıcıya sunduğu yüksek düzeyde özelleştirme, uygulamanızın yanlış oluşturulabileceği, hatta bazı cihazlarda kilitlenebileceği anlamına gelir.

Kullanıcı arayüzü testi, uyumluluk testi yaparak bir uygulamanın farklı bağlamlardaki davranışını doğrulamanıza olanak tanır. Kullanıcı arayüzü testlerinizi aşağıdaki şekillerde değişiklik gösteren cihazlarda çalıştırmak isteyebilirsiniz:

  • API düzeyi: 21, 25 ve 30.
  • Yerel ayar: İngilizce, Arapça ve Çince.
  • Yön: Dikey, yatay.

Dahası, uygulamalar telefon dışındaki davranışı da kontrol etmelidir. Testlerinizi tabletler, katlanabilir cihazlar ve diğer cihazlarda yapmanız gerekir.

Ek kaynaklar

Kullanıcı arayüzü testleri oluşturma hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.

Dokümanlar

Codelab uygulamaları