Yeni Testçimizle Tanışın: Selenium!

Selenium ile uygulama testleri

Yeni Testçimizle Tanışın: Selenium!

Bu yazımda size PHP ve Python Django’dan oluşan, ön yüzde bolca ReactJS kullanılan bir web uygulaması projemiz için yazdığım uygulama testinden ve bunu nasıl otomatikleştirdiğimden bahsedeceğim.

Arka planda veritabanı olarak PostgreSQL kullanılıyor. Web uygulamalarının geliştirilme sürecinde var olan projeye eklenen her kod parçasında uygulamayı test etmeye ihtiyaç duyarız. Çünkü uygulamaya eklediğimiz yeniliklerin uygulamanın farklı bir kısmında hataya yol açmadığından emin olmak isteriz. Uygulamalar, test ortamında yapılan gerekli testler ardından canlı ortama aktarılabilir. Bu nedenle uygulamayı test etmek çok önemlidir fakat elle yapılan testler zaman kaybına yol açıyor ve elle yapılan testler kullanışlı değil. Bu nedenle, projemizin test işlemini kolaylaştırmak amacıyla Python’ın Selenium kütüphanesini kullanarak end-to-end test yazdım. Bu işlemi otomatikleştirmek amacıyla Selenium’u Docker’da çalıştırdım.

 

Selenium nedir, nasıl kullanılır?

Selenium, elle yapılan uygulama testlerini otomatikleştirmek için yaygın olarak kullanılan bir kütüphanedir. Kullanmak için bilgisayarınıza bir driver yüklemeniz gerekmektedir, bu driver Firefox veya Chrome olabilir. Ardından pip ile Selenium kütüphanesini indirip kullanmaya başlayabilirsiniz. Uygulamayı test etmek amacıyla tüm düğmelere tıklayıp, tüm metin alanlarını elle doldurmak yerine bunu test betiği haline getirerek betiği her çalıştırdığınızda bunun otomatik yapılmasını sağlayabilirsiniz. Ayrıca Selenium kütüphanesinde ‘headless’ adında bir seçenek bulunuyor. Test sırasında testin tarayıcı açılarak çalışmasını istemiyorsanız bu seçeneği kullanabilirsiniz. Headless modunda çalışan testlerde, test çalıştıktan sonra direkt olarak testin sonucunu görürsünüz. Eğer testin çalışmasını izlemek istemiyorsanız, otomatik olarak çalışıp sadece sonucun görülmesi için ‘headless’ modunu kullanabilirsiniz.

 

Selenium aracını nerede ve nasıl kullandım?

Projemiz için yazdığım testleri ‘headless’ modunda çalışacak şekilde test betikleri yazdım. Amacım testlerin continuous integration ortamında çalışabilmesiydi. Böylece, proje geliştirme esnasında atılan her adımda testler otomatik olarak, hiçbir müdahalede bulunulmadan çalışıp sonuç verebilir ve ekibimizdeki her arkadaşımızın yaptığı değişikliğin ardından, bu değişikliğin bir hataya sebep olup olmadığını kolayca görülebilir hale geldi.

 

Docker’ı nerede ve nasıl kullandım?

Docker, konteyner oluşturma ve sanallaştırma teknolojisi olarak birçok yazılım geliştiricisinin kurtarıcısıdır. Ben de onlardan biriyim. Geliştirdiğim test betiklerinin çalışması için öncelikle PostgreSQL, Django ve PHP servislerinin ayağa kaldırılmasında Docker’ı kullandım. Docker’da imaj ve konteyner kavramı bulunmaktadır. İmajlar; içinde kütüphaneler, değişkenler ve ayarlar barındıran paketlerdir. ‘Dockerfile’ adı ile oluşturulan dosyalar yapılandırıldığında imaj oluşur. Konteyner ise imajın çalıştırılmış halidir. Ben projemizde kullanmakta olduğumuz servislerin bazıları için imaj yazdım bazıları için de var olan imajları kullandım. Örneğin PostgreSQL için Docker’ın resmi web sitesinde imajlar bulunuyor. Bir PostgreSQL veritabanı servisini ayağa kaldırmak isterseniz bu imajları rahatlıkla kullanabilirsiniz.,

Servislerin birbirine bağımlılığı olduğu için tüm servislerin bir arada çalışması gerekmektedir. Örneğin PostgreSQL veritabanı ile uygulama ayrı ayrı çalışamaz, önce PostgreSQL ardından Django ve PHP çalışmalıdır. Bu işlem için ‘docker-compose.yml’ dosyası oluşturdum ve projemizde var olan her servis için bu dosyaya bir servis ekledim.

Tüm işlemlerin ardından, yapılacak işlemleri sıraya koymak amacıyla bir bash betiği yazdım. Bunu farklı tür bir betik ile veya Makefile ile de yapabilirsiniz. Ben bash betiği yazdım ve bunu projemizde var olan Makefile’a bir hedef olarak ‘test’ adıyla ekledim. Tüm bu işlemlerin sonunda, ‘make test’ komutu çalıştırıldığında benim senaryom şu şekildedir: Tüm servisler ayağa kalkar, varolan veritabanı silinir, yeni veritabanı oluşturulur, Django migration’ları yapılır, test için veritabanına bazı veriler eklenir, tüm uygulama testleri çalışır ve son olarak servisler durdurulur.

 

Karşılaştığım zorluklar nelerdi?

Benim için iki ay öncesine kadar Selenium ve Docker teknolojileri çok yeni kavramlardı. İlk olarak Selenium ile başladım ve uygulama testi yazmaktan büyük keyif aldım. Yalnızca test yazarken JavaScript düğmelerini test etmek beni zorlayan bir kısımdı. Öte yandan Docker’a alışmak o kadar kolay olmadı. Bunun nedeni hem benim Docker ile yeni tanışmam hem de projemizde PHP ve Django’nun bir arada kullanılmasının benim için kafa karıştırıcı olmasıydı. Bununla birlikte, imaj oluşturmak, imajın içine doğru paketleri ve doğru kütüphaneleri doğru versiyonları ile eklemek beni zorlayan bir noktaydı. Son aşamada, servisler birbirlerine bağlantılı olduğu için, çalışma sırası belirlemem gerekti. Bunun için docker-compose.yml dosyasında oluşturduğum servislere ‘depends_on’ parametresi ekleyerek hangi servisin hangisine bağlı olarak çalışacağını belirledim. Tüm servisler düzgün bir şekilde ayağa kalktığında uygulama testinin servisini de ekleyerek testleri çalıştırmayı başardım.

Bir sonraki yazımda görüşmek üzere, hoşça kalın.

Seda Halaçlı
Yorum Yok

Yorum Yaz

Yorum
İsim
E-Posta
Website