run test cases parallel generate reports using karate tool
Bu eğitim, API üzerinde bazı temel işlemlerin nasıl gerçekleştirileceğini, paralel olarak test senaryolarının nasıl çalıştırılacağını ve Karate Framework ile raporların nasıl oluşturulacağını açıklar:
Önceki eğitimimizde temel bir test komut dosyası oluşturmayı öğrendik, şimdi API ve Karate Framework ile çalışırken gerçekleştirilebilecek bazı temel işlemleri öğrenerek ilerleyebiliriz. Bu tür birçok işlem vardır ve bu eğitimde yaygın olarak kullanılan birkaç işlemi tartışacağız.
Ayrıca, adım adım bir yaklaşımı izleyerek test durumlarını paralel olarak yürütme sürecini de inceleyeceğiz. Ayrıca otomatik olarak oluşturulan mevcut raporu da bir eklenti entegre ederek oluşturabileceğimiz Salatalık raporu ile karşılaştıracağız.
Ne öğreneceksin:
- API ve Karate Test Aracı ile Çalışma
- Test Durumlarını Paralel Olarak Çalıştır
- Raporlama İçin Salatalık Eklentisini Entegre Edin
- Sonuç
API ve Karate Test Aracı ile Çalışma
Önceki eğitimde tartışıldığı gibi, .feature Oluşturduğumuz dosyada, API üzerinde farklı işlemler gerçekleştirmek için farklı anahtar kelimeler kullanabilirdik. Karate çerçeve bize çeşitli eylemleri gerçekleştirmek için kullanılabilecek birkaç anahtar sözcük sağlar.
=> Önerilen Okuma: Karate Framework ile API Testi
Çeşitli İşlemlerin Yapılması
# 1) Yanıtı konsolda yazdırma
Yazdır sonucu konsola veya dosyaya yazdırmak için Karate Framework tarafından sağlanan bir anahtar sözcüktür. En yaygın kullanımlardan biri, API'nin yanıtını yazdırmaktır. Bu, kullanıcı için çok faydalı olabilir.
Bunu aşağıdaki kod satırlarını kullanarak yapabiliriz:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword# Then print response
Yukarıdaki kod satırları aşağıdaki çıktıyı verecektir:
18:15:44.495 (main) INFO com.intuit.karate - (print) { 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
Bu, API'nin yanıtını, hata ayıklama sırasında kullanılabilecek okuma amacıyla konsolda yazdırabiliriz.
# 2) Değişkenleri Bildirmek
Anahtar kelimeyi kullanarak değişkenleri tanımlayabiliriz def Karate çerçevesinde ve ardından gerekli olan yerlerde kodda belirtilen değişkenleri kullanın.
Aşağıdaki örnekte, mevcut olana birkaç satır daha kod ekledik. userDetails.feature komut dosyasındaki değişkenleri bildirmeye yardımcı olmak için dosya.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword Then print response # Declaring and assigning a string value: Given def varName = 'value' # using a variable Then print varName
# 3) Beklenen Yanıta Gerçek Yanıtı İddia Etme
Karate Framework, Assertion ile ilgili işlemlerin gerçekleştirilmesine yardımcı olur. eşleşme anahtar kelime. eşleşme akıllıdır çünkü boşluk bunun için önemli değildir ve anahtarların sırası önemli değildir.
Kullanmak için eşleme anahtar kelimesi, bir karşılaştırmayı temsil eden çift eşittir '==' işaretini kullanmamız gerekir.
Şimdi bazı kullanımları üzerinde durmaya çalışacağız. eşleşme anahtar kelime.
a) .feature dosyasının kendisinde beklenen yanıtın tamamı belirtildiğinde.
Belirli zamanlarda, dosyanın kendisinde hemen doğrulamak istediğimiz bazı verilerimiz vardır. Genellikle, kodda hata ayıklanırken bu tür verilerden bahsedilir.
Aynısını .feature dosyasında aşağıda gösterildiği gibi yapabiliriz:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Asserting the reponse #response variable is holding the Actual response from API #Right hand side value is holding the expected Response And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name':'Janet', 'email':'janet.weaver@reqres.in'}}
URL'ye bir istek gönderirseniz 'Https://reqres.in/api/users/2' tarayıcıda, sonra aşağıdaki yanıtı alacaksınız:
{ 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
Yukarıda belirtilen yanıtı * .feature dosyasını kullanarak doğrulamaya çalışıyoruz.
Kullandık eşleşme Karate Framework tarafından sağlanan ve farklı türlerin gerçekleştirilmesine yardımcı olan anahtar kelime İddialar API yanıtında.
Not : Yukarıdaki adımı gerçekleştirmek için API yanıtını tek satırda dönüştürmemiz gerekir. Mevcut araçlardan herhangi birini kullanabilirsiniz internet üzerinden.
b) Beklenen çıktı harici bir JSON dosyasında tutulduğunda.
Yukarıdaki örnekte, sınırlı veriye sahip olduğumuz ve aynı yanıtı idare etmesi kolay olan bir senaryoyu tartıştık, ancak gerçek senaryolarda, değerlendirmemiz gerekebilecek devasa JSON yanıt setlerine sahip olacağız.
Bu nedenle, bu durumlarda, yanıtı harici dosyada tutmak ve ardından aynı şeyi doğrulamak daha iyidir.
Aşağıdaki örnekte, aynı şeyi daha ayrıntılı olarak tartışacağız:
- Bir ExpectedOutput.json Aşağıdaki görselde gösterildiği gibi Proje klasörümüzdeki dosya.
Yeni bir paket kaynağı oluştur -> Yeni bir dosya oluştur ExpectedOutput.json
JSON yanıtını bu dosyada saklayın ve kaydedin.
Aşağıdaki kodu sayfanıza yazmanız gerekir. userDetails.feature dosya:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name': 'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult
Yukarıdaki örnekte, önce dosyayı okuyoruz ExpectedOutput.json ve yanıtını değişkende depolamak Beklenen Sonuç kullanmak aşağıdaki kod satırları:
Given expectedResult=read('./resources/ExpectedOutput.json')
Ardından, aşağıdaki kod satırlarını kullanarak Assertion'ı koyuyoruz. Gerçek yanıt ile Beklenen Sonuç ' == ' Şebeke.
And match response == expectedResult
c) Yanıttan belirli değerleri Eşleştirme / Doğrulama
Şimdiye kadar API'nin tüm yanıtını doğruladık, ancak her seferinde tüm yanıtı doğrulamak istemezsiniz. Bazen yanıtın yalnızca bir bölümünü değerlendirmek istersiniz. API testi için diğer araçları kullandığımızda veya bir çerçeve oluştururken genellikle aynısını yaparız.
Daha fazla anlamak için aşağıdaki JSON yanıtını örnek olarak alalım:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Parametre olduğunu doğrulamak istiyorsak şirket değerine sahip olmalı Haftalık Durum Kodu, o zaman bir JSON Yolu oluşturmamız gerekecek. Bu, JSON dosyası üzerinden geçilerek ve '.' Kullanılarak yapılabilir. (Nokta operatörü)
Yukarıdaki yanıtın JSON yolu şöyle olacaktır:
ad.company == 'Haftalık Durum Kodu'
Aşağıda, belirli parametrenin değerlerini değerlendirmemize yardımcı olacak kod parçacığı verilmiştir. Bu kod, .feature dosya.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly', 'text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name':'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult ##Creating JSON path to verify the values of particular parameters## And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
Aşağıda parametrik iddiaları gerçekleştiren kod satırı bulunmaktadır.
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
JSON Yolunu kullanarak, parametrelerin değerlerini değerlendiriyoruz.
Post İşlemleri Gerçekleştirme
Şimdiye kadar, bir API'yi test etmenin temel senaryolarını, yöntem ' ALMAK'. Ancak gerçek ortamda çalışırken, sunucuya çok fazla bilgi göndermemiz gerekiyor, bu nedenle bu durumda ' İLETİ' yöntem .
Bu bölüm size temel POST isteğiyle çalışma konusunda fikir verecektir.
POST isteğini göndermek için ihtiyaç duyduğumuz parametreler hakkında bazı kısa fikirler alalım.
# 1) JSON gövdesi * .feature dosyasında bahsedildiğinde bir POST isteği oluşturma
- Önceki öğreticide bahsedilen benzer adımları kullanarak bir userDetailsPost.feature oluşturun.
- Aşağıdaki kod satırlarını yazın:
Feature: Posting User Details Scenario: testing the POST call for User Creation Given url 'https://reqres.in/api/users' And request '{'name': 'morpheus','job': 'leader'}' When method POST Then status 201
Her zaman belirli bir yanıt için sunucuya gönderilmesi gereken bir gövdenin eşlik etmesi gereken bir POST isteği olduğundan, aşağıdaki bileşen altında bahsettik:
istek: POST yöntemi için gerekli olan istek olarak bir JSON gövdesi alır.
# 2) JSON gövdesinden harici bir dosyada bahsedildiğinde bir POST isteği oluşturma
Genellikle, büyük bir talep gövdesine sahip oluruz ve bu, * .özellik dosya. Bu yüzden onu harici dosyada tutmak daha iyidir.
- Aşağıda gösterildiği gibi Proje klasörümüzde bir PostBody.json dosyası oluşturmanız gerekiyor. Yeni bir paket kaynağı oluşturun -> Yeni bir dosya PostBody.json oluşturun ve JSON Gövdesini bu dosyada saklayın ve kaydedin.
Not: Yukarıdaki JSON dosyasında POST yönteminin Gövdesinden bahsetmiştik.
- UserDetailsPost'unuza aşağıdaki kodu yazmanız gerekir .feature dosya:
Feature: Posting User Details Scenario: testing the POST call for User Creation using External File Given url 'https://reqres.in/api/users' Given postBody=read('./resources/PostBody.json') And request postBody When method POST Then status 201
Aşağıdaki kod satırlarını kullanarak PostBody.json'dan JSON Gövdesini okuyoruz:
Given postBody=read('./resources/PostBody.json')
Not: Hepsi userDeatils.feature şimdiye kadar oluşturduğumuz dosyalar, temel TestRunner.java bunları yürütmek için, aşağıda gösterildiği gibi Temel Test Komut Dosyası eğitimimizde oluşturduğumuz dosya:
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
Test Durumlarını Paralel Olarak Çalıştır
Şimdi, temel bir test komut dosyası oluşturma adımlarını öğrendiğimiz ve API üzerinde bazı temel işlemleri gerçekleştirdiğimiz için, gerçek ortamda çalışmaya başlamanın zamanı geldi.
Genellikle, yürütmeyi daha hızlı hale getirmek için Test Durumlarını paralel olarak çalıştırmamız gerekir. Temel olarak fikir, daha kısa sürede daha fazla çıktı elde etmektir.
Bu, çerçevenin temel bir özelliğidir ve JUnit, Maven veya Grade'e bağlı değildir. Bize şunları sağlar:
- Test paketlerini basit bir şekilde çalıştırmak için özellikleri ve etiketleri kolayca seçin.
- Surefire-eklenti klasörünün altında Paralel sonuçlarını görüntüleyin.
- Hatta daha iyi bir kullanıcı arayüzü için Cucumber JSON raporlarını entegre edebiliriz (kısaca tartışılacaktır).
Karate Framework'te, Test Durumlarımızın Paralel olarak yürütülmesini başlatmak için pek çok adımı gerçekleştirmemize gerek yoktur. Sadece aşağıdaki adımlardan geçmemiz gerekiyor:
1) Şimdi değiştirmemiz gerekiyor TestRunner.java Şimdiye kadar kullandığımız dosya. Paralel yürütme kodunun yukarıdaki dosyaya yazılması gerekir.
Paralelde kodunuzu çalıştırırken lütfen aşağıdaki satırı aklınızda bulundurun:
ddos saldırısı nasıl gönderilir
** Paralel bir ortamda çalışmaya çalışırken @RunWith (Karate.class) ek açıklamasını kullanamayız.
Orijinali açın TestRunner.java dosyasını açın ve aşağıdaki kodu şimdi kullanın:
import com.intuit.karate.Results; import com.intuit.karate.Runner; import org.junit.Test; // important: do not use @RunWith(Karate.class) ! public class TestRunner { @Test public void testParallel() { Results results = Runner.parallel(getClass(),5); } }
** Aşağıdaki kod için geçerli olacaktır JUnit 4 Maven bağımlılığı
Yukarıdaki kod parçasına aşağıdaki kod satırını ekledik:
Sonuç sonuçları = Runner.parallel (getClass (), 5);
Bu satır, Çalışma Zamanı'nda sınıfları dinamik olarak getirerek Test Durumlarının Örneğini Paralel olarak çalıştırma talimatı verir.
iki) Bir kopya oluştur userDetails.feature dosya aşağıda belirtildiği gibi src / test / java Klasör.
Şimdi hepimiz Paralel yürütme için hazırız. iki . özellikleri dosya.
3) Git TestRunner.java yukarıdaki adımda oluşturulan dosya ve JUnit Test olarak çalıştırın. Bununla birlikte, test senaryolarımızı paralel formatta yürüteceğiz.
Kolay okunabilirlik için, Test yürütme tamamlandığında bazı bilgiler konsolda Karate Çerçevesi tarafından sunulur.
Sonuç şuna benzer:
Paralel yürütme ile, tüm özellikler Paralel olarak çalıştırılacak ve senaryolar da paralel bir formatta çalışacaktır.
Yukarıdaki adımları takip ederek, Karate Çerçevesini kullanarak API Testinin çok temel Paralel Yürütmesini başlatabileceksiniz.
** Sayfadaki çeşitli filtrelerden geçerek paralel test hakkında çalışabilirsiniz. Paralel Yürütme
Raporlama İçin Salatalık Eklentisini Entegre Edin
Kullandığımız gibi JUnit koşucu farklı senaryoların uygulanması için farklı * .özellik dosyalar, yolda depolanan özellik dosyalarının her biri için otomatik olarak bir rapor oluşturur. hedef / emin ateş raporları.
Bir Temel kullanıcı arayüzü biçimlendirilmiş rapor gerçekleştirilmiş test senaryolarını sunmak için.
Ancak oluşturulan raporlar kullanıcı arayüzü açısından pek sevindirici değil ve Raporları paydaşlarla paylaşmak için daha kullanıcı dostu ve kolay anlaşılır bir şeye ihtiyacımız var.
Böyle bir raporlama formatı elde etmek için Karate Framework entegre etme seçeneği sunar Salatalık raporlama eklentisi Bu, grafiksel olarak biçimlendirilmiş bir rapor oluşturmamıza yardımcı olacak ve bu daha kolay anlaşılır olacaktır.
Aynısını entegre etmek için adımlar şunlardır:
# 1) Aşağıdakileri ekleyin Salatalık-Raporlama POM.xml'nize bağımlılık
net.masterthought cucumber-reporting 3.8.0 test
#iki) TestRunner.java dosyasını yalnızca tek bir * .özellik projedeki dosya.
TestRunner.java dosyamızı, Cucumber eklentisi için aşağıdaki generateReport () yöntemiyle güncellememiz gerekiyor.
public class TestRunner { @Test public void testParallel() { generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String() {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
Yukarıda bahsedilen kodda aşağıdaki eylemleri gerçekleştiriyoruz:
- Yeni bir File örneği oluşturma
- Dosyaları hedef klasör altında depolamanın yolunu sağlama
- Yeni bir Salatalık raporu oluşturacak bir ReportBuilder nesnesi oluşturma
Not : Yukarıdaki kod, bekarlığa sahip olduğumuzda iyi çalışıyor *. özellik projemizdeki dosya.
# 3) Varsa TestRunner.java dosyasını düzenleyin. çoklu * .özellik Projedeki dosyalar.
Rapor oluşturma için senaryolar yürütülürken paralel yürütmenin halledilmesini sağlamak için bir kod satırı eklememiz gerekir (aşağıda kalın olarak vurgulanmıştır).
public class TestRunner { @Test public void testParallel() { System.setProperty('karate.env', 'demo'); // ensure reset if other tests (e.g. mock) had set env in CI Results results = Runner.parallel(getClass(),5); generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String() {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
Yukarıda belirtilen adımları gerçekleştirdikten sonra, iyi temsil edilen bir Grafik Kullanıcı Arayüzü raporunu kullanarak başarılı bir şekilde oluşturabileceğiz. Salatalık - raporlama Eklenti.
Raporu aşağıdaki görselde gösterildiği gibi projemizde aşağıdaki yolda bulabiliriz:
Bu Karate Çerçeve Eğitiminde şimdiye kadar gerçekleştirdiğimiz tüm operasyonlar için projemiz için aşağıdaki rapor oluşturulmuştur:
Sonuç
Özetlemek gerekirse, bu eğitimde, günlük bazda yararlı olan temel işlemleri tartıştık. Karate Çerçevesi ve nasıl yapılır birden çok * .feature dosyası paralel. Ayrıca, kullanan kullanıcılar için bir grafik rapor oluşturmayı da öğrendik. Salatalık raporlama Eklenti.
İlk olarak, API üzerinde gerçekleştirilebilecek temel işlemleri tartıştık. POST gövdesini / isteğini sunucuya nasıl gönderebileceğimizi, ya * .feature dosyasındaki gövdeden bahsederek (bu genellikle önerilen bir uygulama değildir) ya da harici bir dosya kullanarak (önerilen bir uygulama, temiz bir kod koruyun).
İkinci olarak, birkaç temel adımı uyguladıktan sonra, iki test sonucunu başarıyla uygulayabiliriz. * .özellik paralel olarak çalıştırılan dosyalar, yalnızca birkaç satır kod eklenerek TestRunner.java paralel çalışmanın başlamasını sağlayan dosya.
Buna ek olarak, yerel JUnit Test raporunu bir Salatalık raporuna nasıl dönüştürebileceğimizi öğrendik. Salatalık raporlama Eklenti. Eklenti, daha iyi bir kullanıcı arayüzüne sahip, kullanıcı için çok daha anlaşılır ve dolayısıyla bu raporların paylaşıldığı paydaşlar için daha iyi bir kullanıcı deneyimi sağlayan raporlar oluşturmamızı sağlar.
Şimdiye kadar, bazı temel işlemleri gerçekleştirebilmeli, test senaryolarını paralel şekilde çalıştırabilmeli ve kullanıcılar için okunması kolay bir rapor oluşturabilmelisiniz.
Önerilen Kaynaklar
- Karate Framework Eğitimi: Karate ile Otomatik API Testi
- 2021'deki En İyi 10 API Test Aracı (SOAP ve REST API Test Araçları)
- Jenkins ile Salatalık Nasıl Çalıştırılır: Örneklerle Eğitim
- Selenium WebDriver'da Kapsam Raporları Oluşturma Kılavuzu
- Specflow Raporlaması: Test Raporları Nasıl Oluşturulur ve Seçmeli Testler Nasıl Yürütülür
- TestLink Kullanarak Gereksinimleri Yönetme, Test Durumlarını Yürütme ve Rapor Oluşturma - Öğretici # 2
- Eclipse için Appium Studio Kullanarak Appium Testlerinizi Paralel Olarak Çalıştırma
- Paralelde Appium Testlerinin Büyük Ölçekli Yürütülmesi Nasıl Yapılır