API Otomasyon Testi için REST Assured Eğitimi (Örnek)
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?
Google harita görünümünüzü açtığınızı ve gitmek istediğiniz bir yeri aradığınızı, hemen yakındaki restoranları gördüğünüzü, işe gidip gelme seçeneklerini gördüğünüzü hayal edin; Önde gelen bazı seyahat sağlayıcılarından rezervasyon yapın ve pek çok seçeneği parmaklarınızın ucunda görün. Bunların Google ürünü olmadığını hepimiz biliyoruz, peki Google bunu nasıl göstermeyi başarıyor? Bu sağlayıcıların açığa çıkan API'lerini kullanıyorlar. Şimdi, sizden bu tür bir kurulumu, kullanıcı arayüzü oluşturulmadan veya geliştirilmeden önce bile test etmeniz istenirse, API'leri test etmek son derece önemli hale gelir ve bunları farklı veri kombinasyonlarıyla tekrar tekrar test etmek, bunu otomasyon için çok uygun bir durum haline getirir.
Daha önce bunu başarmak için groovy, ruby gibi dinamik diller kullanıyorduk ve bu zorlayıcıydı. Bu nedenle API testi, işlevsel testlerle araştırılmadı.
Ancak Rest Assured'ı kullanarak, API'lerin otomasyon testini yapmak, kullanıcı dostu özelleştirmelerle basit https istekleri göndermek, eğer temel bir java geçmişine sahipseniz basittir. API testini ve entegrasyon testini anlamak gerekir, ancak bu otomasyonu yayınlamak Rest Assured arka uçta çok iyi bir güven sağlarken, ön uç testi yalnızca kullanıcı arayüzüne ve istemci tarafı operasyonlarına odaklanabilir. Rest Assured, birçok ek yöntem ve kitaplığın eklenmesiyle, API otomasyonu için mükemmel bir seçim haline gelen açık bir kaynaktır.
Rest Assured.io Kurulumu Nasıl Yapılır? Eclipse
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
- IDE'nizde bir Maven Projesi oluşturun. Intellij kullanıyoruz, ancak kullandığınız herhangi bir IDE'de benzer bir yapı elde edeceksiniz.
- POM.xml'nizi açın
İç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+ 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:
Hatalar görüyorsanız ve bağımlılıkların iyi bir şekilde indirilip indirilmediğinden emin değilseniz,
- Tüm bağımlılıkları içe aktarmak için bir maven yapısı gerçekleştirin, yine guru99'da Maven kurulumuyla ilgili yardım bulacaksınız.
- Yine de hatalar görüyorsunuz, ardından bir maven temizliği yapın ve ardından bir maven kurulumu yapın ve hatasız bir şekilde oluşturulmalıdır.
- Aşağıdaki satırları Java sınıfınıza ekleyebilir ve hiçbir derleme hatasının bulunmadığını görebilirsiniz.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
İlk basit, İçiniz Rahat Olsun komut dosyası
Sözdizimi:
Rest Assured.io'nun sözdizimi en güzel kısmıdır çünkü BDD'ye çok benzer ve anlaşılırdır.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
Açıklama:
Kod | açıklama |
---|---|
Verilen() | 'Given' anahtar kelimesi, bir arka plan belirlemenizi sağlar; burada istek başlıklarını, sorgu ve yol parametresini, gövdeyi, çerezleri iletirsiniz. İstekte bu öğelere ihtiyaç duyulmuyorsa bu isteğe bağlıdır |
Ne zaman() | 'ne zaman' anahtar sözcüğü senaryonuzun öncülünü işaret eder. Örneğin, bir şeyi aldığınızda/yayınladığınızda/koyduğunuzda başka bir şey yapın. |
Yöntem() | Bunu CRUD işlemlerinden herhangi biriyle değiştirin (get/post/put/delete) |
Daha sonra() | İddianız ve eşleştirici koşullarınız buraya gelecek |
Artık sözdiziminin kurulumuna ve geçmişine sahip olduğunuza göre, ilk basit testimizi oluşturalım. Şu ana kadar yapı size yeni görünüyorsa sorun değil, her satırı daha fazla kodlayarak yorumladıkça, onu anlayacaksınız.
Ne getireceksin?
Tarayıcınızı açın ve şuna basın: http://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.
İsteğe yanıt almaya çalıştığınızda tarayıcıda hata almanız durumunda,
- Https mi yoksa Http mi kullandığınıza bakın. Tarayıcınızda güvenli olmayan web sitelerini açmayacak ayarlar bulunabilir.
- Tarayıcınızın web sitelerini açmasını engelleyen bir proxy veya güvenlik duvarı olup olmadığına bakın.
*not – burada herhangi bir başlık, gövde ve çerez kullanmadınız. Bu bir URL'ydi ve ayrıca API'den içerik alıyorsunuz ve mevcut herhangi bir içeriği göndermiyor veya güncellemiyorsunuz, bu da onu bir GET çağrısı yapar. İlk testimizi daha iyi anlamak için bunu unutmayın.
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” adlı bir yöntem oluşturun
) 3 Adım Verilende daha önce öğrenilen yapıya benzer şekilde, ne zaman ve sonra aşağıdaki kodu yazın
verildi(). -> Başlık gerekmez, sorgu veya yol parametresi gerekmez.
Ne zaman(). -> Belirli bir koşul ayarı yok
elde etmek('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). -> yalnızca URL'nin sağlanması gerekiyor
Daha sonra(). -> Belirli bir iddiaya gerek yok
kayıt(). all() -> Tüm yanıtlar alındıktan sonra, günlük yanıtı, başlıklar, aslında isteğin size döndürdüğü her şey.
public static void getResponseBody(){ given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log() .all(); }
Şimdi, kullanılan URL'nin uzun ve daha az okunabilir olduğuna dikkat edin; yakından bakarsanız, 3 sorgu parametresinin kullanıldığını fark edeceksiniz.
- Müşteri Kimliği
- Şifre
- Hesap_No
İçiniz rahat olsun, her parçayı (sorgu, yol, başlık parametresi) ayrı ayrı iletmemize yardımcı olarak kodu daha okunabilir ve bakımı kolay hale getirir. Ayrıca harici bir dosyadaki verileri gerektiği gibi parametrelendirebiliriz.
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("http://demo.guru99.com/V4/sinkministatement.php").then().log() .body(); }
**"Hepsi" yerine "gövde" kullandığımızı unutmayın; bu, yanıtın yalnızca gövdesini çıkarmamıza yardımcı olur.
Çıktı:
Yanıt durum kodunu alma
Komut dosyasında yazacağımız bir sonraki yöntem, durum kodunu almak ve aynı zamanda bunu doğrulamak için bir iddia koymak olacaktır.
) 1 Adım getResponseStatus() adında bir yöntem 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 Günlüğe kaydetmek yerine, durum kodu değerini getirmek için Rest Assured'ın yerleşik 'getStatusCode' yöntemini kullanırız
) 4 Adım Durum kodunuzun 200 olduğunu iddia etmek için –assertThat().statusCode(expectedCode) anahtar kelimelerini kullanıyoruz.
**Not – URL basitlik amacıyla kullanılan bir değişkendir. URL, API istek URL'sinin tamamını içerir
public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://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="http://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("http://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("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode(); System.out.println("The response status is "+statusCode); given().when().get(url).then().assertThat().statusCode(200); } }
* Not:
- 200 bu senaryo için başarılı bir yanıttır. Bazen isteğin de başarısız olması gerekir ve ardından 4XX veya 5XX kullanabilirsiniz. Geçersiz parametreler sağlayarak durum kodunu değiştirmeyi deneyin ve kontrol edin.
- 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ı
Yanıt gövdesinin ve yanıt durum kodunun getirilmesi yukarıdaki bölümde zaten ele alınmıştır. Yanıtın farklı bölümlerini getirmek için 'çıkarma' anahtar sözcüğünün çok önemli olduğunu belirtmekte fayda var.
ü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()'dan başladığını unutmayın; bunun nedeni, burada isteğe ulaşıp yanıt almak için herhangi bir önkoşul veya doğrulama yapılmamasıdır. Bu gibi durumlarda aynısını kullanmak isteğe bağlıdır.
Çıkış:
İş İhtiyacı:
Birçok kez, sonraki istek için yetkilendirme belirtecini veya bir oturum çerezini kullanmanız gerekir ve çoğunlukla bu ayrıntılar 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çmek için yanıt süreleridir. Aramanız için geçen sürenin internet hızınıza, API'nin o andaki performansına, sunucu yüküne ve süreyi etkileyen diğer faktörlere bağlı olarak daha fazla veya daha az sürebileceğini unutmayın.
İçerik türü
“contentType ()” yöntemini kullanarak döndürülen yanıtın içerik türünü alabilirsiniz.
public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); }
Çıktı
İş İhtiyacı:
Bazen, herhangi bir çapraz kaynak tehdide karşı güvenlik açığı olmadığından veya aktarılan içeriğin API standartlarına uygun olduğundan emin olmak için içerik türünü almak çok önemlidir.
Bireysel JSON Öğesini Getir
Verilen yanıttan toplam tutarı hesaplamanız isteniyor, her tutarı alıp toplamanız gerekiyor.
Adımlar:
) 1 Adım Tutar alanı, "sonuç" anahtarının bulunduğu listede yer alan Anahtar "ifadeleri" içeren bir dizi içindedir
) 2 Adım İçiniz rahat olsun, API'deki değerlere "yol" kullanarak ulaşmak için bir mekanizma sağlar
) 3 Adım Tutarlara ulaşmanın yolu “result.statements.AMOUNT”dur. Bunu Selenyumdaki Xpath gibi düşünün.
) 4 Adım Bir koleksiyondaki tüm tutarları getirin ve ardından toplamı hesaplamak için tüm değerler için 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: Tutar değeri string veri tipinde olduğundan tamsayıya çevirip toplama için kullanıyoruz.
Çıktı:
ÖZET
- Rest Assured, otomatikleştirmemizi sağlayan bir grup java kütüphanesidir. Dinlenme API testi
- Emin olun: Javatemelli ve temel bilgi Java bunu öğrenmen yeterli
- Karmaşık JSON yapılarından istek ve yanıt değerlerinin alınmasına yardımcı olur
- The API istek, çeşitli başlık, sorgu, yol parametresi ve ayarlanacak herhangi bir oturum veya çerez ile özelleştirilebilir.
- İddia ifadelerinin ve koşullarının belirlenmesine yardımcı olur.
- Yanıt JSON türü olduğunda Rest Assured çok yararlı olsa da, içerik türü kimliği HTML veya düz metinse yöntemleri sorunsuz çalışmayabilir.