EarlGrey ile iOS Uygulamalarına Otomasyon Testleri

Ayşe Nur Bakırcı
Delivery Hero Tech Hub
6 min readJan 5, 2023
Image from raywenderlich.com

Herkese merhaba, bu yazımda iOS uygulamalarında UI Test yazmak için kullandığımız EarlGrey’den bahsedeceğim. İyi okumalar.

UI Test Nedir? Neden kullanılır?

Bir uygulama geliştirilirken, her yeni özellik eklendiğinde uygulamaya eklenen bu özelliklerin etkilerini sık sık kontrol etmek isteriz. Ancak çok sayıda ekran ve özelliğe sahip olduğumuz durumlarda, uygulamaya eklenen her yeni özelliği kontrol etmek yorucu olabilir. Arayüz kontrollerinin zorlaştığı durumlarda projeye UI Test ekleyerek bu kontrollerin XCode aracılığıyla yapılmasını sağlayabiliriz.

Apple, UI test için bize XCTest adlı yerel bir framework sağlar. Bu framework sayesinde UI test metotlarını ekleyerek UI test sınıfları oluşturabilir, UI elemanları ile iletişim kurabilir ve ögelerin kontrollerini sağlayabiliriz. Bu sayede projede yapılan değişikliklerin kullanıcı arayüzünde istemediğimiz durumlara yol açıp açmadığını pratik bir yolla öğrenmiş oluruz.

Tabii ki her şeyde olduğu gibi UI testlerde de ihtiyacımız doğrultusunda kullanabileceğimiz birden çok yapı mevcuttur. Bu yapılardan bazıları aşağıda belirtilmiştir.

UI Test İçin Kullanılabilinecek Yapılar

Test framework’leri, verimli bir şekilde testleri yürütmemizi sağlayan araçlardır. Bu framework’ler sayesinde; uygulamaları hızlı ve pratik şekilde test edebilir, test sonuçlarının analizine ulaşabilir ve uygulamayı test ederken kaynak kullanımının daha az olmasını sağlayabiliriz.

XCUITest

XCTest, Apple’a ait resmi iOS test framework’üdür. Bu yapı ile iOS uygulamasına birim testi, performans testi ve arayüz testi gibi çeşitli testleri uygulayabiliriz. XCUITest ise XCTest’in bir alt sınıfıdır ve iOS uygulamasına arayüz testi yazılmasını sağlar. Bu yapı ile UI testleri kaydedip, kaydettiğimiz testleri çalıştırabildiğimiz için UI test senaryoları oluşturmak diğerlerine göre daha kolaydır.

KIF (Keep It Functional)

KIF, iOS uygulamaları için tasarlanmış, açık kaynak bir arayüz test framework’üdür. Bu framework de otomasyon testleri için XCTest target’ını kullanır. Bu sayede doğrudan projeye entegre olabilir. KIF ile oluşturulan testler gerçek hayatta uygulamanın kullanıcı tarafından nasıl kullanılacağını taklit eder.

EarlGrey

EarlGrey, Google tarafından iOS uygulamalarını test etmek için geliştirilmiş, XCTest ve XCUITest ile birleştirilebilir açık kaynak arayüz test framewok’üdür. EarlGrey ile testler yürütülürken, işlemler yalnızca görünür olan ui elemanları üzerinden ilerletilir. Bu sebeple EarlGrey ile oluşturulmuş testlerin daha hızlı ve güvenilir olduğunu söyleyebiliriz.

EarlGrey Kullanarak Test Yazmak

Github üzerinden EarlGrey deposunu incelerseniz EarlGrey ve EarlGrey2 şeklinde iki versiyonun olduğunu görebilirsiniz. Bu versiyonlar arasında birkaç temel farklılık vardır. Bunlar;

  • EarlGrey Unit Test Target’ını kullanırken, EarlGrey2 UI Test Target’ını kullanır. Bunun sebebi de EarlGrey2'nin EarlGrey ve XCUITest’in birleştirilerek oluşturulmasıdır.
  • EarlGrey unit testlerle birlikte çalıştığı için uygulama ile etkileşime girmemizi sağlayan bir white-box test aracıdır diyebiliriz. Ancak EarlGrey2 UI testler üzerinden çalıştığı için aynı şeyi söyleyemeyiz. Ancak yine de EarlGrey2'de white-box testlerini ilerletmek istersek,EarlGrey2 içerisindeki eDistantObject’i kullanabiliriz.

Aşağıdaki kurulum ve örnekler EarlGrey2 kullanılarak oluşturulmuştur. Siz kendi kullanım alanınıza ve ihtiyaçlarınıza göre hangisini kullanacağınızı belirleyebilirsiniz.

Kurulumu;

1- GitHub üzerinden EarlGrey'i kendi bilgisayarımıza klonlayarak kurulum işlemine başlayabiliriz. Burada versiyon 2'yi kullanacağımızdan versiyon 2'nin bulunduğu earlgrey2 branch’ini klonlamalıyız.

git clone -b earlgrey2 https://github.com/google/EarlGrey.git

2. Klonlama işlemi tamalandıktan sonra, proje dosyasındaki download_deps.sh dosyasını çalıştırarak EarlGrey’in kurulumunu sağlamalıyız.

sh Scripts/download_deps.sh

3- Bu işlemleri tamamladıktan sonra EarlGrey.xcodeproj’i açıp AppFramework ve TestLib target’larından build alabildiğimizden emin olmamız gerekiyor.

4- Bu aşamadan sonra sıra EarlGrey’i UI testlerini yazacağımız projeye eklemeye geldi. Başarılı bir şekilde build aldıktan sonra EarlGrey.xcodeproj’u kendi proje dosyamızın altına ekliyoruz.

Bu adımda, hem kendi projemize ait hem de EarlGrey’e ait tüm target’ları XCode’da görmemiz gerekiyor. Bunları kontrol ederek doğru eklediğinizden emin olabilirsiniz.

Şimdi EarlGrey’i projede kullanılabilir hale getireceğiz.

Bu kısımda EarlGrey’i projeye entegre etmek için uygulamamızın UI Test target’ı üzerinde yapmamız gereken birkaç işlem vardır. Eğer sizin uygulamanızda henüz bir UI Test target’ı yoksa File > New > Target > UI Test Bundle seçerek projenize UI Test target’ı ekleyebilirsiniz.

5- Öncelikle kullanacağımız framework’ü kullanmak istediğiniz herhangi bir proje ile ilişkilendirmemiz gerekiyor. Bu yüzden UI Test target’ında Link Binary With Libraries kısmına libTestLib.a kütüphanesini ekleyerek başlayabiliriz.

6- EarlGrey içerisinde Objective-C sınıfları mevcuttur. Bu sınıfların projemizde oluşturulmasını sağlamak için Other Linker Flags kısmına -ObjC eklemeliyiz.

7- -ObjC ayarından sonra EarlGrey’in ve EarlGrey içerisindeki eDistantObject’in dosya yollarını User Header Search Paths kısmına ekleyerek devam edebiliriz. Bu sayede proje içerisinde kullanacağımız bu yapılara ulaşabileceğiz.

$YOUR_PROJECT_DIR/EarlGrey
$YOUR_PROJECT_DIR/EarlGrey/Submodules/eDistantObject

8- Build Phases’a dönüp, Copy files içerisinde Absolute Path seçerek aşağıdaki path’i ekliyoruz.

$(TARGET_BUILD_DIR)/…/…/{YOUR_APP_NAME}.app/Frameworks

9- Bundan sonra testlerde kullanacağımız metotları içeren EarlGrey.swift dosyasını projemize eklememiz gerekiyor. Ben indirip eklemek yerine TVSeriesAppUITests içerisine yeni swift dosyası oluşturmayı ve gerekli metotları buraya aktarmayı tercih ettim. Kullanacağımız dosyayı buradan görüntüleyebilirsiniz.

10- Header dosyaları Objective-C ile oluşturulmuş yapıları projede swift ile kullanmamızı sağlar. Burada da TVSeriesAppUITests içerisine bir header dosyası eklememiz gerekiyor. Bu dosyayı File > New > File > Header File seçerek ekleyebilirsiniz. Bu oluşturduğumuz header dosyasının içerisine burada bulunan kodları ekleyebilirsiniz.

11- Son olarak Objective-C Bridging Header kısmına da bu eklediğimiz header dosyasının dosya yolunu ekliyoruz. Bu sayede eklediğimiz header dosyasının XCode tarafından kullanılabilmesine olanak tanımış oluruz.

Biraz uzun sürse de kurulumumuz bitti. Denemek için aşağıdaki testi kullanabilirsiniz. 😃

Eğer kurulum başarılı bir şekilde tamamlandıysa bu test de başarılı olacaktır.

Kullanımı;

EarlGrey içerisinde üç ana bileşen mevcuttur;

  • GREYMatcher: Ekranda bir UI elemanının bulunmasını sağlar.
  • GREYAction: UI elemaları üzerinde işlemler yürütür.
  • GREYAssertion: Bir UI elemanının durumunu doğrular.

Aşağıdaki örneği inceleyecek olursak;

EarlGrey
.selectElement(with: <GREYMatcher>)
.perform(<GREYAction>)
.assert(<GREYAssertion>)
  1. Kullanılan ilk method test etmek istediğimiz UI elemanını bulur.
  2. Sonraki adımda bulunan UI elemanı üzerinde istenilen aksiyon gerçekleştirilir.
  3. Son adımda ise bu UI elemanının son durumu kontrol edilir.

EarlGrey ile test yazarken kullanacağımız bir diğer bileşen ise accessibilityIdentifier’dır. EarlGrey ekranda bulunan UI elemanını bulmak için bu elemanlara verilmiş accessibilityIdentifier’ları kullanır.

Aşağıdaki örnekte yazıldığı gibi uygulamada bulmak istediğimiz UI elemanına bir id vererek bu id’yi test içerisinde grey_accessibilityID() ile çağırmamız, test yürütülürken bu elemana ulaşmamızı sağlar.

homePage.accessibilityIdentifier = "TVSeriesHomePage"

Aşağıdaki test örneğinde, TVSeries uygulaması içerisinde popüler dizilerin olduğu sekmeye gidilip açılan dizi listesinde kaydırma yapılabilmesi durumu test edilmiştir.

  1. İlk adımda EarlGrey selectElement metoduna verilmiş ID’ye sahip UI elemanını bulur, sonrasında assert ile bu UI elemanının görüntülenip görüntülenmediğini test eder.
  2. Sonraki aşamada TVSeriesPopularTab ID’sine sahip buton bulunarak perform ile bu butona tıklanması sağlanır. Bu sayede uygulama popüler dizilerin olduğu listeyi görüntüler.
  3. Son aşamada ise popüler dizi listesinde kaydırma yapılıp yapılmadığı kontrol edilir.

Buradaki işlemlerin tamamı başarıyla tamamlandığında testimiz başarıyla sonuçlanır. Başarılı bir test sonucundan ise uygulamamızın işlevselliğinin istenildiği gibi olduğunu çıkartabiliriz.

--

--