Appium – TestNG – Allure Report ile Mobil Test Otomasyonu

Herkese Merhaba ,

Bu dokümanda Appium ve TestNG kullanılarak hazırlanmış olan Mobil Test Otomasyon Projesine Allure Report’un nasıl extend edildiğini anlatacağım.

İlk olarak projede kullanılan ortamlar hakkında bilgi vermek istiyorum.

  • Programlama Dili: Java
  • Mobil Test Otomasyon Kütüphanesi: Appium
  • Test Koşturma Kütüphanesi: TestNG
  • Raporlama Kütüphanesi: Allure Report
  • Derleme Aracı: Gradle
  • Loglama Kütüphanesi: Log4j

ADIM-1: Gradle Tanımları build.gralde

Allure Report’u extend etmek için gradle dosyasında aşağıda ki tanımlaları yapmanız gerekiyor.

Java Dosyaları Compile olurken UTF-8 olarak encoding yapmak için:

Dependencies:

Plugin:

TestNG Suite ve Test Taskını Tanımlanması:

appium

Gradle allureServe Komutunun Çalışması için:

ADIM-2: Device’ın Tanımlanması

Appium ile bir application’nın testini yapmak için IOS veya Android bir cihaz tanımlanmalı ve bu cihaz her test, suite veya class’dan önce ayağa kalkmalı, işlemini tamamaladıktan sonra kapanmalıdır. Testlerinizde gerçek cihazlar kullanabileceğiniz gibi emulator de  kullanabilirsiniz. Tanımla aşamasında herhangi bir fark bulunmuyor. Her ikisi için cihazın Adı , Versionu ve Appium Server’ın URL bilgisi tanımlanır.

Bu projede cihaza ait bu bilgileri env.json dosyasının içersinden tanımlıyoruz. Local ve remote ortamlarda testler çalışırken cihaz bilgilerinin build parametresinden okunmasıdır.

Not: prepareDevice fonksiyonunda test edilecek uygulamanın path’i application klasörünün altında bulunan app.apk olarak verilmiştir. Siz kendi projenizde app path’ini kendinize göre tanımlayabilirsiniz.

env.json Dosyası:

Burada Device’a ait bilgiler tanımlanır ve fonksiyona parametre olarak gecilir.

ADIM-3 : BasePage.class Tanımı

BasePage class’ında proje içerisinde ortak kullanacağımız fonksiyonların tanımlarını yapıyoruz. Test fonksiyonlarını yazdığımız class BasePage’e extend olacağı için ortak fonksiyonları burada tanımlıyoruz.. Örneğin click , getText vb.

ChargerTestFunction class’ı click fonksiyonunu kullanmak için BasePage extend oluyor. Böylece proje içiresinde sıkça kullandığımız fonksiyonlar burada tanımlanıyor ve ulaşılabilir oluyor.

ADIM-4 : Test Case Yazma

Bu projede test caselerini yazarken testleri bir fonksiyon olarak java scope’unda yazıyoruz daha sonra test scope’unda bu fonksiyonları kullanarak caseleri oluşturuyoruz. Bu işlemi daha anlaşılır hale getirmek için ekran görüntüleri ekliyorum. Birinci ekran görüntüsü testi yazdığımız fonksiyon, ikinci ekran görüntüsü ise bu fonksiyonları kullanarak test scope’unda testin oluşturulmasını anlatıyor.

Test Caselerini yazdığımız class ise BaseTest class’ına extend olur.

BaseTest class’ında ise step 2 de tanımladığımız prepareDevice fonksiyonu çalıştırılır. Test çalışmadan önce Device ayağa kaldırılır. Test bittikten sonra ise cihaz kapatılır.

BaseTest class’ında tüm testlerde ortak kullanılan değişkenlerde tanımlanabilir. Tüm testler bu class’a extend olacağı için ortak alanların bu class’da tanımlanması kullanışlı olacaktır.

Yukarıda ki ekran görüntüsünde bulunan setDeivce , setVersion , setUrl fonksiyonları step 2 de tanımladığımız Device’ın parametrelerini set ediyor ve Device bu parametrelerine göre ayağa kalkıyor. Yine ekran görüntüsünde test içerinde veya TestListener’da kullanılan ortak değişkenlerin tanımlandığını görüyoruz.

ADIM-5 : Test Listener

Test Listener’ın eklenme amacı, testler çalışırken testlerin öncesinde ve sonrasında başarılı veya hatalı durumlarda nasıl bir aksiyon alınacağı ile ilgili tanımların yapılmasıdır. Bu class, BaseTest’e extend olur. Ayrıca bu class’a ITestListener implement edilerek test aşamaları yönetilir. Test case’in yazıldığı class’a TestListener @Listeners annotation altında eklenir.

ADIM-6: Allure Report’un Oluşturulması ve Allure Report Annotations

Projenin olduğu dizine gidilerek “gradle clean test” yazılır. Proje build olur device ayağa kalkar testler koşmaya başlar.

Testler koşmaya başladığında TestListener’ın onStart fonksiyonunda ExtendTestMaanager’ın çalışmasına start verilir.Tüm testler koşulduktan sonra onFinish’de ise bu işlem durdurulur. Daha sonra terminalde “Gradle allureServe” yazılır ve çalıştırılır. Rapor browser da açılır.

Report Çıktısı:

Allure Report’u Proje içerisinde oluşturmak için ise terminale “gradle allureReport” yazılır ve allure.properties dosyasında belirtilen dizine report oluşturulur.

Annotations

@Attachment

Bu annotation ile Allure report’a ekran görüntüsü , dosya veya metin ekleyebiliriz. Projede attachment tanımlaması Test Listener içerisinde yapıldı ve onFailer fonksiyonun içerisinde kullanıldı. Bunun amaçı başarılı olmayan testlerde ekran görüntüsü , mesaj veya dosyanın otomatik olarak eklenmesi diyebiliriz.

Report Kısmında ki Çıktısı:

@Listeners

Test Class’ı içerisinde tanımlanır ve test tanımlanan listener’a uygun olarak çalışır. Test öncesinde , sonrasında , başarılı  veya hatalı durumlarda alınacak aksiyonlar gerçekleştirilir. Listener’i her test class’ının içinde tanımlayabileceğiniz gibi suit xml içerinde  <listeners> tag’i içerisinde de tanımlayabilirsiniz.

@Epic

Bu annotation ise testleri bir epic altında toplamak için kullanılıyor. Örneğin regresyon testlerinin tanımlamasın @Epic(“Regresyon Testi”) ibaresini kullanırsak Allure Report kısmında Behaviors sekmesinde Regresyon Testi altında ki tüm testleri görebilirsiniz.

@Feature

Bu kısımda ise teste uygulamanın hangi özelliğini test edeceğimizi tanımlıyoruz. Aşağıda eklediğim ekran görüntüsü size bu iki annotation hakkında daha detaylı bilgi verecektir.

@Severity

Allure report’un bu özelliği ise test case’nin önem seviyesini tanımlamak için kullanılır. Testimizi önemi nedir ? Blocker , Critical , Minor , Normal vb.

@Story

Burada test senaryosu tanımlanır. Hangi senaryo’yu test ediyoruz burada tanımlayabiliriz.

@Decsription 

Burada testin tanımını yaparız. Test ile ilgili user’a daha detaylı bilgi verebiliriz.

@Issue

Allure Report’un en güzel özelliklerinden bir tanesi de @Issue ve @Issues özellikleri. Burada test case’i jirada bir issue’yu testi ediyorsa onunla ilişkilendirmek için  jira kodunu veririz olusacak rapor da test case’inin içinde jira linkinin oluştuğunu göreceksiniz. @issues annotation’ı ise case birden çok jira task’ı ile ilişkili ise kullanılır.

Örnek kullanımı:

@Issues ({
@Issue(“MT-500”),
@Issue(“MT-501”)
})

Jira ile test caselerini ilişkilendirmek için allure.properties dosyasında jira url’ini tanımlayabilirsiniz.

Bu projeye ulaşabileceğiniz GitHub url’i: 
https://github.com/ahmetbaltaci/AppiumAndroid

Ahmet Samet Baltacı
QA / Test Automation Engineer
Foreks Bilgi İletişim Hizmetleri A.Ş.