Rest Assured İle Web Servis Testi yazısında var olan bir web servis için basitçe bir test yazılmasını yetkilendirme alarak ve post işlemi uygulayarak görmüştük. Bu yazıda ise gelmesi gereken alanların (property’lerin) gerçekten gelip gelmediğini kontrol eden JSON Schema Validation’ı ve dönen Response içindeki alanların değerlerinin bizim beklediğimiz gibi mi olduğunu nasıl kontrol edebileceğimizi anlatmaya çalışacağım.

Önceki yazıda bize bir döküman verildiği ve dökümanda şunlar şunlar yazıyor varsayımı üzerinden gitmiştik. Şimdi varsayalım ki aynı döküman bize işlem başarılı olursa şöyle bir JSON’ın döndüğü bilgisini veriyor, alanların karşısındaki değerlerin ne olduğunun önemi yok, döküman bunu kalıp olarak veriyor:

{
    "operationResult": "Kayıt Başarı İle Tamamlandı! Kaydolan Kişiye Ait Bilgiler",
    "member": {
        "emailAddress": "icmen@mustafa.com",
        "address": "İÜ Avcılar Kampüs",
        "enabled": true,
        "name": "Mustafa",
        "password": "827ccb0eea8a706c4c34a16891f84e7b",
        "role": "ROLE_USER",
        "surname": "İçmen",
        "telephoneNumber": "0-212-473-70-70",
        "birthDate": 315532800000
    }
}

İşlemin başarısız olması durumunda ise şöyle bir JSON bize döndürülüyor:

{
    "operationResult": "Aynı E-posta Adresi İkinci Kez Kayıt Olamaz!",
    "member": {
        "emailAddress": "icmen@mustafa.com",
        "address": "İÜ Avcılar Kampüs",
        "enabled": true,
        "name": "Mustafa",
        "password": "827ccb0eea8a706c4c34a16891f84e7b",
        "role": "ROLE_USER",
        "surname": "İçmen",
        "telephoneNumber": "0-212-473-70-70",
        "birthDate": 315532800000
    }
}

Burada döküman bizden kayıt ister başarılı ister başarısız olsun bu alanların kesinlikle dönen cevap içinde olmasını istiyor. Ve ayrıca bizden operationResult alanının geçerli bilgiler ile post işlemi yapıldığında “Kayıt Başarı İle Tamamlandı! Kaydolan Kişiye Ait Bilgiler” şeklinde gelmesinin testinin de yapılmasını istiyor.

Şimdi biz yukarıdaki JSON’lardan birini alıyoruz ve http://jsonschema.net adresine gidiyoruz. Aldığımız JSO’ı sol taraftaki JSON alanına yapıştırıyoruz ve Generate Schema butonuna tıklıyoruz. Bize Schema Validation için bir JSON üretilecek.

Şimdi biz sağ taraftaki üretilmiş bu şemayı alıyoruz ve src/test/resources/schemas altına generated.json isminde koyuyoruz.

Generate edilmiş şema içerisinde dikkatinizi bir noktaya çekmek istiyorum. O da required alanları. Required altına yazılmış alanlar Rest Assured tarafından dönen response içinde aranıyor ve herhangi biri bulunumazsa test fail oluyor. Şimdi bu şemanın nasıl kullanıldığına gelelim.

Önceki yazıda response elde ettiğimiz kod parçası şu şekilde idi:

Response response = given()
		.auth().form("ilkay.gunel@kod5.org", "12345",new FormAuthConfig("/BlogProjectWithSpringMVC/j_spring_security_check", "j_username", "j_password"))
        .contentType("application/json")
        .body(json)
        .when()
        .post("/webservice/memberRegister")
        .then()
        .statusCode(200)
        .extract().response();

Şimdi biz bu kod bloğunun .statusCode(200)’den sonrasına 1 satır ekleme yapacağız. Şu şekilde :

import static com.jayway.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchema;
import java.io.File;

Response response = given()
		.auth().form("ilkay.gunel@kod5.org", "12345",new FormAuthConfig("/BlogProjectWithSpringMVC/j_spring_security_check", "j_username", "j_password"))
        .contentType("application/json")
        .body(json)
        .when()
        .post("/webservice/memberRegister")
        .then()
        .statusCode(200)
        .body(matchesJsonSchema(new File("src/test/resources/schemas/generated.json")))
        .extract().response();

matchesJsonSchema() metodu içerisine parametre olarak File nesnesinde belirtilen doyayı dönen response ile karşılaştırır ve required altındaki alanların response içinde olup olmadığına bakar. Eğer herhangi biri yoksa testi fail eder.

Şimdi WebServiceTest sınıfı içindeki request.setEmailAddress(); kısmına önceki yazıdan farklı bir e-mail adresi yazalım, generated.json dosyasında required altındaki alanlardan birini değiştirelim ve testi çalıştıralım. Ben örneğin emailAddress yerine email yazıp dosyayı kaydediyorum.

Bakın test fail oldu. Çünkü dönen alanlar içinde email diye bir alan bulamadı. Şimdi generated.json dosyası içinde required altındaki email kısmını emailAddress yapıyorum tekrardan, test kodu içindeki mail adresini değiştiriyorum ve test tekrardan çalıştırıyorum.

Schema içinde required olan alanların hepsinin gelmesi neticesinde test başarı ile sonuçlandı.

Buraya kadar alan bekledik ve şema ile alanın gelip gelmediğine baktık. Peki bu response içindeki bir alanın değerini nasıl kontrol edebiliriz? Mesela operationResult alanının değerini nasıl test edebiliriz?

Rest Assured içinde when()’den sonra birden fazla kez body() metodu kullanılabilir. Biz de şimdi .body(matchesJsonSchema(new File(“src/test/resources/schemas/generated.json”))) satırının altına bir satır daha kod ekleyeceğiz. Şöyle:

import static org.hamcrest.core.IsEqual.equalTo;

Response response = given()
		.auth().form("ilkay.gunel@kod5.org", "12345",new FormAuthConfig("/BlogProjectWithSpringMVC/j_spring_security_check", "j_username", "j_password"))
        .contentType("application/json")
        .body(json)
        .when()
        .post("/webservice/memberRegister")
        .then()
        .statusCode(200)
        .body(matchesJsonSchema(new File("src/test/resources/schemas/generated.json")))
        .body("operationResult", equalTo("Kayıt Başarı İle Tamamlandı! Kaydolan Kişiye Ait Bilgiler"))
        .extract().response();

Dönen response içindeki operationResult alanının değerinin Kayıt Başarı İle Tamamlandı! Kaydolan Kişiye Ait Bilgiler şeklide olup olmadığını test ediyoruz. body() metoduna iki parametre veriyoruz. Birincisi değerini kontrol etmek istediğimiz alanın adı, ikinci ise değeri kontrol edecek metot. Biz hamcrest’in içindeki equalTo metodunu kullanıyoruz ve bu metoda beklediğimiz değerin ne olduğu parametresini geçiriyoruz.

Şimdi sadece yukarıdaki 1 satırlık kod eklemesini yapalım ve başka hiçbirşeyi değiştirmeden testi tekrar çalıştıralım.

Bakın test fail oldu. Çünkü sistem aynı e-posta adresi ile ikinci kaydı kabul etmiyor ve bu nedenle bizim test içinde beklediğimiz operationResult alanı kayıt başarılı yerine aynı e-posta adresi ile kayıt olamazsınız şeklinde hata döndürüyor. Bu da testin fail olmasını sağlıyor.

Şimdi WebServiceTest sınıfı içindeki email adresini değiştirip tekrar testi çalıştıralım.

JUnit başarılı olduğunu yeşil tiki ile gösteriyor ve operationResult beklediğimiz gibi geldi.

Bu yazıda anlatacaklarım da bu kadar arkadaşlar. Başka bir yazıda görüşene kadar sağlıcakla kalın.

Selam ve Sevgilerimle