```html
Yazılım geliştirme dünyasında, API'ler (Uygulama Programlama Arayüzleri) modern uygulamaların bel kemiği haline geldi. Bu API'ler karmaşıklık ve önem açısından büyüdükçe, sağlam ve verimli test metodolojilerine duyulan ihtiyaç hiç olmadığı kadar kritik hale geldi. Rest Assured'a girin, API testine yaklaşımımızı devrimleştiren Java tabanlı bir kütüphane.
Rest Assured, REST API testlerini otomatikleştirmedeki basitliği ve gücü nedeniyle geliştiriciler ve QA profesyonelleri arasında büyük popülerlik kazanmıştır. İfade edici sözdizimi ve Java ile sorunsuz entegrasyonu, kapsamlı API test stratejileri uygulamak isteyen ekipler için ideal bir seçimdir.
Bu eksiksiz kılavuzda, temel kurulumdan gelişmiş tekniklere kadar her şeyi kapsayan ve hatta API test ortamındaki diğer araçlarla nasıl karşılaştırıldığını keşfeden Rest Assured API testine daha derinlemesine dalacağız.
API Testinde Rest Assured Nedir?
Rest Assured, özellikle RESTful API'leri test etmek için tasarlanmış Java tabanlı bir kütüphanedir. HTTP istekleri oluşturmak ve yanıtları doğrulamak için etki alanına özgü bir dil (DSL) sağlar. Temel özellikler şunları içerir:
- Kolay test yazımı için akıcı API
- XML ve JSON ayrıştırma desteği
- Java ekosistemi araçlarıyla entegrasyon (TestNG, JUnit, vb.)
- Kapsamlı doğrulama yetenekleri

Testte REST API Nedir?
REST (Temsili Durum Aktarımı) API, ağ uygulamaları tasarlamak için bir mimari stildir. Test bağlamında, REST API testi şunları içerir:
- HTTP yöntemlerinin (GET, POST, PUT, DELETE, vb.) doğru şekilde işlenmesini doğrulama
- Yanıt durum kodlarını doğrulama
- Yanıt yük yapısını ve içeriğini kontrol etme
- Farklı senaryolarda (geçerli/geçersiz girdiler, kimlik doğrulama, vb.) API davranışını test etme
- API işlemlerinden sonraki durum değişikliklerini doğrulama
Postman ve Rest Assured Arasındaki Fark Nedir?
Her iki araç da API testi için kullanılırken, farklı amaçlara hizmet ederler:
Özellik | Postman | Rest Assured |
---|---|---|
Arayüz | GUI tabanlı | Kod tabanlı |
Dil | JavaScript | Java |
Öğrenme Eğrisi | Daha Düşük | Daha Dik |
Otomasyon | Newman ile Mümkün | Yerel |
CI/CD Entegrasyonu | Ek kurulum gerektirir | Sorunsuz |
Betik Esnekliği | Postman'ın betik yazımıyla sınırlı | Tam Java ekosistemi |
API testlerini Java tabanlı test otomasyon çerçevenize entegre etmeniz veya daha karmaşık test senaryolarına ihtiyacınız olduğunda genellikle Rest Assured tercih edilir.
TestNG ve Rest Assured Arasındaki Fark Nedir?
TestNG ve Rest Assured farklı amaçlara hizmet eder ancak genellikle birlikte kullanılırlar:
Özellik | TestNG | Rest Assured |
---|---|---|
Birincil Amaç | Test çerçevesi | API test kütüphanesi |
Kapsam | Genel amaçlı test | API testine özel |
Özellikler | Test organizasyonu, paralel yürütme, raporlama | HTTP istekleri, yanıt doğrulama |
Dil Desteği | Java | Java |
Her iki aracın da güçlü yönlerini birleştirerek Rest Assured testlerinizi yapılandırmak ve çalıştırmak için TestNG'yi kullanabilirsiniz. Örneğin:
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class CombinedTest {
@BeforeClass
public void setup() {
baseURI = "https://api.example.com";
basePath = "/v1";
}
@Test(groups = "smoke")
public void testGetUser() {
given()
.pathParam("id", 1)
.when()
.get("/users/{id}")
.then()
.statusCode(200)
.body("name", notNullValue());
}
@Test(groups = "regression")
public void testCreateUser() {
String newUser = "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}";
given()
.contentType("application/json")
.body(newUser)
.when()
.post("/users")
.then()
.statusCode(201)
.body("id", notNullValue());
}
}
Bu örnek, testleri düzenlemek için TestNG ek açıklamalarını ve gerçek API test mantığı için Rest Assured'ı kullanır.
Rest Assured API Testine Başlarken
Rest Assured'ın inceliklerine dalmadan önce, test etmeye hazır olduğumuzdan emin olmak için geliştirme ortamımızı ayarlayalım.
Ortamınızı Kurma
Java'yı Yükleyin: Rest Assured, Java 8 veya daha üstünü gerektirir. Oracle'ın web sitesinden en son JDK'yı indirin ve yükleyin veya OpenJDK'yı kullanın.
Bir IDE Seçin: Herhangi bir metin düzenleyici kullanabilmenize rağmen, bir Entegre Geliştirme Ortamı (IDE) üretkenliğinizi önemli ölçüde artırabilir. Popüler seçenekler şunlardır:
- IntelliJ IDEA
- Eclipse
- Java uzantılarıyla Visual Studio Code
Bir Maven projesi ayarlayın: Maven, bağımlılıklarımızı yönetmeye yardımcı olacaktır. IDE'nizde yeni bir Maven projesi oluşturun veya komut satırını kullanın:
mvn archetype:generate -DgroupId=com.example -DartifactId=rest-assured-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Rest Assured bağımlılığı ekleyin: pom.xml
dosyanızı açın ve aşağıdaki bağımlılığı ekleyin:
<dependencies>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
</dependencies>
Bu, test organizasyonu için Rest Assured, TestNG ve ek eşleştiriciler için Hamcrest'i içerir.
Maven'i Güncelle: Bağımlılıkları indirmek için mvn clean install
komutunu çalıştırın.
Bu adımlar tamamlandığında, Rest Assured testleri yazmaya hazırsınız!
Temel Rest Assured API Test Kavramları
Rest Assured, davranış odaklı geliştirmeden (BDD) esinlenerek Verilen-Ne Zaman-O Zaman sözdizimini izler. Bu yapı, kod tabanına aşina olmayanlar için bile testleri okunabilir ve sezgisel hale getirir.
Verilen-Ne Zaman-O Zaman Yapısı
- Verilen: Test önkoşullarını ayarlayın (örneğin, parametreler, başlıklar, kimlik doğrulama)
- Ne Zaman: API eylemini gerçekleştirin (GET, POST, PUT, DELETE, vb.)
- O Zaman: Yanıtı onaylayın (durum kodu, gövde içeriği, başlıklar)
Basit bir örneği inceleyelim:
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.testng.annotations.Test;
public class SimpleTest {
@Test
public void testGetRequest() {
given()
.baseUri("https://api.example.com")
.when()
.get("/users")
.then()
.statusCode(200)
.body("data.size()", greaterThan(0))
.body("data[0].id", notNullValue())
.body("data[0].email", containsString("@"));
}
}
Bu test şunları yapar:
- API için temel URI'yi ayarlar
- "/users" uç noktasına bir GET isteği gönderir
- Şunları onaylar:
- Durum kodu 200'dür
- Yanıt, boş olmayan bir veri dizisi içerir
- Dizideki ilk kullanıcının boş olmayan bir Kimliği vardır
- İlk kullanıcının e-postası bir "@" sembolü içerir
Rest Assured Sözdizimini Anlama
Rest Assured, yöntem çağrılarını zincirlemenize izin veren akıcı bir arayüz kullanır. İşte bazı yaygın yöntemlerin bir dökümü:
given()
: Test spesifikasyonunu başlatırbaseUri()
,basePath()
: İstek için temel URL'yi ve yolu ayarlayınparam()
,queryParam()
: Sorgu parametreleri ekleyinheader()
,headers()
: İstek başlıklarını ayarlayınbody()
: İstek gövdesini ayarlayınwhen()
: İstek bölümünün başlangıcını işaretlerget()
,post()
,put()
,delete()
: HTTP yöntemlerithen()
: Doğrulama bölümünü başlatırstatusCode()
: Yanıt durum kodunu onaylarbody()
: Yanıt gövdesini doğrular
Gelişmiş Rest Assured API Test Teknikleri
Rest Assured'a daha aşina oldukça, sağlam ve kapsamlı test paketleri oluşturmak için daha gelişmiş özelliklerini keşfetmek isteyeceksiniz.
Rest Assured API Testinde Kimlik Doğrulama İşleme
Birçok API kimlik doğrulaması gerektirir. Rest Assured çeşitli kimlik doğrulama yöntemlerini destekler:
Temel Kimlik Doğrulama
given()
.auth().basic("kullanıcı_adı", "şifre")
.when()
.get("/güvenli-uç_nokta")
.then()
.statusCode(200);
OAuth 2.0
given()
.auth().oauth2("erişim_tokeniniz")
.when()
.get("/oauth2-korumalı-uç_nokta")
.then()
.statusCode(200);
Özel Kimlik Doğrulama
Özel kimlik doğrulama şemalarına sahip API'ler için, başlıkları manuel olarak ekleyebilirsiniz:
given()
.header("X-API-Key", "api-anahtarınız")
.when()
.get("/özel-kimlik-doğrulama-uç_noktası")
.then()
.statusCode(200);
Rest Assured API Testinde Testleri Parametrelendirme
Parametrelendirilmiş testler, aynı testi farklı girdilerle çalıştırmanıza izin vererek test kapsamınızı artırır:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParameterizedTest {
@DataProvider(name = "userIds")
public Object[][] createUserIds() {
return new Object[][] {{1}, {2}, {3}, {4}, {5}};
}
@Test(dataProvider = "userIds")
public void testMultipleUsers(int userId) {
given()
.pathParam("id", userId)
.when()
.get("https://api.example.com/users/{id}")
.then()
.statusCode(200)
.body("id", equalTo(userId))
.body("name", notNullValue());
}
}
Bu test, veri sağlayıcısı tarafından sağlanan her kullanıcı kimliği için bir kez olmak üzere beş kez çalışacaktır.
Rest Assured API Testinde JSON Yanıtlarını Doğrulama
Rest Assured, JSONPath kullanarak güçlü JSON ayrıştırma yetenekleri sağlar:
given()
.when()
.get("https://api.example.com/users/1")
.then()
.statusCode(200)
.body("name", equalTo("John Doe"))
.body("email", endsWith("@example.com"))
.body("roles", hasItems("user", "admin"))
.body("address.city", equalTo("New York"))
.body("phoneNumbers.size()", greaterThanOrEqualTo(1));
Bu test, iç içe nesneler ve diziler dahil olmak üzere JSON yanıtının çeşitli yönlerini doğrular.
XML Yanıtlarını İşleme
JSON daha yaygın olsa da, bazı API'ler hala XML kullanır. Rest Assured ayrıca XML yanıtlarını da işleyebilir:
given()
.when()
.get("https://api.example.com/data.xml")
.then()
.statusCode(200)
.body("root.data.name", equalTo("Test Adı"))
.body("root.data.value", equalTo("100"));
Dosya Yükleme ve İndirme
Rest Assured dosya işlemlerini işleyebilir:
Dosya Yükleme
File fileToUpload = new File("path/to/file.txt");
given()
.multiPart("file", fileToUpload)
.when()
.post("/upload")
.then()
.statusCode(200)
.body("message", equalTo("Dosya başarıyla yüklendi"));
Dosya İndirme
byte[] downloadedFile = given()
.when()
.get("/download/file.pdf")
.then()
.statusCode(200)
.extract().asByteArray();
// Artık bayt dizisini bir dosyaya yazabilir veya daha fazla işleyebilirsiniz
Apidog'u Rest Assured API Testi ile Kullanma
Rest Assured kendi başına güçlü olsa da, bir API dokümantasyon ve test platformu olan Apidog'u dahil ederek API test iş akışınızı geliştirebilirsiniz. İşte Apidog'u Rest Assured ile birlikte nasıl kullanabileceğiniz:

API'leri Tasarlayın: Uygulamadan önce API'lerinizi tasarlamak ve belgelemek için APIdog'u kullanın. Bu, geliştiriciler ve test uzmanları için net bir spesifikasyon oluşturmaya yardımcı olur.
Testler Oluşturun: APIdog, API spesifikasyonlarınıza göre test senaryoları oluşturabilir. Bunlar doğrudan Rest Assured testleri olmasa da, neyin test edileceğine dair bir plan olarak hizmet edebilirler.
Testleri Uygulayın: APIdog tarafından oluşturulan test senaryolarını Rest Assured testlerine çevirin. Bu, testlerinizin belirtilen tüm davranışları kapsamasını sağlar.
İşbirliği Yapın: API spesifikasyonlarını ve test sonuçlarını ekibinizle APIdog'un işbirliği özellikleri aracılığıyla paylaşın. Bu, herkesin API'nin beklenen davranışı konusunda uyumlu kalmasını sağlar.
Dokümantasyonu Koruyun: Rest Assured testlerinizi güncelledikçe, APIdog dokümantasyonunun senkronize kalmasını sağlayın. Bu, doğru, güncel API dokümantasyonunun korunmasına yardımcı olur.
REST API'yi Apidog ile Nasıl Entegre Edebilirsiniz?
Bir REST API'yi Apidog ile entegre etmek birkaç temel adım içerir. İşte REST API'yi Apidog ile entegre etmek için ayrıntılı bir adım adım süreç:

2. "Yeni Proje"ye tıklayın ve projenize bir ad verin.

3. Yeni bir API oluşturun.

4. Şimdi "Uç Nokta Ekle" düğmesine tıklayın ve "Tüm kitapları al" uç noktası için aşağıdaki ayrıntıları doldurun: Bu durumda,
URL: http://localhost:5000/books
Yöntem: GET
Uç nokta adı: Tüm kitapları al

5. Uç noktanızın gerektirebileceği sorgu parametrelerini veya başlıkları, "Parametre ekle" veya "Başlık ekle" düğmelerine tıklayarak belirtin.

6. Uç noktanızı test etmek ve düzgün çalıştığından emin olmak için "Gönder" düğmesine tıklayın. Uç noktanız beklendiği gibi çalıştığında, Apidog projenize eklemek için "APICase'i Kaydet" düğmesine tıklayın.

7. Artık uç noktanızı test etmek ve Flask API'niz için dokümantasyon oluşturmak için Apidog'u kullanabilirsiniz.

8. Test senaryonuzun test adımlarını tanımlayın ve test etmek istediğiniz uç noktaları seçin. Test Senaryolarını ihtiyaçlarınıza göre özelleştirin.

9. Senaryoları test ettikten sonra, bunları web'de yayınlayabilir veya bir PDF veya Markdown dosyasına aktarabilirsiniz.

Apidog, kullanıcıların API'lerini özel gereksinimlerine göre kullanmalarına ve test etmelerine yardımcı olmak için çok sayıda özelleştirme seçeneği sunar.
Rest Assured API Testi için En İyi Uygulamalar
Rest Assured API testinden en iyi şekilde yararlanmak için, bu en iyi uygulamaları göz önünde bulundurun:
Testlerinizi düzenleyin: Testlerinizi mantıksal olarak yapılandırmak için TestNG veya JUnit kullanın. İlgili testleri bir araya getirin ve kurulum ve kaldırma için uygun ek açıklamaları kullanın.
Kodu yeniden kullanın: Testlerinizi DRY (Kendini Tekrar Etme) tutmak için ortak işlemler için yardımcı yöntemler oluşturun. Örneğin:
public class TestUtils {
public static RequestSpecification getBaseRequestSpec() {
return given()
.baseUri("https://api.example.com")
.contentType(ContentType.JSON)
.accept(ContentType.JSON);
}
}
Ardından testlerinizde kullanın:
@Test
public void testSomething() {
TestUtils.getBaseRequestSpec()
.when()
.get("/endpoint")
.then()
.statusCode(200);
}
Günlük kaydını kullanın: Sorunları daha kolay gidermek için günlük kaydını etkinleştirin. Rest Assured çeşitli günlük kaydı seçenekleri sunar:
given()
.log().all() // Tüm istek ayrıntılarını günlüğe kaydet
.when()
.get("/endpoint")
.then()
.log().ifValidationFails() // Doğrulama başarısız olursa yanıtı günlüğe kaydet
.statusCode(200);
Şemaları doğrulayın: Yanıt yapılarının doğru olduğundan emin olmak için JSON Şema doğrulamasını kullanın:
given()
.when()
.get("/users")
.then()
.assertThat()
.body(matchesJsonSchemaInClasspath("user-schema.json"));
Ortama özgü verileri işleyin: Farklı ortamları yönetmek için özellik dosyalarını veya ortam değişkenlerini kullanın:
public class Config {
public static String getBaseUrl() {
return System.getProperty("api.baseUrl", "https://api.example.com");
}
}
Ardından bunu testlerinizde kullanın:
@Test
public void testEndpoint() {
given()
.baseUri(Config.getBaseUrl())
.when()
.get("/users")
.then()
.statusCode(200);
}
Yanıt çıkarma kullanın: Karmaşık doğrulamalar için, yanıtı çıkarın ve onaylar gerçekleştirin:
Response response = given()
.when()
.get("/users")
.then()
.extract().response();
JsonPath jsonPath = response.jsonPath();
List<String> names = jsonPath.getList("name");
Assert.assertTrue(names.contains("John Doe"));
Özel eşleştiriciler uygulayın: Belirli doğrulamalar için, özel Hamcrest eşleştiricileri oluşturun:
public class CustomMatchers {
public static Matcher<String> isValidEmail() {
return new TypeSafeMatcher<String>() {
@Override
protected boolean matchesSafely(String item) {
return item.matches("^[A-Za-z0-9+_.-]+@(.+)$");
}
@Override
public void describeTo(Description description) {
description.appendText("geçerli bir e-posta adresi olmalı");
}
};
}
}
Testlerinizde kullanın:
given()
.when()
.get("/users/1")
.then()
.body("email", CustomMatchers.isValidEmail());
Kapsamlı test için veri sağlayıcıları kullanın: Çoklu senaryoları test etmek için TestNG'nin veri sağlayıcılarından yararlanın:
@DataProvider(name = "userRoles")
public Object[][] userRoles() {
return new Object[][] {
{"admin", 200},
{"user", 403},
{"guest", 401}
};
}
@Test(dataProvider = "userRoles")
public void testAccessControl(String role, int expectedStatus) {
given()
.auth().oauth2(getTokenForRole(role))
.when()
.get("/admin-endpoint")
.then()
.statusCode(expectedStatus);
}
Yeniden deneme mekanizması uygulayın: Kararsız testler veya güvenilmez ağlar için, bir yeniden deneme mekanizması uygulayın:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testWithRetry() {
// Test kodunuz burada
}
public class RetryAnalyzer implements IRetryAnalyzer {
private int retryCount = 0;
private static final int MAX_RETRY_COUNT = 3;
@Override
public boolean retry(ITestResult result) {
if (retryCount < MAX_RETRY_COUNT) {
retryCount++;
return true;
}
return false;
}
}
Özellikleri kullanın: Tutarlı istek/yanıt beklentileri için, özellikleri kullanın:
RequestSpecification requestSpec = new RequestSpecBuilder()
.setBaseUri("https://api.example.com")
.setContentType(ContentType.JSON)
.build();
ResponseSpecification responseSpec = new ResponseSpecBuilder()
.expectStatusCode(200)
.expectContentType(ContentType.JSON)
.build();
@Test
public void testWithSpecs() {
given()
.spec(requestSpec)
.when()
.get("/users")
.then()
.spec(responseSpec);
}
Sonuç
Rest Assured API testi, API testlerinizi otomatikleştirmek için güçlü ve esnek bir yol sunar. Bunu TestNG ve APIdog gibi araçlarla birleştirerek, Java tabanlı projelerinizle sorunsuz bir şekilde entegre olan kapsamlı bir API test stratejisi oluşturabilirsiniz.
Rest Assured kullanmanın temel avantajları şunlardır:
- Basitlik: Akıcı API'si, test yazmayı sezgisel ve okunabilir hale getirir.
- Güç: İstek oluşturma ve yanıt doğrulama için kapsamlı yetenekler sağlar.
- Entegrasyon: Yapı araçları ve CI/CD boru hatları dahil olmak üzere Java ekosistemiyle iyi çalışır.
- Esneklik: Basit GET isteklerinden karmaşık kimlik doğrulamaya ve dosya işlemeye kadar, Rest Assured hepsini halledebilir.
API'ler modern yazılım mimarisinde önemli bir rol oynamaya devam ettikçe, sağlam API testi giderek daha önemli hale geliyor. Rest Assured, API'lerinizin güvenilir, performanslı olmasını ve beklendiği gibi davranmasını sağlamak için size araçlar sağlar.
Unutmayın, etkili API testi sadece hata bulmakla ilgili değildir; tüm sisteminizin kalitesini ve güvenilirliğini sağlamakla ilgilidir. Rest Assured ile, API'lerinizi kapsamlı bir şekilde test etmek ve sorunları üretime ulaşmadan önce yakalamak için emrinizde çok yönlü bir araca sahipsiniz.
Rest Assured ile yolculuğunuza devam ederken, özelliklerini keşfetmeye devam edin, en son sürümlerle güncel kalın ve açık kaynak topluluğuna katkıda bulunmaktan çekinmeyin. Mutlu testler!
```