17 Mart 2018 Cumartesi

Selenium ve Python ile Otomatik Ekran Testine Giriş

Yazılım projelerimizde birim testleri önemli bir yer tutuyor. Birim test denilince nedense servis katmanına yazılan testler akla ilk gelen oluyor. Fakat, ekranların da otomatik olarak test edilmesi geliştirme sırasında farkedilemeyen alakasız bir yerdeki hatanın farkedilmesini sağlar. Ekranların test edilmesi işini manuel olarak halletmeye çalıştığımızda harcayacağımız adam-gün'lük işin büyük bölümünü kazanmış oluyoruz.
Bu yazımızda Selenium web otomasyon kütüphanesi ve yazacağımız Python scriptlerini kullanarak basit bir html formunu otomatik olarak doldurup, tuşa tıklatıp sonucu test edeceğiz. Tüm örnek kodları şuradan indirebilirsiniz.




Öncelikle Selenium'dan bahsedelim. Selenium web tarayıcılarını kodsal olarak otomatik kullanmak için geliştirilmiş bir kütüphanedir. Selenium WebDriver modülü ile Firefox, Chrome vb tarayıcıları otomatik olarak kullanabilmekteyiz. Bu tarayıcıların her biri için Selenium web driver bulunuyor. Tabii ki seçilen web tarayıcı sistemde kurulu olmalıdır. Sadece test için değil, sürekli tekrar eden sıkıcı işleri otomatikleştirmek için de kullanılabilir.
Geniş bir programlama dili desteği bulunuyor. Java, C#, Ruby, Python, Javascript resmi olarak desteklenen dillerden.

Kurulumlar

Python 2.7 kurulu olduğu varsayılarak aşağıdaki komutlarla Selenium'u bilgisayarımıza kuralım.

pip install selenium

Selenium'un tarayıcıları otomatik açabilmesi için geckodriver denen bir araç da kurulmalıdır. Mac OS'da aşağıdaki gibi kurulabilir.

brew install geckodriver

Örnek Kodlar

Öncelikle HTML form kodunu görelim.


Submit'e tıklandığında input alanlarının değerlerini alıp birleştirip tekrar sayfaya basan Javascript kodu.
Ad Soyad alanlarına girilen metin toplanarak, outputDiv id'li bir div elementin içine eklenerek sayfada gösteriliyor.
Şimdi de form alanlarını otomatik olarak doldurup tuşu tıklatacak Python koduna bir göz atalım.

Firefox Web Driver nesnesi oluşturuyoruz. Bu nesne ile yerel dosya sisteminde açmak istediğimiz html dosyanın full pathini veriyoruz.
Selenium selector fonksiyonlarını kullanarak HTML dosyadaki input alanları ve tuş nesnelerine ulaşıyoruz. Biz burada HTML elementlerin id ve name alanlarına göre elementi getiren fonksiyonları kullandık. Fakat Selenium HTML elementlerine ulaşmak için çok çeşitli seçenekler sunuyor. XPath'e göre, class alanına göre, CSS içeriğine göre, text içeriğine göre, hatta direk javascript çalıştırarak dahi HTML elementlerine ulaşılabiliyor.
İnput alanlarına örnek metinler girip tuşa tıklatıyoruz.
Sonuç olarak ekrana basılan output ile beklediğimiz output'u karşılaştırıyoruz.

Tüm kodların aynı klasörde olduğundan emin olduktan sonra aşağıdaki komutla testimizi çalıştırabiliriz.

python autotest.py

Çalıştırdığımızda Selenium yeni bir Firefox açacak, index.html dosyasını görüntüleyecek. İnput alanlarını doldurup tuşa tıklayacak. Tüm işlemler tamamlandığında da firefox kapatılacak.

Bu kodda driver ile yerel dosya sisteminde bulunan bir dosyayı açtık. Fakat istersek herhangi bir URL vererek tarayıcıda açabiliriz. Örneğin, driver.get("http://www.kodblog.net/"); gibi.

Selenium görüldüğü gibi oldukça güçlü bir araç. Klavye veya mouse kullanmadan tarayıcıda formlar doldurulabiliyor, tuşlar tıklanabiliyor. Projenizde oluşturacağınız test caseler ile Selenium ekranlarınızı test ederken siz de çayınızı yudumlayıp ekranda akıp giden uygulamanızı izleyebilirsiniz.


Komut Satırından Google'lamak

googler isimli komut satırı aracı ile terminalden google aramaları yapabilir, sonuçlar üzerinde dolaşabilirsiniz. Ubuntu makinenize kurm...