TestNG ‘ de Bir Testin Yaşam Döngüsü Nasıl Sağlanır?

Mesut Beysülen
3 min readMay 5, 2023

--

Bu yazı, testlerin çalıştırılmadan önce, çalıştığı sırada ve çalıştıktan sonra test altyapısının yaşam döngüsünü anlatmaktadır.

TestNG yaşam döngüsü , lifecycle annotations ile kontrol edilmektedir. Bu lifecycle annotations, testlerin çalışmadan öncesini ve sonrasını, çalıştığı sıradaki gibi durumlar da istediğimiz kod gruplarını çalıştırmak için kullanılmaktadır.

Yaşam döngüsü yöntemleri, temel olarak test yürütme başlamadan önce test altyapısını kurmak ve ardından test yürütme sona erdikten sonra bunlardan herhangi birini ya da hepsini temizlemek için kullanılır.

Aslında burada önemli noktalardan biri de, yukardaki resimde ki gibi testin yürütülme şeklini ve sırasını tanımlayarak, dah iyi, daha hızlı ve bakımı kolay testler ortaya koymaktır.

Testng ile bize sunulan bu annotations ile ilgili kısa bilgiler edinelim.

  1. BeforeSuite: Bu annotated metod, projenin tüm testleri çalışmadan önce ilk çalışacaktır. Burada bulunan kod kümeleri sadece bir defa çalışacaktır.
  2. AfterSuite: Bu annotated metod, projenin tüm testleri çalıştıktan sonra çalışacaktır. Burada bulunan kod kümeleri sadece bir defa çalışacaktır. Artık paketin durdurulması için kullanılacaktır.
  3. BeforeTest: Bu annotated metod, her test yürütülmeden önce çalışacaktır. Aynı sınıf içersinde test yöntemleri yürütülmeden sadece bir defa yürütülecektir.
  4. AfterTest: Bu annotated metod, her test yürütüldükten sonra çalışacaktır. Aynı sınıf içersinde test yöntemleri yürütüldükten sonra sadece bir defa yürütülecektir.
  5. BeforeGroups: Bu annotated metod, belirtilen grupların test metodları yürütülmeden önce çalışacaktır.
  6. AfterGroups: Bu annotated metod, belirtilen grupların test metodları yürütüldükten sonra çalışacaktır.
  7. BeforeClass: Bu annotated metod, ilgili test sınıfındaki testlerden herhangi biri çalışmadan önce bir defa çalıştırılacaktır. Bu tüm test sınıflarında ortak bir başlatma yapısı ayarlamak için kullanılmaktadır.
  8. AfterClass: Bu annotated metod, ilgili test sınıfındaki testlerden herhangi biri çalıştıktan sonra bir defa çalıştırılacaktır. Test bitiminde driver ı sonlandırmak için kullanılabilir.
  9. BeforeMethod: Bu annotated metod, her test metodu öncesinde çalışır. Genel olarak verilerin ayarlanmasını bu annotated metod içinde ki kod kümesi ile yapılandırabiliriz.
  10. AfterMethod: Bu annotated metod, her test metodu sonrasında çalışır. Genel anlamda test özelinde sıfırlanması gereken bir veri varsa bu annotated metod içinde ki kod kümesi ile sıfırlanabilir. Diğer test başladığında veri yapılandırılmış olur.

Bizler aslında veriye dayalı yaptığımız testlerin çoğunda bu yöntemlere ihtiyaç duyarız. Ancak mimari kurgusu başarılı yapıldığında bu yöntemler gerçekten istenileni yeterli düzeyde verir. Aksi halde, bu annotated metodlardan bir ya da birkaçını kullanarak hatta içerisinde driver yapılandırması(driver tanımlaması, başlatma, sonlandırma vs.) dışında bir kod kümesi bulundurmasak da paket çalışacaktır. Ama bir çok işimizi kolaylaştıracak metodlardam mahrum kalmış olacağız.

TestNG de bulunan bu ve diğer annotation’ lar aslında bizim test öncesi ve sonrası yapılandırmalar, datalar, parametreler, test raporlama gibi bir çok isteğimizi kolay bir mimari ile karşılayabilir.

Örneğin;

Daha önce tecrübe ettiğimiz bir durumdan bahsederek yazıyı sonladırmak istiyorum. Yukarıda ki annotated metodları kullanarak test öncesinde hangi testimizi hangi data ile test ortamında koşacağımıza karar verip, her testi ona göre @DataProvider ile testlerimiz de setleyip, her testi farklı bir data ile koşmayı başardık. Bu durum bizi sürekli değişen data ile boğuşmaktan kurtardı.

Bozulan dataların yerine her test çalışmadan önce farklı datalar bulundu. Ve aslında tüm testler çalışmadan önce sadece bir defa data setleme yapıp, sonra setlenen bu datalar ile testlerin koşması sağlanarak test süresine etkiside ortadan kaldırılmış oldu.

Her test sonlandırılırken de duruma göre metod ya da class ya da suite özelinde bir driver sonlandırması yaparak, her seferinde driver ayağa kaldırmak için geçen süreden tasarruf edilmesini sağlayabildik.

Aşağıda aktif olarak kullanabileceğiniz farklı TestNG annotations’ ı bulabilirsiniz.

@ Test — @ DataProvider—@ Parameters — @ Factory — @ Listeners

Geri bildirim 📬

Buraya kadar sabırla beni takip ettiyseniz ve bunu daha iyi şöyle yapardık diye de bir düşünceniz varsa, işte benimle iletişime geçmeniz için sebep! Beni ya da sizi geliştirebilecek tavsiye, eleştiri ve geri bildirimlerinizi sonuna kadar dinlemeye hazırım. İletişime geçin. Teşekkürler…

KAYNAKLAR

--

--

Mesut Beysülen

Senior QA-Test Automation Engineer @MigrosOne, Ex @hepsiburada | Instructor on Youtube @mesutbeysulen