Karate ile API Test Otomasyon

Adem Örpek
LCW Digital
Published in
3 min readOct 23, 2023

Merhabalar,

Bu yazımda Karate framework ile API Test Otomasyonu konularına değineceğiz. Küçük de bir projemiz olacak.

Karate, Peter Thomas tarafından geliştirilen açık kaynak kodlu API test otomasyon aracıdır. Testlerimizi Cucumber-Gherkin formatında yazabiliyoruz. Karate, REST ve SOAP servisleri desteklemektedir. Biz REST servisler ile bir proje yapacağız.

Başlayabiliriz :)

IntelliJ IDE’yi açtıktan sonra aşağıdaki pluginleri yüklememiz gerekiyor. Yükleme işlemi tamamlandıktan sonra Installed sekmesinden kontrol edebiliriz.

Gherkin
Cucumber for Java
Cucumber for Java

Karate Projesinin Oluşturulması

Öncelikle Create new project > Maven Project seçiyoruz. Ardından Add Archetype butonuna basıp parametreleri eklememiz gerekiyor. Pencereyi OK ile kapatıp Next dedikten sonra projemizi adlandırarak karate projemizi oluşturmuş olacağız.

Kütüphanelerimizi pom.xml’e ekleyelim

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<maven.compiler.version>3.8.1</maven.compiler.version>
<maven.surefire.version>2.22.2</maven.surefire.version>
</properties>
<dependencies>
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-archetype</artifactId>
<version>0.9.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<testResources>
<testResource>
<directory>src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgument>-Werror</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>

Karate fonksiyonlarına geçebiliriz.

Öncelikle, oluşturduğumuz projede src/test/java dizininin altına features isimli package ekleyelim ve altına “.feature” uzantılı bir dosya oluşturalım. Adına “user” diyebiliriz.

Aynı dizin içerisine yeni bir java class oluşturalım. Dosya ismine dilediğiniz ismi verebilirsiniz. Biz TestRunner diyelim. Class run edildiğinde direkt olarak içerisinde tanımlı feature dosyasını çalıştıracaktır.

package ilkProje;

import com.intuit.karate.junit5.Karate;

public class TestRunner {
@Karate.Test
Karate ProfileRegression() {
return Karate.run("classpath:features/user");
}

}

https://petstore.swagger.io/#/ sitesindeki örnek isteklerle feature dosyamıza testimizi yazacağız.

Feature: Ilk Projemiz

Background:
Given url 'https://petstore.swagger.io/v2'

Scenario: Create User
And path '/user'
* def requestBody =
"""
{
"id": 445432234343455,
"username": "ademtest83",
"firstName": "adem",
"lastName": "orpek",
"email": "ademtest123@gmail.com",
"password": "adem1234",
"phone": "123456789",
"userStatus": 1
}
"""
And request requestBody
When method POST
Then match response.status.code == 200

Scenario: Get User Login
And path '/user/login'
And param username = "ademtest83"
And param password = "adem1234"
When method GET
Then match response.status.code == 200

Yukarıda bir kullanıcı oluşturmak için POST isteği ve login olmuş kullanıcıyı getiren GET isteği bulunuyor. Bu iki istek için testlerimizi yazdık.

“Given url” iki isteğimizde de ortak olduğundan Background kısmında kullandık. Böylece iki testimiz için de url background kısmından beslenecektir. Ayrı ayrı da background kullanmadan testlerimiz içerisinde yazabiliriz.

requestBody” ile request’i değişkene atayıp oradan kullanımını da bu şekilde görebiliriz.

“param” bir get isteği oluştururken bir query parametresi kullanmamız gerekirse yukarıdaki gibi kullanıyoruz.

“Then match” ile de isteğimizden dönen cevabımızı karşılaştırıyoruz. Burada status code’u 200 ile karşılaştırdık. Yanıt 200 dönerse isteğimiz sorunsuz çalışıyor demektir ve test başarılı olacak, dönmezse istek hata alacaktır.

Son olarak projemizi çalıştıralım

Çalıştırmak için Class’ımızın içinden veya feature dosyasından run edebiliriz. Çalıştıktan sonra proje çıktımızı aşağıdaki gibi görüyor olacağız.

output

Bu yazımızda Karate ile küçük bir proje oluşturmuş olduk.

Teşekkürler.

--

--