ÇiçekSepeti Mikroservis Projelerinde Otomasyon Testi Süreçleri — Part 3/3

Nursah Bayat
ÇSTech
Published in
4 min readJan 10, 2022
Designed by vectorjuice / Freepik

ÇiçekSepeti test otomasyon ekibi olarak entegrasyon testlerimizi Postman’de yazıyoruz.

Entegrasyon testlerinde:
-Validasyonları,
-Business akışları,
-Uç senaryoları,
-Happy path senaryoları kontrol etmekteyiz.

Öncelikle test senaryolarımızın adı anlaşılır ve sade olmalı, test tarafındaysa sadece ilgili senaryoya ait alanlar ve response code kontrol edilmeli, bu sayede senaryoyu etkilemeyen bir değişiklik olduğunda testimiz etkilenmemiş olacaktır. İlave olarak kontrol ettiğimiz alanların hatalı durumlarında log basmaktayız. Bu da pipeline üzerinde newman ile koşumları yaparken testimiz hata aldığında okunabilirlik sağlayacaktır. Örnek olması için üç senaryo üzerinden ilerleyeceğiz.

Test senaryosu 1:
Bu testimizde yeni bir kullanıcı oluşturduğumuz API’a Age değerini null gönderdiğimizde status code’u ve validasyon mesajını kontrol etmekteyiz.

Test senaryosu 2:
POST /api​/v1​/users API’ı kullanıcı oluşturarak veritabanına kayıt atmaktadır. Bu testimizin amacı başarılı bir şekilde veritabanına attığımız kaydı kontrol etmektir. Burada ÇiçekSepeti Tech ekibi olarak geliştirdiğimiz Sqlapi aracını kullanmaktayız.

Test senaryomuz şu şekilde oluşuyor:
Öncelikle pre-request script’te POST isteğini atıp isteğin API response’unu kontrol ediyoruz.

pre-request script

Daha sonrasında Sqlapi’ye istek atarak veritabanı üzerinde sorguyu çalıştırıyoruz.

body

Sqlapi’den dönen response’un kontrolünü sağlamaktayız.

test

Test senaryosu 3:

User servisindeki GET /api/v1/users/{id} API’ı user bilgilerini ve eğer includeUserTodoList parametresi true gönderilirse toDos array’i dönmektedir.
Bu array, ToDo servisinde /todos/user/{id} API’na giderek oradan aldığı bilgileri içermektedir.
Testlerimizde ToDo servisin test ortamını kullanmak yerine, beklediğimiz response’u aşağıdaki gibi mockladık:

http://api/v1/users/10?includeUserTodoList=true isteği attığımızda bu istek ToDo serviste /todo/user/10 API’ına çıkmaktadır. User servisin response’unda, ToDo servisten dönen response’u görmekteyiz.

Test kısmında, lodash kütüphanesinin isEqual() methodunu kullanarak bütün response’u kontrol etmekteyiz:

Diğer test senaryolarına bu linkten ulaşabilirsiniz : Postman Collection Linki.

CDC Testi

Consumer Driven Contracts Testing olarak geçen CDC testleri yaklaşımı en basit haliyle, iki servisin birbirlerine gönderdikleri verinin formatı konusunda anlaşmaya varmasıdır. Bu yaklaşım, Service Provider veya Service Consumer tarafında yapılan her değişiklik bilgisinin anlık olarak paylaşılması prensibi üzerine kuruludur. Biz de testlerimizde request ve response type’larının kontrolünü sağlamaktayız.

CDC testi mikroservis mimarilerinde oldukça kritik bir role sahiptir. Bir mikroservisin request’i veya response’u başka servis/servisler tarafından kullanılmaktadır. Mikroservisin herhangi bir request veya response değişikliği olduğunda diğer mikroservislerin bu değişiklikten etkilenmemesini sağlar.

Performans Testi

Performans testlerinde, her endpointin belirli süre içerisinde dönen response süresine bakmaktayız. Buradaki amaç, response time sürelerini ölçmek ve API’ın performansında kötüleşme olduğunda build’i kırarak süreci kontrol altında tutmaktır.

Proje içerisinde ./ci-test/loadtest/loadtest.yml dosyasını oluşturup içerisine performans testi yapacağımız API’lerin configlerini ekliyoruz.

Ardından ./ci-test/loadtest/ dosyasının içerisine .jmx uzantılı olan her API için için body ve header ayrı ayrı tanımlıyoruz.

Jmeter’da testlerimizi oluşturup loadtest.yml config dosyasını düzenledikten sonra Taurus üzerinde performans testlerimizi koşuyoruz.

Containerlar üzerinde testleri koşma

Entegrasyon testi, CDC testi ve performans testimizi yazdık.

Localimizde projeyi ayağa kaldırdıktan sonra terminalde bu komut üzerinden entegrasyon testlerimizi koşabiliriz:

docker run --network container:userservice-container \postman/newman_ubuntu1404 run https://www.getpostman.com/collections/e42031a2a39a809284c0

CDC testlerimizi bu komut üzerinden koşabiliriz:

docker run --network container:userservice-container \postman/newman_ubuntu1404 run https://www.getpostman.com/collections/2a1fae3f34ccf53c9ad9 --folder UserCDC

Performans testlerimizi bu komutlar üzerinden koşabiliriz:

docker build -t cs-taurus -f ./.build/Dockerfile.taurus .docker run --network container:userservice-container cs-taurus /bzt-configs/loadtest.yml

Localde tüm API otomasyon testleri başarılı bir şekilde koştuktan sonra bunu CI/CD süreçlerine entegre ediyoruz.

Pipeline örneği

Bu yazı serimizde ÇiçekSepeti’nde mikroservis projelerinde otomasyon test süreçlerini aktarmaya çalıştık. Umarız faydalı olmuştur.

Referanslar:

http://www.mbtest.org/
https://www.postman.com/
https://gettaurus.org/

--

--