Test Otomasyon Süreçlerinde Loglama

Merhaba arkadaşlar, Mobilhanem.com üzerinde Selenium ile Test Otomasyonu Geliştirme serimizin onuncu dersinde Test Otomasyon Süreçlerinde Loglama konusuna değineceğim. Bir önceki dersimizde Selenium API ve Obje Hareketleri konusunu ele almıştık.

Öncelikle log nedir neden bir şeyler geliştirirken loglamaya ihtiyaç duyulur bunu görelim.

Log Nedir ve Neden İhtiyaç Duyulur ?

Log kayıt anlamına gelmektedir loglama ise log kayıtlarını bir araya getirilerek dijital hareketlerin işlenmesi anlamına gelmektedir.

Büyük projeler de geliştirilen modüllerin içerisinde yer alan metotlarda çokca loglama işlemi yapılır. Test aşamasında  ya da proje canlıya alındığında herhangi modülde veya kod parçacıklarında hata çıktığında baştan sona kod okuyarak hatayı tespit etmek neredeyse imkansızdır. Burada devreye bu kod parçacıklarının içerisine yazılmış olan loglarlar girer. Nerede hangi hataya sebep olduğunu anlamak için öncelikle o modül için eklenmiş olan log dosyalarına bakılır. Bu log dosyalarında kullanıcının hangi işlemler yaptığı ne kadar süre de oluştuğu ve bu işlemler sırasında hangi metotlara girildiği bile yazılabilmektedir. Bu neden loglama işlemi hem geliştiriciler için hem de test otomasyonun üreteceği raporlar için çok önemlidir.

Bu yüzden bir şey geliştirirken loglama konusuna önem vermek ileride sizi büyük bir vakit kaybından kurtaracaktır.

Test Otomasyon Süreçlerinde Loglama

Test Otomasyon Süreçlerinde Loglama yapabilmek için, projemize log4J kütüphanemizi ekleyeceğiz ama kütüphaneyi eklemeden önce kısa bir şekilde log4J den bahsetmek istiyorum.

Log4J Nedir ?

Log4j Apache Software Foundation tarafından geliştirilmiş olan java tabanlı bir log kütüphanesidir. Log4j seviye bazlı loglama yapmaya imkan sağlar ve siz bu seviyelere göre loglama yapabilirsiniz. (Detaylı bilgi için siteyi ziyaret edebilirsiniz.)

Öncelikle Intellij IDEA’da bir maven projesi oluşturalım. Oluşturmuş olduğumuz bu maven projesinde pom.xml’e aşağıda yer alan dependency ekleyelim.

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

Dependency ekledikten sonra src->main->resources klasörü içerisine log4j.properties dosyası oluşturalım ve aşağıda bulunan ayarları dosyamızın içerisine ekleyelim.

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.file.File=C:\\logging.log
log4j.appender.file.File=${user.dir}/Log4j/log4j-application.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Yukarıdakileri ekledikten sonra src->main->java içerisine bir package oluşturup yeni bir java sınıfı oluşturalım ve  bu sayede global bir log4j yapısı oluşturmuş oluruz.

package utilities;
import org.apache.log4j.Logger;

public class Log4j {
    
    private static Logger Log = Logger.getLogger(Log4j.class.getName());

    public static void startLog (String testClassName){
        Log.info("Test is Starting...");
    }


    public static void endLog (String testClassName){
        Log.info("Test is Ending...");
    }

    //Info Level 
    public static void info (String message) {
        Log.info(message);
    }

    //Warn Level 
    public static void warn (String message) {
        Log.warn(message);
    }

    //Error Level 
    public static void error (String message) {
        Log.error(message);
    }

    //Fatal Level 
    public static void fatal (String message) {
        Log.fatal(message);
    }

    //Debug Level 
    public static void debug (String message) {
        Log.debug(message);
    }
}

Ardından test package içerisine yeni bir java sınıfı oluşturalım. Burada ben önceki derslerde kullanmış olduğum proje dosyasını kullandığım için selenium dependencylerini tekrar eklemiyorum.

Yapacağımız örnek basit bir user register işleminin test otomasyonu kısmıdır. Burada src->main->java kısmında model isimli bir package dosyası oluşturuyoruz ve Elements isimli bir java sınıfı ekliyoruz. Eklediğimiz sınıfın içerisine register işleminde girilecek olan web elementlerini ekliyoruz.

package model;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class Elements {
    public static WebDriver driver;

    public Elements(WebDriver webDriver) {
        driver = webDriver;

    }

    public WebElement txtUserName() {
        return driver.findElement(By.id("user_login"));
    }

    public WebElement txtEmail() {
        return driver.findElement(By.id("user_email"));
    }

    public WebElement txtConfirmEmail() {
        return driver.findElement(By.id("user_email"));
    }

    public WebElement txtPassword() {
        return driver.findElement(By.id("user_pass"));
    }

    public WebElement txtConfirmPassword() {
        return driver.findElement(By.id("user_confirm_password"));
    }


    public WebElement btnUyeOl() {
        return driver.findElement(By.xpath("//button[@type='submit']"));
    }
}

Elementleri ekledikten sonra test package’nda WriteLogTestAutomation isimli bir sınıf oluşturuyoruz. Oluşturduğumuz bu sınıfta loglama işlemlerini, Log4j klasöründe log okumayı ve console kısmında eklemiş olduğumuz logları göreceğiz. Siz bu işlemleri kendinizce genişletebilirsiniz.

import model.Elements;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import utilities.Log4j;

import static java.util.concurrent.TimeUnit.SECONDS;

public class WriteLogTestAutomation {
    public static WebDriver driver;
    private static String baseUrl;

    public static String userName = "aybuke";
    public static String email = "[email protected]";
    public static String confirmEmail = "[email protected]";
    public static String userPassword = "mobilhanem123";
    public static String confirmPassword = "mobilhanem123";

    public static Elements elementPage; //Modelimizin bulunduğu paket dosyası
    @Before
    public void setUp() throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\aybukeka\\Desktop\\selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        baseUrl = "https://test.mobilhanem.com.tr/registration/";

        driver.manage().timeouts().implicitlyWait(10, SECONDS);
        driver.manage().timeouts().pageLoadTimeout(200, SECONDS);
        driver.manage().window().maximize();

        elementPage = new Elements(driver);
    }

    @Test
    public void testUyeol() throws Exception {
        Log4j.startLog("Test  is Starting");
        driver.get(baseUrl);
        Log4j.info("Opening Page : " + baseUrl);
        elementPage.txtUserName().clear();
        elementPage.txtUserName().sendKeys(userName);
        Log4j.info("User Name :" + userName);
        elementPage.txtEmail().clear();
        elementPage.txtEmail().sendKeys(email);
        Log4j.info("Email :" + email);
        elementPage.txtConfirmEmail().clear();
        elementPage.txtConfirmEmail().sendKeys(confirmEmail);
        Log4j.info("Confirm Email :" + confirmEmail);
        if(email != confirmEmail){
            Log4j.error("Mismatch EMail");
        }

        elementPage.txtPassword().clear();
        elementPage.txtPassword().sendKeys(userPassword);

        elementPage.txtConfirmPassword().clear();
        elementPage.txtConfirmPassword().sendKeys(confirmPassword);

        elementPage.btnUyeOl().click();

    }

    @After
    public void endDown(){
        Log4j.endLog("Test is Ending");
        driver.quit();
    }
}

Yukarıdaki yapıyı oluşturduktan sonra çalıştırdığımız da console kısmında eklemiş olduğumuz logları görmüş olacağız.

ConsoleLog
ConsoleLog

Console kısmında logları gördükten sonra proje içerisinde Log4j klasörünün oluştuğunu ve aynı zamanda log4j-application.log dosyasının oluştuğunu , içerisinde ise log bilgilerinin tutulduğunu göreceksiniz.

Log4J
Log4J

Buradaki amaç hiç bir zaman otomasyon çalıştırırken karşısına geçip neler yaptığını görmek ya da tesk koşarken ekran kaydı vs almak değildir. Yapılan işlemlerin takibini bu log dosyasından gözlemleyebilmektir. Neden derseniz bir regrasyon testinizin olduğunu ve bunun saatlerce sürdüğünü düşünün sizin yapacağınız işlem testin koşmasını sağlamak ve sonucunda çıkan hataları loglardan görebilmektir.

Mobilhanem.com da Selenium ile Test Otomasyonu Geliştirme serisinin bu dersinde Test Otomasyon Süreçlerinde Loglama dersimizin sonuna geldik. Eksik ya da yanlış gördüğünüz veya anlamadığınız yerler için çekinmeden ulaşabilirsiniz. Bir sonraki yazıda görüşmek üzere.

Ayrıca bu linkten Selenium WebDriver ile Test Otomasyonu Kodu Yazma ve Çalıştırma, Otomasyon Testi Örnek Senaryosu ile ilgili örnek video’ya bakabilirsiniz.

Tüm Selenium derslerimiz için tıklayınız.

28

Sevde Aybüke Kaleli

DevOps Engineer at Evam, M.Sc.

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?