Yeni Testçimizle Tanışın: Selenium! - Artistanbul
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?
docker, php, postgresql, python, selenium, test