Merhabalar, bu yazımın konusu test otomasyonunda adını çok duyduğum ve merak ettiğim Robot Framework olacak. Adı çok iddialı değil mi? Herşeyi robotlar yapacakmış hissi veriyor. Bende yeni öğrenmeye başladığım için çok detaylı anlatamayacağım ama en azından yazılım test otomasyonuna yeni başlayanlar ve kaynak arayanlar için bir başlangıç olur diye düşünüyorum.
Robot Framework Python ile geliştirilmiş açık kaynak kodlu bir test otomasyonu kütüphanesidir. Python ile geliştirilmiş ama kullanırken python bilmenize gerek yok yada benimde öğrendiğim kadarı ile gerek yok diyebilirim. Sadece kurulum öncesinde Python ve beraberinde gelen pip paket yükleyicisinin kurulmuş olması gerekiyor. Ayrıca Robot Framework testlerini yazmak için de JetBrains’in PyCharm editörünü kurdum. PyCharm kullanmak zorunda değilsiniz, notepad++ ile de test yazabilirsiniz. Ama otomatik kod tamamlama, ilgili kütüphaneye gitme vb gibi özellikleri kullanabilmek için PyCharm yüklerseniz rahata edersiniz.
İlk önce Robot Framework kütüphanesini pip ile yüklüyoruz.
> pip install robotframework
Yükleme işleminden sonra robot test çalıştırma komutunu otomatk görmesi için …Python\Python39\Scripts klasörünün Çevresel Değişkenlerde (Environment Variables) PATH’e eklenmiş olması gerekiyor. Aksi taktirde testleri doğrudan bu klasör altında çalıştırmanız gerekir.

Şimdi kurulumu doğrulamak için aşağıdaki komutu komut satırında yada PyCharm terminalinde çalıştıralım.
> robot --version
Robot Framework 4.1 (Python 3.9.6 on win32)
Ben yine bir web sayfasının login testini örnek olarak anlatacağım. Örnek sayfamda https://demoqa.com/login olacak.

Sizde denemek için başka sayfa bulamaz iseniz, New User ile bir kullanıcı oluşturup burayı kullanabilirsiniz. Kullanıcı adı şifre girdikten sonra login testini doğrulamak için bir sonraki sayfada User Name: denizguzel bilgisini kontrol edeceğim.

Şimdi robot kodunun tamamını aktarıp sonrasında parçaların neler olduğunu anlatmaya çalışacağım.
*** Settings ***
Library SeleniumLibrary
Test Setup Open Test Browser
Test Teardown Close Test Browser
*** Variables ***
${URL} https://demoqa.com/login
${username} denizguzel
${password} Deneme123*
*** Test Cases ***
Test Case 1
[Documentation] Başarılı login testi yapılıyor.
[Tags] case1
Login ${username} ${password}
wait until page contains element xpath=//label[@id='userName-value'] 10
element text should be xpath=//label[@id='userName-value'] denizguzel Hatalı bilgi var
go back to store
element text should be xpath=//div[@class='main-header'] Book Store Hatalı bilgi var
Test Case 2
[Documentation] Başarısız login testi yapılıyor.
[Tags] case2
Login ${username} wrongPass
wait until page contains element xpath=//p[@id='name'] 10
element text should be xpath=//p[@id='name'] Invalid username or password! Hatalı bilgi var
*** Keywords ***
Open Test Browser
open browser about:blank chrome
Go To URL
[Arguments] ${URL}
maximize browser window
go to ${URL}
Go Back To Store
click element id=gotoStore
Login
[Arguments] ${username} ${password}
Go To URL ${URL}
input text id=userName ${username}
input text id=password ${password}
click element id=login
Close Test Browser
close browser
Yukarıdaki robot test kodunu test.robot ismi kaydedelim. Robot framework testleri sadece robot uzantılı dosyalar ile çalışıyor. Sonrasında testi çalıştırmak için aşağıdaki komutu çalıştıralım.
> robot test.robot
Test çalıştıktan sonra herhangi bir yanlışlık yapmadık ise terminalde aşağıdakine benzer bir çıktı almalıyız.

Aynı zamanda Robot framework test sonucunda güzel bir rapor sayfası oluşturuyor.

Bu sayfada, her bir test senaryosu ne kadar sürmüş, başarı durumu vb. güzel detay bilgiler veriliyor.
Robot dosyamız 4 ana başlıktan oluşuyor. Bunlar;
*** Settings ***
*** Variables ***
*** Keywords ***
*** Test Cases ***
*** Settings *** anahtar kelimesi altına kullanılacak kütüphaneler ekleniyor. Java’daki import işlemi gibi düşünülebilir. Örneğin selenium kütüphanesi yüklemek için, Library SeleniumLibrary yazılmalıdır. Selenium kütüphanesini aşağıdaki şekilde indirebiliriz.
> pip install robotframework-seleniumlibrary
Burada birşeye dikkat etmemiz gerekiyor. Robot dosyasında kullanılan herbir anahtar kelimeden sonra gelen değer için arada en az 2 karakter boşluk bırakmak gerekiyor. Aksi taktirde onun bir anahtar kelime yada parametre olduğunu anlamıyor. Çünkü birden fazla kelime içeren işlemleri ayırt edebilmek için böyle bir kural koyulmuş.
Her test başlangıcında ve sonunda yapılmasını istediğiniz işlemleri *** Settings *** altına aşağıdaki şekilde ekleyebiliyoruz.
*** Settings ***
Library SeleniumLibrary
Test Setup Open Test Browser
Test Teardown Close Test Browser
Test Setup ve Test Teardown parametrelerinin devamındakiler birazdan anlatacağım Keywords altında tanımlanmış olan işlemlerdir. Test Setup, her test başlamadan önce çalışmasını istediğiniz işlemleri söylediğimiz anahtar kelimedir. Test Teardown ise her test bitiminde çalışmasını istediğimiz anahtar kelimedir. Benim örneğimde Keywords altındaki Open Test Browser ve Close Test Browser işlemlerini inceleyerek ne yapmaya çalıştığını kolayca anlayabilirsiniz.
*** Variables *** anahtar kelimesinin altına adından da anlaşılacağı üzere, test case ve keywords altında yazılacak işlemlerde kullanabileceğimiz sabit değişkenlerimizi tanımlıyoruz. Değişkenleri ${} içinde tanımlıyoruz. Bizim örneğimizde 3 tane değişkenimiz var. Bunlar, çağrılacak web sayfası için URL, kullanıcı adı ve şifre bilgisi için username ve password.
*** Variables ***
${URL} https://demoqa.com/login
${username} denizguzel
${password} Deneme123*
Ve bu değişkenleri ben artık Test Cases veya Keywords içinde kullanabilirim.
input text id=userName ${username}
input text id=password ${password}
*** Keywords *** ve *** Test Cases *** süreç olarak birbirlerine benziyorlar. Test Cases altına senaryolarımızı yazıyoruz. Keywords altına ise, Test Cases altından çağrılabilir test adımlarını ekliyoruz. Keywords nerde işimize yarayabilir? Çok sık yapılan senaryo adımlarını bir defa Keywords altında tanımlayıp sonrasında Test Cases altında istenilen yerde sadece Keywords adı ile çağrılabilirsiniz. Böylece birkaç satırdan oluşan test adımını bir satır ile senaryo içinde kullanmış oluyoruz. Bizim örneğimizde keywords altında, Go Back To Store ve Login adında 2 keywords var.
*** Keywords ***
Go Back To Store
click element id=gotoStore
Login
[Arguments] ${username} ${password}
Go To URL ${URL}
input text id=userName ${username}
input text id=password ${password}
click element id=login
Login ve Go Back To Store anahtar adımlarını senaryomuz içinde aşağıdaki şekilde çağırarak aynı adımları tekrar yazma işinden kurtuluyorum.
*** Test Cases ***
Test Case 1
[Documentation] Başarılı login testi yapılıyor.
[Tags] case1
Login ${username} ${password}
wait until page contains element xpath=//label[@id='userName-value'] 10
element text should be xpath=//label[@id='userName-value'] denizguzel Hatalı bilgi var
go back to store
element text should be xpath=//div[@class='main-header'] Book Store Hatalı bilgi var
Benzer şekilde keyword altındaki bir anahtar kelimeyi Test Setup ve Test Teardown parametresi olarak kullanabilirim. Test case ve keyword altında kullanacağım selenium kütüphanesinin anahtar kelimelerini buradan inceleyebilirsiniz. Örneğin bu alana bir değer girmek için input text kullanılıyor. Yazım şekli de aşağıdaki gibi olacak.
input text <locator> <text>
<locator> bilgisine elementin id, xpath, css gibi bilgileri yazılmaktadır. <text> kısmına ise o alana girilmesi istenenen değer yazılır. Burada yine dikkat edilmesi gereken, input text yazarken iki kelime arasında bir boşluk sonraki özellik kelimeler en az iki boşluk bırakılarak yazılmalıdır.
Şimdi gelelim senaryo içinde kullanılan anahtar kelimelere… [Documentation] anahtar kelimesinden sonra yazılanlar test çalışırken konsolda ve oluşturulan rapor dosyasında bilgi amaçlı gösterilecektir.


[Tags] anahtar kelimesi testleri çalıştırırken tag parametresi vererek sadece o tag’li senaryoların çalıştırılması sağlanabilir. Örneğin sadece Test Case 2’yi çalıştırmak için, -i parametresini kullanarak aşağıdaki şekilde komutu çalıştırmalıyım.
> robot -i case2 test.robot
Birde [Arguments] anahtar kelimesi var. Buda yapılacak işleme dışarıdan bir parametre girileceği anlamına geliyor. Bizim örneğimizde keywords altında Login işlemi altında ${username} ve ${password} şeklinde 2 tane argüman tanımlamışız.
*** Keywords ***
Login
[Arguments] ${username} ${password}
Ve senaryo içinde Login kullandığımızda bizden 2 parametre girmemizi bekleyecektir.
*** Test Cases ***
Test Case 1
[Documentation] Başarılı login testi yapılıyor.
[Tags] case1
Login denizguzel Deneme123*
Evet arkadaşlar, en basit hali ile Robot Framework kullanımını anlatmaya çalıştım. Dediğim gibi detay anlatmıyorum. Sadece farkındalık yaratması açısından en basit ile anlatmak istedim. Soru ve görüşleriniz için mail atabilirsiniz.
Faydalı olması dileği ile…


Leave a comment