Java Rest Assured ile Api Test

Ali Göktaş
Bilişim Hareketi
Published in
3 min readDec 31, 2019

Selamlar, buralara geldiğinize göre 2020 yılının ilk Api Testi ile ilgili bilgileri içeren makalesini okumaya hazırsınız :)

Bu yazının içeriği; Tanım, Kod ve terimler sözlüğü şeklinde olacak.

Rest Assured, rest isteklerini handle(ele almak) etmek, api seviyesinde testler yapmak ve bir çok http işlemlerini yönetebilmek için 2010 yılının Aralık ayında Johan Haleby abimiz tarafından literatüre kazandırılmış bir Java kütüphanesidir. Kendisinin Powermock , Stub Http gibi meşhur ve efektif kütüphanelerin altında imzası olduğunu ve takip etmeye değer bir abimiz olduğunu eklemekte fayda var.

Birçoğumuzun projelerinde yer alan, Http (Hyper Text Transfer Protocol) protokolü üzerinde source(Kaynak) ve destination(Hedef) arasında isteklerimizin sağlıklı bir şekilde çalıştığını kontrol eden kod bloklarımız, testlerimiz bulunuyor. Uygulamalarımızın iskeletinde yatan bu api servislerinin daima ayakta ve beklenen sonucu veriyor olması elzemdir.

Bir çok firma veya projenin de test süreçlerinde unit, integration, ui olduğu gibi entegre ve otomatik çalışan api testleri de bulunur. En azından geçtiğimiz senelere göre ülkemizde de kaliteli yazılım için gerekliliği tam anlaşılmaya başlandı.

Rest assured bizlere Gherkin formatında api test yazabilme fırsatı sunuyor. Böylelikle yazım ve okuma kolaylığı , nesne yönelimli programlamada standartlara daha uygun projeler ortaya çıkarma ve chain(zincirleme) method yapısı ile az kod ile çok iş yapmamızı sağlıyor.

Haydi elleri kirletelim…

Örnek olarak http://www.omdbapi.com/ isimli bir film afiş sitesinin public Api’sini kullanacağız . Api key sekmesinden mail adresiniz ile api key almanız gerekecek. Bu api key bizim Api’ye isteklerimizin ulaşması için bir authentication imzası, “bana erişmen için bu key’i sana veriyorum” demenin bir şeklidir aslında.

Sitede Film araması yapmak için Search kısmında bize sunulan parametreleri kullanmalıyız.

Mail’e gelen api key’imizi aldığımıza göre koda girişebiliriz..

package com;

import static io.restassured.RestAssured.baseURI;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItems;

import org.apache.http.HttpStatus;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;

import com.sun.org.glassfish.gmbal.Description;

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.specification.RequestSpecification;


public class apiTest
{
private RequestSpecification requestSpecification;

@Before
@Description("Base Url tanımlama")
public void setUp(){
RestAssured.baseURI="http://www.omdbapi.com";
requestSpecification = RestAssured.given();
requestSpecification.
param("apikey","4b5b713e").
param("s", "Never back down").
param("type", "movie").
param("y", "").
param("r", "json").
param("page", "1").
param("callback", "").
param("v", "1");
}

@Test
@Description("Status'un 200(Success) gelme kontrolü")
public void testDoRequestForStatusCode(){
requestSpecification.
when().get(baseURI).then().statusCode(HttpStatus.SC_OK);
}

@Test
@Description("Gelen json body içerisindeki filmin gösterim yılının kontrolü")
public void testMovieReleaseYear(){
requestSpecification
.when().get(baseURI).then().body("Year",equalTo("2008"));
}

@Test
@Description("Gelen response içeriği tipinin kontrolü")
public void testContentType(){
requestSpecification
.when().get(baseURI).then().contentType(ContentType.JSON);
}

@Test
@Description("Response json'da Ratings keyinin Source ve Value'ya sahip olduğunun kontrolü")
public void test(){
requestSpecification
.when().get(baseURI).then().assertThat().body("Ratings",
hasItems("Source","Value"));
}

@AfterClass
public void tearDown(){
// Do something for last activities
}
}

Yukarıda status code, content type, json object content gibi kontrolleri yaptık.
Kütüphane içeriğinde çok daha detaylı kontroller , farklı request methodları ve authentication yöntemlerini görüp pratik yapabilirsiniz.

Bu küçük kod bloğunda kısaca neler yapabileceğimizi gördük geliştirmek ve elleri kirletmek sizlerin elinde.

Terimler

Gherkin : Genellikle BDD yapılı testlerde kullanılır. Given, when, then keywordleri ile aşamalı olarak scriptleri daha anlaşılır halde kullanmaya yarayan syntax yapısıdır.

Source : Http requestinin oluşturulup hedefe yollandığı makine.

Destination : Http requestinin kaynaktan geldiğini kabul edip onaylayan ve yanıt dönen makine.

Chain method : when().get().then().body() gibi zincirleme çalışabilen methodlara verilen genel isim.

Yeni bir projeye başlayabilir yada benim oluşturduğum projeye katkıda bulunabilirsiniz. Makale içerisindeki koda nazaran daha dinamik kullanılabilir data management yapısı kurarak fazlaca OOP nimetlerinden faydalanmanızı tavsiye ederim. Konu ile alakalı faydalanabileceğiniz linkleri aşağıya bırakıyorum. 2019'un son dakikalarında bu kelimeleri noktalıyor herkese yeni yılda sağlıklı, mutlu ve başarılı bir hayat diliyorum.
İyi geliştirmeler :)

Benim projem : https://github.com/alig06/omdpApiTest
Faydalı kaynaklar : https://javadoc.io/doc/io.rest-assured/rest-assured/3.2.0/io/restassured/RestAssured.html
https://github.com/rest-assured/rest-assured/wiki/GettingStarted

--

--