Robot Framework İle Test Otomasyonu

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