
Günümüzde yazılım geliştirme süreçlerinde, test otomasyonu kritik bir rol oynamaktadır. Özellikle, API’lerin güvenilirliğini ve işlevselliğini garanti altına almak için test otomasyonu kaçınılmazdır. Bu yazıda test otomasyonu nedir, RestAssured kütüphanesi ile API testleri nasıl yazılır bunlardan bahsedeceğim.
Görsel 1: REST-assured ve Java Kullanarak API Test Otomasyonu
Test Otomasyonu Nedir?
Test otomasyonu, yazılım test süreçlerini manuel olarak yapmak yerine, otomatik araçlar ve scriptler kullanarak gerçekleştirme yöntemidir. Amaç, tekrarlayan testleri hızlı ve güvenilir bir şekilde yürütmek, test sürecini hızlandırmak ve hataları minimuma indirmektir. Kaliteyi artırırken, zaman ve maliyet tasarrufu sağlar.
Görsel 2: Manuel Test ile Otomasyon Testi Karşılaştırması
RestAssured Nedir?
Görsel 3: API Test Sürecinin Yazılım Geliştirmedeki Rolü
RestAssured, Java tabanlı bir API test otomasyon kütüphanesidir. RESTful web servislerinin doğrulama işlemlerini basitleştirmek için geliştirilmiş, API test otomasyonunda yaygın olarak kullanılan güçlü ve esnek bir araçtır. JSON ve XML gibi veri formatlarını destekler ve hem HTTP hem de HTTPS isteklerini kolayca yönetmemizi sağlar.
RestAssured, JUnit ve TestNG gibi test frameworkleriyle kolayca entegre edilebilir. GET, POST, PUT, DELETE gibi tüm HTTP metodlarını destekler. Özellikle BDD (Behavior-Driven Development) yaklaşımını destekleyen bir yapıya sahip olması, RestAssured’u diğer kütüphanelerden ayırır. RestAssured, yanıt doğrulamalarında Hamcrest Matchers kütüphanesini kullanarak, esnek doğrulamalar yapabilir.
Görsel 4: RestAssured Akış Diyagramı
RestAssured Kurulumu
RestAssured kullanmaya başlamak için, Maven ya da Gradle gibi bir yapı yönetim aracı ile RestAssured kütüphanesini projemize dahil etmemiz gerekir. Maven kullanıyorsak, pom.xml dosyamıza şu bağımlılığı eklememiz yeterli:
Görsel 5: pom.xml Dosyasında RestAssured Bağımlılığı
RestAssured Kullanımı
RestAssured'u kullanabilmek için, öncelikle gerekli kütüphaneleri içe aktarmamız gerekiyor.
Görsel 6: Gerekli Kütüphanelerin Java’da İçe Aktarılması
Şimdi JSONPlaceholder API’sini kullanarak, RestAssured ile temel CRUD işlemlerini içeren test senaryolarını yazalım. JSONPlaceholder, sahte verilerle çalışan bir test API’sidir ve genellikle test amacıyla kullanılır.
1. Kullanıcı Bilgilerini GET ile Alma
Bu test, belirli bir kullanıcının bilgilerini GET isteğiyle alır ve doğrulama yapar, kullanıcının var olup olmadığını ve ilgili bilgilerin doğruluğunu kontrol eder. Yanıtın HTTP kodunun 200 olduğunu ve kullanıcı bilgilerini doğrular.
Görsel 7: GET İsteği ile Kullanıcı Bilgisi Alma
Bu örnekteki metodların işlevlerini sırasıyla açıklayalım:
-
RestAssured.baseURI - Bu, test edilecek API'nın temel URI'sini belirler.
-
given() - Bu aşama, testin başında mevcut olan koşulları veya ön hazırlıkları, istek öncesinde kullanılacak parametreleri veya başlıkları belirtmek için kullanılır. Örneğin, API'nin temel URI'sini ayarlamak, gerekli başlıkları veya parametreleri tanımlamak gibi işlemler bu aşamada yapılır.
-
when() - Bu aşama, testin gerçekleştiği anı temsil eder. Bu aşamada, GET, POST, PUT, DELETE gibi HTTP metodları kullanılarak istekler yapılır.
-
then() - Bu aşama, isteğin sonuçlarını doğrular ve testin beklenen davranışlara uygun olup olmadığını kontrol eder. Yanıtın durum kodu, yanıtın içeriği, belirli verilerin varlığı gibi doğrulamalar yapılır. ‘statusCode’ ve ‘body’ ile yanıtın durum kodu ve içeriği kontrol edilir.
-
statusCode(200) - HTTP cevabının durum kodunun 200 (OK) olması gerektiğini kontrol eder.
-
extract() - Yanıtın bir Response nesnesi olarak çıkarılmasını sağlar.Bu nesne, test sırasında yanıtın detaylı doğrulama veya işlem yapılabilmesi için kullanılır. Örneğin, yanıt gövdesinden belirli bir veri çekmek, başlıkları kontrol etmek ya da başka test adımlarında kullanmak amacıyla çıkarılabilir.
2. POST İsteği ile Yeni Kullanıcı Oluşturma
Bu test, POST isteği ile yeni bir kullanıcı oluşturur ve yanıt içeriğini doğrular. JSONPlaceholder API’si veriyi gerçekten eklemese de başarılı bir yanıt alırız.
Görsel 8: POST İsteği ile Yeni Kullanıcı Oluşturma
3. Kullanıcı Bilgilerini PUT ile Güncelleme
Bu test, mevcut bir kullanıcıyı PUT isteğiyle günceller ve yanıt içeriğini doğrular. JSONPlaceholder API’de güncelleme işlemi geçerli olur ve test sonucu 200 döner.
Görsel 9: PUT İsteği ile Kullanıcı Bilgisi Güncelleme
4. Kullanıcıyı DELETE ile Silme
Bu test, belirli bir kullanıcıyı DELETE isteği ile siler ve yanıt kodunu doğrular. JSONPlaceholder API’de veri gerçekten silinmese de başarılı bir yanıt (200 veya 204) döner.
Görsel 10: DELETE İsteği ile Kullanıcı Silme
Daha Gelişmiş Test Senaryoları
Şimdi temel CRUD işlemlerinin dışına çıkarak, hata durumları, veri doğrulama ve performans testleri gibi daha kapsamlı testler yazarak, API’nin farklı açılardan nasıl test edilebileceğini görebileceğimiz test senaryoları yazalım. Bu örneklerle, API’nin farklı durumlara nasıl yanıt verdiğini, hata durumları ve filtreleme gibi çeşitli senaryoları test etmiş oluruz.
5. Yanıt Süresi Performans Kontrolü
Bu test, belirli bir isteğin yanıt süresini kontrol eder. API’nin hızlı çalıştığından emin olmak için, belirli bir süre sınırının altında yanıt verip vermediğini test ederiz. Özellikle gerçek API’lerde performans önemli bir faktördür.
Görsel 11: Yanıt Süresi Performans Testi
6. Belirli Bir Kullanıcının Gönderilerini Filtreleme
Bu test, belirli bir kullanıcıya ait gönderileri userId ile filtreleyerek doğrulama yapar. Böylece yalnızca belirtilen kullanıcıya ait sonuçların döndüğünü kontrol edebiliriz.
Görsel 12: Belirli Kullanıcının Gönderilerini Filtreleme
7. Geçersiz ID ile Hata Durumunu Test Etme
Bu test, bir API’nin geçersiz bir isteğe nasıl yanıt verdiğini görmek için, olmayan bir id ile GET isteği gönderip, 404 hatasını doğrular.
Görsel 13: Geçersiz ID ile Hata Durumu Testi (404)
8. Yanlış Veri Tipi ile POST İsteği Gönderme
Bir API’nin beklenmeyen veri tipleri karşısında doğru hata mesajını döndürüp döndürmediğini kontrol etmek önemlidir. Örneğin, email alanına sayısal bir değer göndererek hatalı bir POST isteği yapabiliriz.
Görsel 14: Yanlış Veri Tipi ile POST İsteği Gönderme
9. DELETE Sonrası GET ile Kontrol
Bir kaynağı sildikten sonra, o kaynağı tekrar GET ile kontrol ederek 404 yanıtı döndüğünü doğrulamak, verinin gerçekten silindiğini test etmenin harika bir yoludur.
Görsel 15: DELETE Sonrası GET ile Silme Doğrulama
Sonuç
RestAssured, RESTful API’lerin test edilmesini oldukça kolaylaştıran güçlü bir araçtır. Basit ve anlaşılır sözdizimi (syntax) sayesinde, API test senaryoları hızlı bir şekilde yazılabilir ve uygulanabilir. Bu yazıda, RestAssured’un temel özelliklerine ve temel kullanım örneklerine değindik. API testleri hakkında daha fazla bilgi edinmek isteyenler, aşağıdaki kaynaklardan yararlanabilir veya kendi senaryolarını geliştirerek ilerleyebilirler.
Ayrıca, bu alanda daha derinlemesine çalışmak isteyenler için bazı ileri seviye başlıklar ve ilgili kaynaklar aşağıda listelenmiştir:
1. JSONPath ve XMLPath Kullanımı:
Karmaşık veri yapılarında belirli alanlara erişmek için JSONPath (JSON için) ve XMLPath (XML için) ifadeleri kullanılır. Özellikle nested (iç içe geçmiş) yapılarda veri doğrulamada büyük kolaylık sağlar.
Kaynaklar:
• https://github.com/json-path/JsonPath
• https://www.w3schools.com/xml/xpath_intro.asp
2. Filtreleme Karmaşıklığı:
Gerçek API’lerde, çok sayıda filtreleme parametresi kullanılabilir (örneğin tarih aralığı, kullanıcı tipi, durum gibi). Bu tür testlerde doğru kombinasyonların sınanması ve sonuçların bekleneni karşılayıp karşılamadığı dikkatle kontrol edilmelidir.
Kaynak:
• https://learning.postman.com/docs/sending-requests/create-requests/parameters/
3. Asenkron ve Reaktif API Testleri:
Asenkron API’ler, işlem başladıktan sonra sonucu hemen dönmez. Bu durumda polling (belirli aralıklarla sonucu sorgulama) veya callback mekanizmaları devreye girer. Reaktif API’ler ise akış tabanlıdır ve klasik test senaryolarına göre farklılık gösterir.
Kaynaklar:
• https://rieckpil.de/testing-spring-boot-applications-with-rest-assured/
• https://docs.spring.io/spring-framework/reference/web/webflux.html
4. Güvenlik Testleri:
API’lerde authentication (kimlik doğrulama), authorization (yetkilendirme), rate-limiting (istek sınırlama) ve veri sızıntısı gibi risklerin test edilmesi kritik öneme sahiptir.
Kaynaklar:
• https://owasp.org/www-project-api-security/
• https://github.com/rest-assured/rest-assured/wiki/Usage#oauth-20
5. Akademik ve Endüstri Kaynakları:
• Kitap: API Testing and Development with Postman – Dave Westerveld
• Akademik Makale: A Survey on Automated REST API Testing – IEEE Access, 2021
Kaynakça
-
RestAssured Resmi Dokümantasyonu: https://rest-assured.io/
-
JsonPlaceholder API: https://jsonplaceholder.typicode.com/