1.Selenium İsmi Nereden Geliyor?

2000’lerin başında; Mercury Interactive adındaki bir şirket, Astra Quick Test adlı test aracı ile test otomasyon dünyasına hükmediyordu. Geniş bir dünyaya hükmetmesine karşın aslen çok başarılı olmayan bu test aracı ile yalnızca Windows üzerinde test yapılabilmekte, sınırlı sayıda tarayıcı desteklenmekte ve VBScript adında tek bir programlama dili kullanılabilmekteydi.

2004 yılında Jason Huggins devrim niteliğinde bir fikir ortaya attı. Astra Quick Test aracının ve Mercury Interactive firmasının yetersizliğine ve bu yetersizliğe rağmen artan popülaritesine tepki olarak, geliştirdiği araca “Merkür Zehirlenmesi” hastalığının tedavisinde kullanılan Selenium elementinin ismini verdi. Selenium Test Kütüphanesinin doğuşu bu şekilde ortaya çıktı.

2.Giriş

Selenium, test otomasyon dünyasının önemli ürünlerinden biri haline gelen, açık kaynaklı, yazılım test otomasyon kütüphanesidir. Bilinenin aksine tek bir araç değil, paketlerin oluşturduğu bir kütüphanedir. Bu sebeple Selenium Suite olarak adlandırılır.

Selenium, birçok işletim sistemini, tarayıcıyı ve yazılım dilini desteklemektedir. Netflix, Google, HubSpot gibi büyük şirketlerde aktif olarak kullanılmaktadır. Suite’e ait paketler, farklı test problemleri ve farklı ihtiyaçlar için çeşitli çözümler sunmaktadır. Yazının devamında tüm paketler ayrıntılı bir şekilde işlenecektir.

Desteklenen İşletim Sistemleri : Windows, MacOS, Linux, Unix

Desteklenen Tarayıcılar : IE, Firefox, Chrome, Opera, Safari

Desteklenen Programlama Dilleri : Java, Python, C#, PHP, Ruby, Perl, JavaScript

Selenium Destekleyen Tarayıcılar / Yazılım Dilleri

2.1.Avantajları

Test Otomasyon dünyasında önemli bir konuma sahip olan Selenium Suite, geliştiricilere çok büyük avantajlar sağlamaktadır. Bunlardan kısaca bahsetmek gerekirse:

Açık Kaynak Olması

Selenium’un en büyük avantajı, ücretsiz ve taşınabilir (portable) bir kütüphane olmasıdır. Doğrudan bir maliyete sahip değildir. Kütüphane ücretsiz olarak indirilebilir ve kullanılabilir. Halihazırda yazılmış olan kodlar, herhangi bir ücret ödemeden kullanılabilir ve değiştirilebilir.

Çoklu OS Desteği

Selenium, Windows, MacOS, Linux, UNIX, vb. birçok İşletim Sisteminde (OS) çalışabilir ve bu sistemlerde geliştirilen senaryoları destekleyebilir. Örneğin, Windows işletim sistemi kullanarak test senaryoları oluşturabilir ve bu senaryoyu Linux tabanlı bir sistemde kolaylıkla çalıştırabiliriz.

Çoklu Tarayıcı Desteği

Selenium; Internet Explorer, Chrome, Firefox, Opera, Safari, vb. birçok tarayıcıda destek sağlar. Bu sayede, testleri yürütürken aynı kod parçası ile birçok tarayıcıyı test etme imkanı sunar.

Paralel Test Yürütme

Bir web uygulamasını test ederken, uygulamanın farklı tarayıcılarda test edilmesi gerekebilir. Selenium WebDriver ve TestNG kullanarak bunu başarabiliriz. Yürütülecek fazla sayıda komut dosyası varsa ve bunları her bir tarayıcıda sırayla yürütmek gerekiyorsa, bu işlem hem zaman alıcı olur hem de tekrara düştüğü için sıkıcı hale gelir. Bu sorun, Selenium’un Paralel Test Yürütme fonksiyonu ile önlenebilir.

Framework Desteği

Selenium açık kaynak kodlu bir yazılım kütüphanesi olduğu için, piyasada bulunan Framework’ler tarafından rahatlıkla entegre edilebilir haldedir. Bu özelliği sayesinde yazılım geliştirme ve test dünyasında kullanılan önemli frameworkler (JUnit, TestNG, RobotFramework, NUnit vb) Selenium tarafından desteklenmekte ve gün geçtikçe yenileri, desteklenen frameworkler listesine eklenmektedir.

Selenium’un Avantajları

2.2.Dezavantajları

Yalnızca Web Testi Yapılabilmesi

Selenium, yalnızca web tabanlı uygulamaları desteklemektedir. Bu durum bazı kurumsal test otomasyon araçlarının karşısında Selenium’u geriye atmaktadır.

Selenium kullanarak herhangi bir işletim sistemi ve tarayıcıda testler yapılabilir, ancak yalnızca Selenium kullanarak mobil testler yapılamamaktadır. Bunun için ek bir çözüm olarak WebDriver protokolünü kullanarak iOS ve Android mobil ve karma uygulamalar için Appium geliştirilmiştir.

Ek olarak Windows tabanlı uygulamaların otomatize edilmesi için yine Selenium tabanlı (WebDriver)bir geliştirme olan Winium kullanılabilmektedir.

API Test Desteği Olmaması

Test senaryolarının otomatize edilmesinde Kullanıcı Arayüzü (UI) testleri ne kadar önemliyse, API testleri de aynı derecede öneme sahiptir. Çeşitli otomasyon araçlarında bulunan bu özellik Selenium tarafından desteklenmemekte, yalnızca ek çözümler getirilerek API testleri yapılabilmektedir.

Resmi Kontak Olmayışı

Firmalar, test senaryolarını otomatize etmek için kullandığı uygulamalara belirli bir yatırım yapmaktadır. Bu yatırımın karşılığında, iletişime geçilecek resmi (official) bir kontağın olmayışı sorunlara yol açabilmektedir. Selenium açık kaynak bir paket olması sebebiyle gönüllü çalışma prensibine sahiptir.

Yalnızca Community (Topluluk) Desteği

Selenium ile ilgili araştırmaya ihtiyaç duyulan durumlar, tecrübesiz kişileri zor durumda bırakabilmektedir. Aslında yardımının alınabileceği çok sayıda ders, soru, cevap bağlantıları bulunmaktadır ancak doğrudan ürün destek ekibinden değil de topluluktan yardım istemek negatif bir özellik olarak sayılabilir.

Öğrenme Zorluğu

Günümüzün otomatikleştirilmiş test trendlerinden biri de kodsuz testtir(Record and Play). Bu yaklaşım, programlama bilgisi olmayan herkesin test otomasyonu yapabilmesine izin verir. Selenium, kod yazılmadan test yapılmasına izin vermemekte (Selenium IDE dışında) doğrudan kodlama üzerine odaklanmaktadır. Bu sebeple Test Otomasyon sürecine dahil olabilmek için çeşitli programlama dillerinden birinin iyi kavranması gerekmektedir.

Raporlama Eksikliği

Otomatik olarak oluşturulan raporların olmayışı, Selenium’un en büyük eksikliklerinden biridir. Selenium’daki test hatalarını yakalamak için, hata anında ekran görüntüsü ya da log alınamaması ekibin sorunu hızla belirlemesi ve müdahale etmesini olumsuz yönde etkilemektedir. Farklı satıcılar/geliştiriciler ve halihazırda oluşturulmuş frameworkler ile bu sorun aşılabilse de Selenium kişi (third party) çözümlere güvenmek zorundadır.

Resim Tabanlı Testlerde Yetersizlik

Selenium, diğer kurumsal otomasyon araçlarına kıyasla görüntü/resim doğrulama işleminde zorluk çekmektedir. Aslında bu durum birçok otomasyon aracında probleme sebep olmaktadır. Resim tabanlı testlerin yapılabilmesi için, geliştiriciler tarafından bu case’ler için öngörülmüş tasarım/geliştirme çalışmaları yapılması gerekmektedir.

Kurulum Zorluğu

Test otomasyonu için kullanılan bazı araçlar kurulum konusunda fazlasıyla kullanıcı dostudur. Benzer amaçla kullanılan otomasyon uygulamaları, uygulama kurulum dosyası yardımıyla rahatlıkla kurulup kullanılabilmektedir. Selenium’un kurulumu ise daha fazla işlem gerektirmektedir. Kısaca özetleyecek olursak,

  • Selenium paketinin indirilmesi,
  • Kullanılacak dil bazlı (Java, Python vb) driver paketinin indirilmesi,
  • Tarayıcı ile entegre olunabilmesi için tarayıcı bazlı driver paketinin indirilmesi,
  • Gerekli durumda ortam değişkenlerine (environment variables) ekleme yapılması,
  • IDE üzerinden Selenium Jar paketlerinin eklenmesi(Maven da tercih edilebilir).

Versiyon Kontrol Sistemi

Birden fazla kişinin dahil olduğu projelerde en önemli noktalardan biri versiyon kontrol sistemine sahip olunmasıdır. Aksi takdirde farklı kişilerin geliştirmeleri birbirlerini olumsuz etkileyebilir, engellenemez sorunlara yol açabilir. Selenium’un, doğrudan içerisinde gömülü bir versiyon kontrol sistemine sahip olmayışı da dezavantajlarından birisidir.

3.Selenium Paketleri

Selenium Suite 4 ana paketten oluşmaktadır. Şimdi sırasıyla bu paketlerin özelliklerini, avantaj ve dezavantajlarını inceleyelim.

3.1.Selenium IDE

  • Selenium IDE, test oluşturmak ve yürütmek için geliştirilmiş bir Firefox eklentisidir.
  • Kullanıcının, web arayüzü ile etkileşimini kaydederek testler oluşturur ve koşumunu gerçekleştirir. (Record and Play)
  • IDE’yi kullanarak oluşturulan testler; Java, Ruby, Python gibi programlama dillerine export edilebilir.

Selenium IDE

Selenium IDE Avantajları

  • Kolaylıkla Test Case oluşturmak ve yürütmek için kullanılabilir.
  • Çoklu test senaryoları oluşturma ve yürütme imkanı sunar.
  • Debug yapma ve manipüle etme özelliğine sahiptir.
  • Farklı programlama dillerine kod çıktısı alınabilmektedir.
  • Selenium Syntax’ını öğrenmek için başlangıç yetkinliği sağlamaktadır.

Selenium IDE Dezavantajları

  • Yalnızca Firefox ve Chrome için eklenti olarak kullanılabilmektedir.
  • Efektif bir programlama imkanı sunmamakta, bu sebeple mesleki tatminden uzak kalmaktadır.
  • Nesnelerin bulunması için yetersiz geliştirmeye sahiptir. Dinamik özelliklere sahip nesnelerde genellikle hata vermektedir.

3.2.Selenium RC

Selenium RC farklı programlama dillerinde web uygulaması testi yazmak için geliştirilmiştir. Uygulamaların, Web Tarayıcıları ile RC Server adı verilen bir sistem üzerinden iletişim kurmasını sağlamaktadır. Basitçe HTTP GET/POST metotları ile çalışan RC server kullanım yavaşlığı ve maliyeti sebebiyle tercih edilmemektedir. Aşağıda Selenium RC Mimarisi görsel ile ifade edilmiştir.

Selenium RC Mimarisi

Selenium RC server, tarayıcıları Selenium Core ile test edilen web uygulamasının aynı alandan (domain) olduğuna inandırmak için tasarlanmış bir HTTP proxy sunucusudur. Dolayısıyla, JavaScript kodunun herhangi bir web sitesine erişmesi ve test etmesi durdurulamaz. Bu sebeple başlangıçta JavaScript engellerine takılmamak amacıyla fazlasıyla tercih edilmiştir.

Selenium RC önemli bir geliştirme olsa da, kendine özgü eksiklikleri vardır. Büyük testlerin yapılması için harcanan zaman bunların başında gelmektedir. Selenium RC server, tarayıcı ile Selenium komutları arasındaki iletişimde orta adam olduğundan, test yürütmeleri çok fazla zaman alır. Zaman faktörünün yanı sıra, RC’nin mimarisinin karmaşıklığı da bu süreyi uzatmaktadır.

Bu mimari ilk önce Selenium Çekirdeğini web tarayıcısına enjekte etmeyi içerir. Ardından Selenium Core, RC sunucusundan talimatları alır ve bir JavaScript komutuna dönüştürür. Bu JavaScript kodu, web öğelerine erişmekten ve test etmekten sorumludur. Aşağıda RC Server ve Web Tarayıcısı iletişimi basitçe anlatılmıştır.

Selenium RC ve Web Tarayıcısı İlişkisi

3.3.Selenium WebDriver

Selenium WebDriver, test case oluşturmak ve yürütmek için tasarlanmış bir framework’tür. Case’ler WebDriver metotlarındaki element locator’lar aracılığı ile oluşturulur ve yürütülür. Selenium WebDriver bir IDE değil, programlama kütüphanesidir. RC’nin aksine iletişim için aracı Server kullanmayıp doğrudan tarayıcı ile iletişime geçer. Bu sebeple RC mimarisinin getirdiği yavaşlığın önüne geçmektedir.

Her tarayıcı için bir tarayıcı driver’ı bulunmaktadır (Chrome Driver, GeckoDriver vb). Bu sayede her bir tarayıcı ile kendi driver’ı üzerinden doğrudan iletişime geçilir. Yerel makinede test etmek için WebDriver kullanılarak case oluşturulması yeterlidir, ancak uzak sistemdeki bir makinede test yapmak için ek olarak, RC Server’a ihtiyaç duyulur. Uzak bir makinede test yaparken, komutlar WebDriver üzerinden RC Server’a gider. Ardından, RC Server’da işlenerek tarayıcıya iletilir.

WebDriver diğer tüm mimarilerden daha hızlıdır çünkü doğrudan tarayıcıyla etkileşime girer ve harici bir proxy sunucusu kullanmaz. Tarayıcı, işletim sistemi seviyesinden kontrol edildiği için mimari daha basittir. WebDriver’ın bir diğer avantajı, headless bir sürücü olan HtmlUnit Driver’da test etmeyi desteklemesidir. Headless driver tarayıcının GUI’si olmadığı anlamına gelir.

Selenium WebDriver Avantajları

  • Daha fazla programlama dili, işletim sistemi ve web tarayıcısı için destek verilmektedir.
  • Selenium 1’in dosya yükleme, indirme, pop-up’lar ve iletişim engeli gibi sınırlamalarının üstesinden gelinmiştir.
  • RC ile karşılaştırıldığında daha basit komutlar ve mimari ile birlikte gelişmiş bir API’ye sahiptir.
  • Toplu test, çapraz platform (cross platform) tarayıcı testi ve Data Driven Test için destek sağlamaktadır.

Selenium WebDriver Dezavantajları

Kısaca negatif özellikleri ,

  • Kullanım zorluğu,
  • Raporlama eksikliği,
  • Yalnızca Community (Topluluk) desteği,
  • Yalnızca Web testi

olarak belirtilebilir.

3.4.Selenium Grid

Selenium Grid, Patrick Lightbody tarafından geliştirilmiştir ve başlangıçta HostedQA olarak adlandırılmıştır. İlk zamanlarında uzak makinelerde test yapmak için RC ile birlikte kullanılmıştır. Selenium Grid, testleri paralel olarak çalıştırmak için birden fazla makine kullanarak test geçişinin yürütülmesini hızlandırmak için kullanılır.

Örnek vermek gerekirse, 200 test case’in olduğu bir durumda, bu testleri gerçekleştirmek için 4 farklı makineyi desteklemek üzere Selenium-Grid’i kurulup, test paketinin(suite) her bir makinede dörtte birinin tamamlanması sağlanabilir.

Büyük test paketleri ve büyük miktarlarda doğrulama(verify) işlemi yapanlar gibi uzun süre çalışan test senaryoları için buönemli bir zaman tasarrufu olarak düşünülebilir.

Aynı şekilde bazı testlerin çalışması saatler alabilir. Çevik (Agile) yazılım geliştirmeyi uygulayan ve sayıları giderek artan yazılım ekipleri, bir test geçişi için uzun süreler beklemek yerine, en kısa sürede test geri bildirimi istemektedir. Bu sebeple Selenium Grid iyi bir tercih olarak öne çıkmaktadır.

Selenium Grid

Kısaca Selenium Grid;

  • Farklı makinelerde, aynı anda testlerin yürütülmesi için tasarlanmıştır.
  • Hub-Node mimarisi sayesinde paralel test yürütme işlemi başarılmıştır.
  • Hub’lar farklı tarayıcı, işletim sistemi, programlama dili gözetmeksizin, test scriptlerini kontrol edebilirler.
  • Hub ve Node’lar .jar dosyaları kullanılarak aktif hale getirilir.
  • RC ve WebDriver testlerini destekler.

şeklinde özetlenebilir.

4.Sonuç

Konu ne olursa olsun; ana hatlarıyla kavranmadan, doğrudan içerisine girildiğinde uzun vadede zarara sebep olacağı düşüncesine sahibim. Bu sebeple yazımda kodlamadan/örneklendirmeden ziyade genel hatlarıyla bu test aracını tanımaya/tanıtmaya odaklandım. Kısaca toparlamak gerekirse, Selenium 4 farklı paketten oluşan test otomasyon kütüphanesidir. Her yazılımın/geliştirmenin sahip olduğu avantaj ve dezavantajlara sahiptir. Gerçekleştirilecek test senaryolarına, harcanacak kaynağa ve zamana göre farklı paketleri rahatlıkla tercih edilerek kullanılabilir. Ek olarak, test süreçlerine bir şekilde dahil olmuş/olmak isteyen herkesin muhakkak elinin değmesi gereken bir paket olduğu kanaatindeyim. Açık kaynak kodlu bir yazılım olması sebebiyle platform bağımsız entegrasyonu sağlayabilir. Test senaryolarının geliştirilmesinin yanında, rutin işlerinizi otomatik olarak gerçekleştirebilirsiniz.

 

Saygılarımla,

Uğur Onur DURSUN

Yazılım Test Mühendisi

 

Kaynaklar:

https://www.altexsoft.com/blog/engineering/the-good-and-the-bad-of-selenium-test-automation-tool/

https://www.seleniumhq.org/

https://www.browserstack.com/selenium

https://www.edureka.co/selenium-tutorial

https://www.guru99.com/selenium-tutorial.html

https://www.toolsqa.com/selenium-webdriver/blog/

https://applitools.com/blog/why-selenium-ide-2019