ÇiçekSepeti Mikroservis Projelerinde Otomasyon Testi Süreçleri — Part 2/3
Bu bölümde ÇiçekSepeti’nde API otomasyonunu ve bu otomasyonun CI/CD süreçlerine nasıl aktarıldığını anlatacağız. API otomasyonunda entegrasyon testleri, CDC testleri ve performans testleri yapmaktayız.
API otomasyonu yazarken kullandığımız araçlar, konfigürasyonlar, test mantığı ve dikkat edilmesi gereken durumlar gibi konuları ele alacağız.
API otomasyonundaki en büyük amacımız: test coverage’nı en yüksek seviyede tutmaktır. Projeyi, CI/CD pipeline adımlarında docker container’ları ayağa kaldırıp test ortamlarından bağımsız bir şekilde testlerin koşulmasını amaçlamaktayız.
Entegrasyon Testi
Bu yöntem ile API’lar için validation, business flow, extreme ve happy path senaryoları; Postman Collection üzerinde yazılan testler ile kontrol edilmektedir.
CI/CD pipeline’ına eklenen entegrasyon testleri, her commit ile docker containerlerı ayağa kaldırılarak sıfırdan koşmaktadır.
ÇiçekSepeti olarak API testlerinde test ortamlarındaki değişikliklerden etkilenmemeyi amaçlamaktayız. İzole bir ortam için: kendi veritabanımızı oluşturuyoruz ve haberleştiğimiz diğer servisleri mockluyoruz.
1- Veritabanı
Test ortamındaki veritabanını kullanmak yerine kendi veritabanımızı oluşturmamızın amacı, verileri testlerimize uygun oluşturabilmek ve test ortamındaki verilerin değişikliğinden etkilenmemektir.
Örneğin bu serviste MySQL veritabanı kullanıyoruz, bundan dolayı projede ./ci-test/mysql/schema.sql dosyasını oluşturup içerisine tablolarımızın ve verilerimizin oluşmasını sağlayan sql komutlarını ekliyoruz.
Schema.sql dosyasını oluştururken şunlara dikkat etmeliyiz:
- Tabloları oluştururken sadece ihtiyacımız olan alanları eklemekteyiz.
- Farklı business akışları için uygun veri oluşturmaktayız.
- Her bir test senaryoda kullanılan verinin ayrı olmasını sağlamaktayız.
2- Mock Servisler
Test ortamındaki servisler yerine mock servis oluşturmamızın amacı, ilgili servisin ayakta olmaması veya geç cevap vermesi gibi olumsuz durumlardan etkilenmemektir.
Projede mock servis kullanılacak ise ./ci-test/imposters/imposters.ejs içinde gerekli olan servislerin .ejs dosyaları tanımlanmalıdır.
Ardından, ./ci-test/imposters dizininde, kullanılacak her bir mock servis için .ejs dosyası oluşturulmalıdır. Bu dosya içerisinde request ve response’lar eklenmelidir.
Örneğin, 5025 portunda çalışan “/todos/user/1” url’e GET isteği attığımızda bize cevap olarak toDos array’inde id, name, isCompleted, expireDate alanlarını dönen bir mock servis yazılmıştır.
Mountebank ile servisleri mockladığımızda istekleri kaydedip bize görsel bir arayüz üzerinden sunabiliyor, bu konuyla alakalı makaleye linkten ulaşabilirsiniz: Link.
Containerları Ayağa Kaldırma
docker-compose.yml dosyası, projede ayağa kaldırılacak container’ların konfigüre edildiği yerdir.
Bu serviste test için ihtiyacımız olan container’lar:
-MySQL
-Sqlapi
-Mountebank
Terminalde proje dizinine gidip aşağıdaki komutla container’ları oluşturuyoruz.
docker compose build
Container’lar oluştuktan sonra aşağıdaki komutla projeyi ayağa kaldırıyoruz.
docker compose up
Mock servisimizi ve test datalarımızı oluşturup projeyi ayağa kaldırdıktan sonra testlerimizi yazmaya başlayabiliriz. Test senaryolarımızın yazıldığı makalemizin diğer partına bu linkten ulaşabilirsiniz. Link.