Selenium ile Apache Log4j Kullanımı
Merhaba arkadaşlar, bu yazımda bir loglama servisi olan Apache Log4j kütüphanesini Selenium WebDriver ile nasıl kullanılacağını anlatacağım.
Apache Log4j Nedir ?
Log4j, Apache Software Foundation tarafından 1996 yılında java ile geliştirilmiş open source bir loglama servisidir. Log4j kullanmak için jar dosyası ve log4j tanımlarının yapıldığı properties dosyasına ihtiyaç duyulmaktadır. Log4j seviye bazlı loglama yapabilmektedir. Trace seviyesinden Fatal seviyesine doğru gidildikçe log kapsamı da artacaktır. Bu seviye log4j.properties dosyasından ayarlanabilir. Bu seviyeler aşağıdaki görselde gösterilmiştir.
Test Projesinin Oluşturulması
IntelliJ IDEA ile bir MAVEN projesi oluşturdum. POM.xml dosyasına Log4j, Selenium ve TestNG kütüphanelerine ait repository bilgilerini ekledim. POM.xml dosyasının son hali aşağıdaki gibidir. Maven dışında bir projede kullanmak isterseniz jar uzantılı kütüphane dosyasına buradan ulaşabilirsiniz.
Log ayarlarını yapabilmek için src/main/resources dizinine log4j.properties adında dosya ekledim. Dosyanın son hali aşağıdaki gibidir. rootLogger= ALL komutu ile tüm loglar seviyeye bakılmaksızın açılmış olacaktır. log4j.appender.file.File=${user.dir}/Logs/test-project.log komutu ile otomatik olarak Logs adında bir klasör oluşacak ve projemizin logları test-project.log dosyasına yazılmaya başlanacaktır.
# logger options: ALL -> DEBUG -> INFO -> WARN -> ERROR -> FATAL -> OFF # Root logger option log4j.rootLogger=ALL, 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}/Logs/test-project.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
LoginPageTest Sınıfının Eklenmesi
Test kodlarımızı yazacağımız sınıf olan LoginPageTest sınıfını test package altına oluşturdum. Bu sınıfta basit bir oturum açma senaryosuna ait test kodları yer almaktadır. final static Logger logger = Logger.getLogger(LoginPageTest.class); komutu ile logger sınıfını kullanarak LoginPageTest sınıfındaki işlemleri loglayabilirim.
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.apache.log4j.Logger; import java.util.concurrent.TimeUnit; public class LoginPageTest { private WebDriver driver; final static Logger logger = Logger.getLogger(LoginPageTest.class); private static String url = "https://demo.yasinalbakir.net"; @BeforeTest public void setUp() { logger.info("Test başlatıldı."); System.setProperty("webdriver.chrome.driver", "C:/selenium-driver/chromedriver.exe"); driver = new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS); } @Test public void loginTest() { driver.navigate().to(url); logger.info("Test Edilecek Sayfa : " + driver.getTitle()); driver.findElement(By.id("kullaniciAdi")).sendKeys("admin"); driver.findElement(By.id("parola")).sendKeys("123456"); driver.findElement(By.id("btnGirisYap")).click(); logger.info("Yönlendirilen Sayfa : " + driver.getTitle()); String actResult = "Kullanıcı Tanımlama"; Assert.assertEquals(actResult, driver.getTitle()); } @AfterTest public void tearDown() { driver.quit(); logger.info("Test tamamlandı."); } }
Testi çalıştırdıktan sonra oluşan test-project.log dosyasına ait görüntü de aşağıdaki gibidir.
Faydalı olması dileğiyle.