Otomasyon, Robot Framework, Teknoloji

Docker Container’larda RobotFramework ile çalışma

Merhabalar,

 

Bu yazımda iki hafta önce CST takımı olarak devreye aldığımız çözüm merkezi projesinin entegrasyon testlerini, robotframework ile otomatize hale getirme ve bu testlerin koşumlarının docker containerlar üzerinde yapılması ile ilgili çalışmamızdan ve bu yönde attığımız adımlardan bahsedeceğim.


Sonraki yazımda (Teamcity ile Robotframework CI pipeline oluşturma ve Slack Entegrasyonu), bu yazı ile ilişkili olarak oluşturduğumuz docker image’in TeamCity üzerinde kurgulanacak senaryolar ile çalışması ve koşum raporlarının/notifikasyonlarının slack kanallarına iletilmesi ile ilgili olacak.

 

Konuya öncelikle robotframework ve docker’dan çok kısa bahsederek başlamak istiyorum.

 

Robotframework Nedir?

 

Robotframework, Keyword Driven Testing ve Data Driven Testing yaklaşımlarıyla pratik test senaryoları yazmamızı sağlayan python tabanlı bir framework. 

 

 

Robotframework’de basit bir web test uygulaması örneği;

 

 

 

 

Api test örneği;

 

 

 

 

 

Docker Nedir?

 

 

Docker kendi sitesinde ürününü şu şekilde açıklıyor; Docker, uygulama geliştirmek, dağıtmak ve çalıştırmak için oluşturulan açık bir platformdur. Docker uygulamalarınızı altyapınızdan bağımsız kılmanızı sağlar, böylece yazılım üretim ve dağıtım sürecinizi hızlandırabilirsiniz. Docker ile altyapınızı uygulamalarınızı yönettiğiniz gibi yönetebilirsiniz. 

 

 



Docker Container Nedir?


Bir konteyner, imajı çalıştırmak için gereken her şeyi içeren bir yazılım parçasının hafif, bağımsız, yürütülebilir bir paketidir. Kod, çalışma zamanı, sistem araçları, sistem kütüphaneleri, konfigurasyonlar bulundurur. Hem Linux hem de Windows tabanlı uygulamalar için mevcut olan konteynerli yazılımlar, ortama bakılmaksızın her zaman aynı şekilde çalışır.

 


Robotframework’ü neden docker ile kullanmalıyız?

 

Docker kullanmanın sağladığı avantajları şu şekilde sıralayabilirim.

 

·         Hiç vakit kaybetmeden official olarak sunulmuş hazır bir robot docker image’i (ortam) edinilebilir.

 

·         Kurulum için birden fazla araç yerine sadece bir araç (DOCKER)

gerekir (Python, pip, robotframework, test libs).

 

·         Kurulum tüm ekip üyeleri ve CI ortamı üzerinde tek bir merkezi yerde uyumlu hale getirilir.

 

·         Kullanılan container teknolojisi sayesinde çok az bir kaynakla çok büyük işler yapılabilir.

 

·         Docker compose sayesinde zaman alan, uzun testler container’lara bölünebilir ve birden fazla container ayağa kaldırılıp paralel koşumlar sağlanabilir.

 

 

 

Yani genel olarak hızlı, güvenilir, esnek, bağımsız ve anında hazır oluşu sebebi ve kendi mottolarıya “Build And Ship Any App Anywhere” yaklaşımının sunduğu rahatlık sebebiyle tercih etmeliyiz.

 


Docker Kurulumu işin aşağıdaki linkler takip edilebilir.

Windows Installer : https://hub.docker.com/editions/community/docker-ce-desktop-windows

Mac Installer : https://hub.docker.com/editions/community/docker-ce-desktop-mac

 


Şimdi konumuza tekrar dönelim.

Yeni projemizin (çözüm merkezi) geliştirme sürecine, test otomasyon sürecini aktif ve etkili bir şekilde kullanmak üzere dahil etmek istedik. Bu düşünce ile birlikte öncelikle yeni projemizin entegrasyon testlerini manuel test etme eforundan kurtarıp python tabanlı bir framework olan robotframework’de yazdık ve geliştirmeye, genişletmeye devam ediyoruz.

 

Bu testler kapsamında database seviyesinde, network seviyesinde servislerimizin çalışabilirliği, stabiliziasyonu, gönderdiğimiz isteklere uygun response body ve response status code gibi bilgilerin validasyonunu sağlayıp teyit edebiliyoruz.

Ancak bu testlerin sadece günün/haftanın belirli saatlerinde koşması ya da bir kişinin manuel şekilde trigger etmesi ve raporlaması bizi tatmin etmeyecekti. Bu yüzden testing best practice’lerini uygulayarak ikinci yazıda anlatacağım QA, preprod veya production ortamına yapılan her deployment ya da code push sonrası testlerin build edilmesi, ilgili docker image’inin ayağa kaldırılması, testlerin koşulması, fail alan  servislerinin test case numarası ve ismi ile bilgiyi slack kanalına raporlaması, herhangi bir hata yok ise test koşumlarının başarılı şekilde notifikasyon üretmesi ve takıma bilgi vermesi sağlandı.

 

Yani kısaca ilgili git repo’larına yeni kod push’landığında, ya da qa,preprod,production ortamlarına build alındığında robotframework ci pipeline’ımız trigger edilir ve koşum biter bitmez tüm takım bilgilendirilir.

Şimdilik bu yazının dışına çok çıkmadan bir servis test örneği ve projeyi dockerize etme işlemi ile devam edelim.

 

 

Örnek bir servis testi;

 

 

Proje dosyası aşağıdaki gibi;

 

Ve şimdi gelelim docker kısmına, şu an bilgisayarımda herhangi bir image yok.

 

 

$ docker images;

 

 

Ancak projeyi çalıştırabileceğim bir ortam oluşturmak gerekiyor.

 

 

$ docker container run -d -t robotframework/rfdocker

 

İşte ortamımız bir dakikadan az bir sürede hazırlandı ve çalıştı bile.



$ docker ps -a

 

Şimdi yukarıdaki bahsettiğim robotframework api otomasyon projesini (image.5) dockerize etmek için bir Dockerfile yazıyorum.

 

 FROM robotframework/rfdocker

 

 MAINTAINER Baris EKICI <baris.ekici@hepsiburada.com>

 
 COPY . /app

 

 WORKDIR /app

 

 RUN pip install -r requirements.txt

 

 ENTRYPOINT robot -d results Tests/Facade/SolutionCenterApi.robot

 

 

·         Bu dockerfile ile birlikte öncelikle kendimize bir roborframework ortamı edinmiş olduk.

·         Projeyi container’ın içine kopyaladım.

·         İçinde bulunduğumuz klasöreü /app ‘e değiştiridm.

·         Requirements.txt de belirttiğim projemin dependencylerini kurmasını dedim. Bu pip komutu container’ımın içinde çalışacak, ortamımızın hazır olduğundan bahsetmiştim, pip de ortamımızda kurulu olduğu için çalışmasında herhangi bir problem yaşanmayacak, container build edilirken bu komutta çalışıyor olacak.

 

·         Son olarak Container ayağa kalktığında başlamasını istediğimiz uygulamamın ENTRYPOINT’ini belirtiyoruz.

Ve projemizi build ediyoruz.
Build aşamasında adım adım neler yapıldığı gösteriliyor.



Ekran kaydında da görüleceği üzere artık solutioncenter-entegration-tests isminde bir image’imiz var.

 

 

 

 

Şimdi projeyi docker container’ımızın içinde çalıştırıyoruz. 


$ docker run -rmi -i -t solutioncenter-entegration-tests

 

Ekran görüntüsünde de gördüğünüz üzere robotframework projemiz container üzerinde çalıştı ve koşum raporunu console’da gösterdi.

 

 

 

Bir sonraki yazımda bu yazının devamı olarak Teamcity ile Robotframework CI pipeline oluşturma ve Slack ile entegrasyonunu anlatmaya çalışacağım.

 

 

Vakit ayırdığınız için teşekkürler,

Author


Baris