REST Assured API Testi Eğitimi

⚡ Akıllı Özet

REST Assured kendini şu şekilde konumlandırıyor: JavaREST API otomasyon testlerini kolaylaştıran, açık kaynaklı bir kütüphanedir. Bu çerçeve, kalite mühendislerinin karmaşık JSON yanıtlarını, başlıklarını, durum kodlarını ve yanıt sürelerini temiz, BDD tarzı bir sözdizimi ve sorunsuz Maven entegrasyonu kullanarak doğrulamalarını sağlar.

  • ⚙️ Foundation Kurmak: yapılandırma Java, Eclipseİlk REST Assured test betiğinizi yazmadan önce Maven bağımlılıklarını da ekleyin.
  • 📐 Sözdizimi Hakimiyeti: API isteklerini okunabilir ve iş dünyasına uygun bir biçimde ifade etmek için Given-When-Then (Verilen-Ne Zaman-O Zaman) kalıbını uygulayın.
  • 🔍 Ayrıntılı Doğrulama: ExtracYanıt gövdesi, durum kodları, başlıklar, içerik türü ve zamanlama, akıcı bir zincir aracılığıyla iletilir.
  • 🧩 Yol Navigasyonu: XPath'e benzer şekilde nokta gösterimi kullanarak iç içe geçmiş JSON değerlerinde gezinme. Selenium Kesin iddialar için.
  • 🛡️ CI/CD Entegrasyonu: REST Assured'ı şunlarla birleştirin: TestNG or JUnit API kontrollerini doğrudan otomatikleştirilmiş derleme işlem hatlarına entegre etmek.

REST Assured Eğitimi

Emin olmak nedir?

Emin olabilirsiniz Java kütüphanelerini kullanarak REST API'lerini test etmenizi sağlar ve Maven ile iyi bir şekilde entegre olur. Çok verimli eşleştirme tekniklerine sahiptir, bu nedenle beklenen sonuçlarınızı doğrulamak da oldukça basittir. Rest Assured, JSON yapıları ne kadar karmaşık olursa olsun, istek ve yanıtın hemen her bölümünden veri almak için yöntemlere sahiptir.

Test topluluğu için API Otomasyon Testi hala yeni ve dar bir konu. JSON karmaşıklıkları API testini keşfedilmemiş halde tutuyor. Ancak bu, test sürecinde daha az önemli hale getirmiyor. Rest Assured.io framework, temel Java temellerini kullanarak bunu çok basit hale getirdi ve bu da onu öğrenilmesi çok arzu edilen bir şey haline getirdi.

Neden Rest-Assured'a ihtiyacınız var?

Hayal edin ki, kapınızı açıyorsunuz. Google Haritalara göz atın ve gitmek istediğiniz yeri arayın. Hemen yakındaki restoranları, önde gelen seyahat sağlayıcılarından ulaşım seçeneklerini ve birçok seçeneği parmaklarınızın ucunda göreceksiniz. Hepimiz biliyoruz ki bunlar her zaman kolay değil. Google ürünler, peki nasıl Google Bunları görüntülemeyi nasıl başarır? Bu, bu sağlayıcıların açıkta bulunan API'lerini kullanır. Şimdi, bu tür bir kurulumu, kullanıcı arayüzü oluşturulmadan veya geliştirme aşamasındayken bile test etmeniz istenirse, API'leri test etmek son derece önemli hale gelir. Bunları farklı veri kombinasyonlarıyla tekrar tekrar test etmek, otomasyon için çok uygun bir durum oluşturur.

Daha önce takımlar, aşağıdaki gibi dinamik diller kullanıyordu: Groovy Bunu başarmak için Ruby kullanıldı ve bu zorlu bir süreçti. Bu nedenle API testleri, fonksiyonel test uzmanları tarafından yaygın olarak incelenmedi.

Ancak Rest Assured ile, temel bilgilere sahip olanlar için API'lerin otomasyon testini yapmak ve kullanıcı dostu özelleştirmelerle basit HTTPS istekleri göndermek kolaylaşır. JavaAPI testini ve entegrasyon testini anlamak için faydalıdır. Rest Assured, arka uçta güçlü bir güven sağlarken, ön uç test uzmanları kullanıcı arayüzüne ve istemci tarafı işlemlerine odaklanabilir. Rest Assured açık kaynaklıdır ve sürekli olarak eklenen yöntemler ve kütüphaneler, onu API otomasyonu için mükemmel bir seçim haline getirmiştir.

REST Assured vs Postman: Temel Farklılıklar

Hem REST Assured hem de Postman REST API'lerini doğrulamak için çeşitli araçlar kullanılır, ancak her biri test yaşam döngüsünün farklı bir aşamasına uygundur. Doğru aracı seçmek, ekibinizin becerilerine, proje kapsamına ve entegrasyon ihtiyaçlarına bağlıdır.

Görünüş Emin olabilirsiniz Postman
Menşei Java kod tabanlı otomasyon için kütüphane Komut dosyası desteği bulunan GUI tabanlı API istemcisi
En İyi Kullanım Örneği Sürekli entegrasyon işlem hatları ve regresyon test paketleri Manuel keşif ve hızlı API kontrolleri
Beceri Gereksinimi çekirdek Java gerekli bilgi Minimum kodlama; kullanır JavaKomut dosyası parçacıkları
Raporlama İle bütünleşir TestNG, JUnitve Allure Newman CLI aracılığıyla yerleşik çalıştırma özetleri

Birçok takım kullanıyor Postman erken prototip içinping API'nin çalışması durumunda otomatik regresyon testi için REST Assured'a geçiş yapın.tract stabilize olur.

Rest Assured.io Kurulumu Nasıl Yapılır? Eclipse

REST Assured kurulumu üç temel bağımlılığı içerir: JavaBir IDE ve Maven'a ihtiyacınız olacak. Daha sonra derleme hatalarını önlemek için aşağıdaki adımları izleyin.

Adım 1) Kurulum Java. Buna bakın rehberlik

Adım 2) Başlamak için bir IDE indirin: tutulma

Adım 3) Maven'ı yükleyin ve Eclipse'inizi ayarlayın. okuyun.

Kurulumdan Emin Olun

  1. IDE'nizde bir Maven projesi oluşturun. Biz IntelliJ kullanıyoruz, ancak kullandığınız herhangi bir IDE'de benzer bir yapı elde edeceksiniz.
  2. POM.xml dosyasını açın.

REST Assured Maven kurulumu için proje yapısı

REST Assured Maven çalışma alanı için proje yapısı

İçiniz rahat olsun.io: İçin Java sürüm < 9 kullanıcı:

Aşağıdaki bağımlılığı POM.xml'nize ekleyin:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

İçiniz rahat olsun.io: İçin Java Sürüm 9 ve üzeri kullanıcılar:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Sorun Giderme:

Hata görürseniz ve bağımlılıkların doğru şekilde indirilip indirilmediğinden emin değilseniz, şu adımları izleyin:

  1. Tüm bağımlılıkları içe aktarmak için bir Maven derlemesi gerçekleştirin. Maven kurulumuyla ilgili yardımı şu adreste bulabilirsiniz: Guru99
  2. Hatalar devam ederse, önce Maven clean, ardından Maven install komutlarını çalıştırın. Derleme işlemi hatasız tamamlanmalıdır.
  3. Aşağıdaki içe aktarma işlemlerini ekleyin. Java Sınıfı kontrol edin ve derleme hatası olmadığından emin olun.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

İlk basit, İçiniz Rahat Olsun komut dosyası

Bağımlılıklar oluşturulduktan sonra, ilk betiğinizi yazabilirsiniz. Çerçeve, neredeyse İngilizce gibi okunabilen Davranış Odaklı Geliştirme (BDD) stilini izler.

Sözdizimi:

Rest Assured.io'nun sözdizimi, BDD'ye çok benzeyen ve anlaşılabilir olması nedeniyle çerçevenin en okunabilir kısmıdır.

Given().
        param("x", "y").
        header("z", "w").
when().
Method().
Then().
        statusCode(XXX).
        body("x", "y", equalTo("z"));

Açıklama:

Code açıklama
Verilen() 'Given' anahtar kelimesi, bir arka plan belirlemenizi sağlar. Burada, istek başlıklarını, sorgu ve yol parametrelerini, gövdeyi ve çerezleri iletirsiniz. Bu öğeler istekte gerekli değilse, bu isteğe bağlıdır.
Ne zaman() 'Ne zaman' anahtar kelimesi senaryonuzun öncülünü belirtir. Örneğin, bir şey aldığınızda/yayınladığınızda/yatırdığınızda, başka bir şey yapın.
Yöntem() Bunu herhangi bir CRUD işlemiyle (get/post/put/delete) değiştirebilirsiniz.
Daha sonra() Doğrulama ve eşleştirme koşullarınız buraya yazılır.

Artık kurulumu ve sözdizimine dair bazı temel bilgileri edindiğinize göre, ilk basit testimizi oluşturalım. Yapı size yeni geliyorsa sorun değil, daha fazla kod yazdıkça ve her satırı yorumladıkça alışacaksınız.

Ne getireceksin?

Tarayıcınızı açın ve şuna basın: https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Aşağıdaki gibi bir şey gördüğünüzden emin olun.

Rest Assured komut dosyası API yanıtına örnek

REST Assured tarafından yakalanan örnek API yanıtı

İsteğe yanıt almaya çalışırken tarayıcıda bir hata alırsanız:

  1. HTTPS mi yoksa HTTP mi kullandığınızı kontrol edin. Tarayıcınızın güvenli olmayan web sitelerini engelleyen ayarları olabilir.
  2. Herhangi bir proxy veya güvenlik duvarının tarayıcınızın web sitesini açmasını engelleyip engellemediğini kontrol edin.

*not – Burada hiçbir başlık, gövde veya çerez kullanmadınız. Bu bir URLVe mevcut herhangi bir içeriği yayınlamak veya güncellemek yerine API'den içerik alıyorsunuz. Bu da onu bir GET çağrısı yapıyor. İlk testimizi daha iyi anlamak için bunu aklınızda tutun.

Testinizin Amacı:

Komut dosyasının amacı, Rest Assured aracılığıyla tarayıcıda aldığınız çıktının aynısını IDE konsolunuzda yazdırmaktır.

Bunu aşağıdaki adımlarla kodlayalım:

Yanıtın alınması Gövde

) 1 Adım “myFirstRestAssuredClass” adında bir sınıf oluşturun.

) 2 Adım “getResponseBody” adında bir metot oluşturun.

) 3 Adım Daha önce öğrendiğimiz "verildi", "ne zaman" ve "sonra" yapısına benzer şekilde, aşağıdaki kodu yazın:

verildi(). -> Başlık gerekmez, sorgu veya yol parametresi gerekmez.

when(). -> Belirli bir koşul ayarlanmadı.

elde etmek('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> yalnızca URL temin edilmesi gerekiyor.

then(). -> Herhangi bir özel doğrulama gerekmiyor.

log().all() -> Tüm yanıt alındıktan sonra, yanıtı, başlıkları ve isteğin size döndürdüğü her şeyi günlüğe kaydeder.

public static void getResponseBody(){
   given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();

}

Şimdi şuna dikkat edin: URL Kullanılan kısım uzun ve okunması zor. Yakından bakarsanız, 3 sorgu parametresinin kullanıldığını fark edeceksiniz:

  1. Müşteri Kimliği
  2. Şifre
  3. Hesap_No

Rest Assured, her bir parçayı (sorgu, yol, başlık parametresi) ayrı ayrı geçirmemize yardımcı olarak kodu daha okunabilir ve bakımı kolay hale getiriyor. Ayrıca, gerektiğinde verileri harici bir dosyadan parametreleştirebiliyoruz.

Sorgu parametresini kullanmak için sözdizimi tanımımıza geri dönüyoruz ve hepsinin verilenin bir parçası olarak iletildiğini görüyoruz.

public static void getResponseBody(){

   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**"Tüm" yerine "gövde" ifadesini kullandığımıza dikkat edin; bu, açıklama yapmamıza yardımcı oluyor.**tracYanıtın yalnızca gövdesini.

Çıktı:

Yanıt durum kodunu alma

Yazacağımız bir sonraki yöntem, durum kodunu almak ve bunu doğrulamak için bir onaylama işlemi eklemektir.

) 1 Adım getResponseStatus() adında bir metot oluşturun.

) 2 Adım Yukarıda kullanılan istek yapısının aynısını kullanın. Kopyalayıp yapıştırın.

) 3 Adım Bunu kaydetmek yerine 'getStatus' yöntemini kullanın.Code'Rest Assured'ın durum kodu değerini almak için kullandığı yerleşik yöntem.'

) 4 Adım Durum kodunuzun 200 olduğunu doğrulamak için – assertThat().status anahtar kelimelerini kullanın.Code(beklenenCode).

**Not - URL Basitlik sağlamak amacıyla kullanılan bir değişkendir. URL API isteğinin tamamını içerir. URL.

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Çıktı:

İş İhtiyacı

Otomasyonun temel kurallarından biri, testin ancak gerekli tüm koşullar karşılandığında devam etmesi için kontrol noktaları koymamız gerektiğidir. API testinde en temel doğrulama, isteğin durum kodunun 2XX formatında olup olmadığının kontrol edilmesidir.

Şu ana kadar tam kod:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

      getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* Not:

  1. Bu senaryo için 200 başarılı bir yanıttır. Bazen isteğin başarısız olması gerekebilir, bu durumda 4XX veya 5XX kullanabilirsiniz. Geçersiz parametreler sağlayarak durum kodunu değiştirmeyi deneyin ve kontrol edin.
  2. Bir koşul ileri sürdüğümüzde hata olmadığı sürece konsolda yazdırma yapılmayacaktır.

Bir yanıtın farklı bölümlerini getirmek için komut dosyası

REST Assured, yanıt gövdesi ve durum kodunun ötesinde, zincirleme ex aracılığıyla başlıkları, yanıt süresini ve içerik türünü de ortaya çıkarır.tracTor yöntemleri. 'ex' anahtar kelimesitrac't' bu belirli parçaları elde etmek için gereklidir.

üstbilgi

Rest Assured çok basit bir dildir ve başlıkları getirmek de bir o kadar basittir. Yöntemin adı başlıklardır(). Daha önce olduğu gibi, aynısını yapmak için bağımsız bir yöntem oluşturacağız.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Lütfen 'given().when()' ifadesinin burada atlandığını ve kod satırının get() ile başladığını unutmayın. Bunun nedeni, istek gönderilmeden ve yanıt alınmadan önce herhangi bir ön koşul veya doğrulama yapılmamasıdır. Bu gibi durumlarda, aynı yöntemi kullanmak isteğe bağlıdır.

Çıkış:

İş İhtiyacı:

Çoğu zaman, sonraki istek için yetkilendirme belirtecini veya oturum çerezini kullanmanız gerekir ve bu bilgiler çoğunlukla yanıtın başlıkları olarak döndürülür.

Tepki Süresi

Yanıtın arka uçtan veya diğer aşağı akışlı sistemlerden alınması için gereken süreyi elde etmek amacıyla Rest Assured, yanıtın döndürülmesi için geçen süreyi almak üzere uygun bir timeUnit ile 'timeIn' adı verilen bir yöntem sağlar.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Çıktı:

İş İhtiyacı:

API'leri test etmenin çok önemli bir özelliği, uygulamanın performansını ölçen yanıt süresidir. Çağrınızın yanıtlanma süresi, internet hızınıza, o anki API performansına, sunucu yüküne ve süreyi etkileyen diğer faktörlere bağlı olarak daha uzun veya daha kısa olabilir.

İçerik türü

Yanıtın içerik türünü “contentType()” yöntemini kullanarak alabilirsiniz.

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Çıktı

İş İhtiyacı:

Bazen, içerik türünü elde etmek, farklı kaynaklardan gelen tehditlere karşı güvenlik açıklarının olmadığından emin olmak ve iletilen içeriğin API standartlarına uygun olduğunu doğrulamak için çok önemlidir.

Bireysel JSON Öğesini Getir

Verilen yanıttan yola çıkarak toplam tutarı hesaplamanız isteniyor. Her bir tutarı bulup toplamanız gerekiyor.

Adımlar:

) 1 Adım Miktar alanı, "statements" anahtarına sahip bir dizinin içinde yer alır ve bu dizi de "result" anahtarına sahip bir listenin içindedir.

) 2 Adım Rest Assured, "yol" kullanarak API'deki değerlere ulaşmak için bir mekanizma sağlar.

) 3 Adım Miktarlara ulaşmanın yolu “result.statements.AMOUNT” şeklindedir. Bunu XPath gibi düşünün. Selenium.

) 4 Adım Bir koleksiyondaki tüm tutarları alın, ardından toplamı hesaplamak için tüm değerler üzerinde döngü yapın.

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Not: Miktar değeri metin türünde olduğundan, toplama işlemi için onu tamsayıya dönüştürüyoruz.

Çıktı:

REST Assured Test Otomasyonu için En İyi Uygulamalar

Temelleri anladıktan sonra, disiplinli kalıpları uygulamak, API yüzeyi büyüdükçe test paketinizin güvenilirliğini korur. Aşağıdaki uygulamalar, ekiplerin istikrarsız testlerden ve bakım yükünden kaçınmasına yardımcı olur.

  1. Üssü Merkezileştirin URL: Temel URI'yi ve kimlik doğrulama belirteçlerini tek bir yapılandırma sınıfında veya özellikler dosyasında saklayın. Bu, tekrarlamayı önler ve ortamlar arası geçişi kolaylaştırır.
  2. İstek ve Yanıt Spesifikasyonlarını Kullanın: Tekrar kullanılabilir RequestSpecBuilder ve ResponseSpecBuilder nesneleri oluşturun. Bu nesneler, birçok testin ortak başlıklar veya onaylamalar paylaştığı durumlarda tekrarlayan kod miktarını azaltır.
  3. JSON Şemasını Doğrula: REST Assured'ı json-schema-validator modülüyle birleştirerek uyumluluğu doğrulayın.tracBütünlük. Şema kontrolleri, kırıcı değişikliklerin aşağı yönlü tüketicilere ulaşmadan önce yakalanmasını sağlar.
  4. Test Verilerini Dışa Aktarma: Veri yüklerini JSON dosyalarında saklayın veya aşağıdaki veri sağlayıcılarını kullanın. TestNGSabit kodlanmış veriler hızla güncelliğini yitirir.
  5. Bağımsız Testler Çalıştırın: Her test kendi verilerini oluşturmalı ve kaldırmalıdır. Sıraya bağlı test paketleri, paralel CI çalıştırmalarında öngörülemeyen hatalar verebilir.
  6. Günlükleri Seçici Olarak Yakala: Kararlı test paketlerinde `log().ifError()`, hata ayıklama sırasında ise `log().all()` kullanın. Ayrıntılı günlükler CI işlem hatlarını yavaşlatır ve gerçek sorunları gizler.
  7. CI/CD'ye entegre olun: REST Assured paketlerini Maven Surefire veya Failsafe aracılığıyla tetikleyin. JenkinsGitHub Actions veya GitLab kullanın. Her commit için temel testleri ve gece boyunca tam regresyon testlerini çalıştırın.

Bu alışkanlıkları erken benimsemek, API otomasyonunu kırılgan bir darboğaz olmaktan ziyade uzun vadeli bir varlığa dönüştürür.

SSS

Evet. ChatGPT ve GitHub Copilot gibi modern yapay zeka asistanları, API spesifikasyonlarından REST Assured test iskeletleri oluşturabilir. Mühendisler, birleştirmeden önce oluşturulan kodu doğrulama, veri işleme ve uç durumlar açısından gözden geçirmelidir.

Yapay zekâ destekli araçlar, yanıt kalıplarını analiz eder ve kendi kendini onaran konum belirleyiciler veya doğrulamalar önerir. Şema kaymasını işaretler, yeniden düzenlemeler önerir ve test verilerini otomatik olarak günceller; bu da API'ler sık ​​sık değiştiğinde manuel bakımı azaltır.

REST Assured bir Java CI işlem hatlarında kod odaklı otomasyon için geliştirilmiş bir kütüphane. Postman Bu, manuel keşif ve hızlı betik yazımı için bir GUI istemcisidir. Ekipler genellikle test yaşam döngüsü boyunca ikisini bir arada kullanır.

REST Assured, REST ve JSON için optimize edilmiştir. SOAP için ham XML yükleri gönderebilir, ancak bunun için özel araçlar gereklidir. SoapUI WSDL ayrıştırması ve SOAP'a özgü doğrulama işlemleri için daha zengin destek sunar.

REST Assured doğal olarak şunlarla eşleşir: TestNG hem de JUnit Doğrulama işlemleri, yaşam döngüsü kancaları ve raporlama için. Allure, Extent Reports ve Maven Surefire ise bunların üzerine görselleştirme ve sürekli entegrasyon özellikleri ekliyor.

Bu yazıyı şu şekilde özetleyin: