Karate Framework ile Api Test & Raporlama

Merve Arslan
Odeal-Tech
Published in
6 min readNov 25, 2022

Merhaba,

Bu yazıda Karate ile api test yazma ve rapor alma konusunu inceleyeceğiz.

Karate Peter Thomas tarafından geliştirilen açık kaynak kodlu api test otomasyon aracıdır. Karate, API test otomasyonu, performans testi ve hatta UI otomasyonunu tek bir birleşik çerçevede birleştiren açık kaynaklı bir araçtır. Cucumber tarafından popüler hale getirilen BDD sözdizimi ile dilden bağımsızdır ve programcı olmayanlar için de kolay anlaşılabilirdir. Assertionlar ve HTML raporları yerleşiktir ve hız için testleri paralel olarak çalıştırabilirsiniz.

PUT, POST, DELETE, GET gibi birkaç API istek yöntemi vardır. Başka bir dilde veya çerçevede, o yöntemleri bir kütüphane ile bildirmeniz veya yöntemleri geliştirmeniz gerekirken, karate’de istekte bulunmak için “Method” anahtar sözcüğünden sonra ihtiyacınız olan istek türünü yazmanız yeterlidir.

Ayrıca, diğer BDD framework’lerinin (Cucumber, JBehave, Specflow) aksine, step definition’larını (Kullanılan BDD cümleciklerinin kodla içinin doldurulması) da yazmanız gerekmez çünkü, Karate, API testine başlamanız için gereken bütün step definition’ları sizin için oluşturmuş durumda bünyesinde tutar.

Gereksinimler

  • IntelliJ
  • Java jdk 1.8 ve üzeri
  • Maven
  • Cucumber Plugins

1. Geliştirme Ortamını Ayarlama

IntelliJ Ide’sini açtıktan sonra New Project

ya da sol üstteki toolbar üzerinden File > New > Project

yolunu takip ederek proje adı, build system, jdk sürüm bilgilerini girdikten sonra create butonuna tıkladığımızda ilk adımı tamamlamış oluyoruz.

2. Karate Kurulumu

<dependencies>
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>4.11.2</version>
</dependency>
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-junit4</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>

Pom.xml dosyasına gerekli dependency’leri girdikten sonra

Cucumber for java ve Gherkin pluginlerini de File > Settings > Plugins yolunu izleyerek ekleyelim.

3. Proje Dizini Oluşturma

Öncelikle aynı toolbar üzerinden java > New > Package yolu ile içerisine kullanacağımız feature dosyası ve test runner classını koyacağımız bir package oluşturalım.

Package’e sağ tıklayarak projeyi çalıştıracağımız TestRunner adlı java classını oluşturalım.

Sonrasında package’a sağ tıklayarak New > File yolu üzerinden feature dosyasını oluşturalım. Uzantısını “.feature” olarak verdiğinizde cucumber ikonunun otomatik geldiğini göreceksiniz.

Sonrasında feature dosyasında kullanmak üzere config dosyasını oluşturalım. Feature dosyasında olduğu gibi src > test >java altında .js uzantılı (karate-config.js) file şeklinde oluşturalım.

Bu adımları tamamladıktan sonra geliştirmeye başlayabiliriz.

4. Geliştirmeye Başlama

Background olarak genel bir url tanımladığımız için her senaryonun başında buraya gelecek ve yine her senaryo için bu url’i kullanacak. Background içerisinde tanımladığımız url’e path olarak ayrı ayrı tanımlama yapacaksak bunu scenario’lar içerisinde verebiliriz.

Ben https://reqres.in/ sitesi üzerinden testlerimi gerçekleştireceğim.

GET REQUEST

Get methodunu kullanıp status code’un 200 döndüğünü kontrol ettikten sonra print yöntemi ile response’u yazdırabilir, assertion için de assert ya da match yöntemlerini kullanabiliriz.

Ben 2 numaralı kullanıcının bilgilerini getirecek pathi girdikten sonra get methodunu uygulayıp başarılı status code (200) kontrolü yaptım. Response’u yazdırdım, raporda gördüm.

Sonrasında da assert ile response id’nin 2 olduğunu doğruladım.

POST REQUEST

Post methodunda kullanıcıların içerisine yeni bir kullanıcı eklemek için /users pathini girdikten sonra create etmek istediğim bilgileri içeren body’i json formatta tanımladım. Body’i gönderip post methodunu uygulayarak başarılı status code (201) kontrolü yaptım. Response’u yazdırdım, oluşturduğum yeni kullanıcı bilgilerini ve atanan id’yi hem console’da hem de raporda gördüm.

Sonrasında da match ile first_name değerinin “Mars” olduğunu ve “null olmayan” bir id’nin oluşturulabildiğini doğruladım.

PUT REQUEST

Put methodunda 3 numaralı kullanıcının bilgilerini güncellemek için /users/3 pathini girdikten sonra update etmek istediğim bilgileri içeren body’i json formatta tanımladım. Body’i gönderip put methodunu uygulayarak başarılı status code (201) kontrolü yaptım. Response’u yazdırdım, oluşturduğum yeni kullanıcı bilgilerini ve atanan id’yi hem console’da hem de raporda gördüm.

DELETE REQUEST

Url gibi tanımlamaları karate-config.js dosyasında yapıp çalıştıracağımız senaryoda kullanabiliriz. Ben bunu (göstermek amacıyla) delete methodunda kullanmayı tercih ettim.

Delete methodunda 2 numaralı kullanıcının bilgilerini silmek için .js uzantılı dosyaya url’i tanımladım.

Tanımladığım isimle scenario üzerinden çağırdım. Bu arada dosyadaki background kısmındaki url’i comment line yaptım. Delete methodunu uygulayarak başarılı status code (204) kontrolü yaptım. Response’u yazdırdım, response’un boş döndüğünü raporda gördüm.

5. Raporlama

  • HTML Rapor Alma

Karate default olarak yapısında html rapor barındıran bir framework’e sahiptir.

Herhangi bir senaryoyu run ettikten sonra target > surefire-reports > karate-summary.html yolunu takip ederek raporları görebilir, sağ click Open In > Browser yolu ile de raporu dilediğimiz browser içinde açabiliriz.

Ya da pom.xml’e ekleyeceğimiz

<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-core</artifactId>
<version>1.0.1</version>
</dependency>

sayesinde scenario run edildiğinde otomatik oluşturulan target > karate-reports klasörü içinden html raporlara gidebiliriz.

  • Cucumber Rapor Alma

Sağ üst köşeden features, tags, steps ya da failures seçeneklerine tıklayarak hangisinin detaylarına gitmek istiyorsak gidebiliriz.

İstatistiklere feature bazında bakmak istersek “features” kısmına gelmeliyiz.

Features raporunda, hangi feature dosyasını çalıştırdıysak ayrıntılı bir şekilde geçen, fail olan, atlanan bekleyen ya da tanımlanmayan step oranlarını, toplam geçen ya da fail olan senaryo miktarını ve feature koşum süresini ve statülerini görebiliriz.

İstatistiklere tag bazında bakmak istersek “tags” kısmına gelmeliyiz. Burada tag bazında gösterilen oranlar ile farklı feature’lardaki farklı senaryoları bir arada koştuğumuzda, geçen, fail olan, atlanan bekleyen ya da tanımlanmayan step oranlarını, tag bazında toplam geçen ya da fail olan senaryo miktarını ve her bir feature dosyasının ayrı ayrı koşum süresini ve statülerini görebiliriz.

İstatistiklere step bazında bakmak istersek “steps” kısmına gelmeliyiz.

Burada step bazında sırasıyla toplam step sayısını, ortalama test koşum süresini, max süreyi, toplam süreyi ve toplam statü oranını görebiliriz.

İstatistiklere failure bazında bakmak istersek “failures” kısmına gelmeliyiz.

Son olarak burada da fail olan senaryo bazında bir istatistik ile birlikte failure olma sebebini ayrıntılı görebiliriz.

Bu yazı ile sizlere karate framework ile temel api testleri yapmayı ve iki çeşit rapor almayı göstermeye çalıştım.

Projenin linkini bırakıyorum.

https://github.com/odealmrv/KarateApiTesting

Geliş(tir)meli nice günlere.. 💻

--

--