Api Otomasyonu İçin Model Oluşturma

Burak Kaya
hepsiburadatech
Published in
3 min readOct 3, 2023

API testleri, uygulamalar arasındaki veri ve işlevsellik paylaşımını sağlayan API’lerin doğru çalıştığını, güvenli olduğunu, performansının uygun olduğunu ve hatalardan arındırıldığını doğrulamak için kullanılır. Bu testler, uygulamaların güvenilirliğini ve kullanıcı deneyimini korumada kritik bir rol oynar.

Bu api call’lar için kullanacağımız test datalarını barındıran json body’leri string birleştirmelerle değil de, modeller ile oluşturmak çok daha profesyonel ve mantıklı.

Model kullanımının faydalarından bazılarını şu şekilde listeleyebiliriz

  • Verileri daha anlaşılır hale getirir.
  • Kod tekrarını azaltır.
  • Hata yönetimini kolaylaştırır.
  • Tip güvenliği sağlar.
  • Bakımı daha kolay hale getirir.

Swagger üzerinden manuel olarak test ettiğimiz bir test datasını kopyalayıp otomasyonun içerisine de atmak mümkün fakat, yukarıda bahsetmiş olduğumuz maddeler göz önünde bulundurulduğunda, mümkün olduğunda OOP yordamlarına uygun bir şekilde hazırlanmış modeller ile ilerlemek isteriz.

Proje içerisinde, https://openapi-generator.tech/ frameworkü ile oluşturulmuş modeller var ve bu modelleme yapısını proje içerisine nasıl entegre ettiğimizi aşağıda anlatacağım.

  • https://openapi-generator.tech/ sitesini ziyaret edip, ilgili komutlar ile frameworkü makinenize kurun.
  • Proje ana dizinine InjectorModels isminde bir klasör oluşturuyoruz. Sonrasında, ilgili swagger için bir klasör daha oluşturuyoruz.
  • Proje ana dizinindeki Injector klasörlerinin içerisindeki sh dosyaları, içinde bulunduğu dizinde sırasıyla çalıştırılır.
  • Swagger üzerindeki bütün api modelleri, projenin içerisine eklenmiş ve kuruluma hazır hale gelir.
  • Not: Terminalde sh yazıp, ilgili dosyayı yanına sürükleyerek path kolayca eklenebilir.

Örnek olarak CommandApi isminde bir apimiz olduğunu varsayalım;

  • Proje dizininde ilgili klasör yapısı bu şekilde.(generated klasörü kendiliğinden oluşturulacak)
  • Dizindeki sh dosyaları, 1,2 ve 3 şeklinde zaten sıralı.
    içerilerinde aslında terminalde çalıştırılması gereken kodlar mevcut. Detayları aşağıdadır.
  • 1- DownloadApi.sh
openapi-generator generate -i http://example.com/commandapi/swagger/v1/swagger.json -g java -o generated — additional-properties=library=rest-assured,serializableModel=true,serializationLibrary=gson,dateLibrary=java8,groupId=commandapi,artifactId=commandapi
  • 2- ConvertJar.sh
cd generated
mvn package
  • 3- CopyToProj.sh
cp -f generated/target/commandapi-1.jar ../../swagger
  • Yapılması gereken işlemler sırasıyla, bu dosyaları ilgili dizin içerisine girip, terminal üzerinden çalıştırmak.

1- İlgili swagger üzerinden, proje belirtilen koşullara göre indiriliyor.(örn; java olsun, restAssured uyumlu olsun, groupid si şu olsun artifactid si bu olsun gibi.)
2- Bu modeller, projede kullanılacak jar dosyalarına convert ediliyor.
3- Bulunduğu dizinden, proje içerisindeki olması gereken yerine kopyalanıyor.

Bu sayede, developmentten çıkmış yeni veya güncellenmiş bir api varsa, modeli otomatik olarak güncellenip, kullanılabilir hale geliyor.
Örnek resimler aşağıdadır.

Oluşturulan jar dosyasının, proje tarafından görülebilmesi için, pom.xml içerisine, tıpkı maven ile dışarıdan bir bağımlılık çekiyormuş gibi ilgili dependency’i ekliyoruz

<dependency>
<groupId>commandapi</groupId>
<artifactId>commandapi</artifactId>
<version>swaggerio</version>
<scope>system</scope>
<systemPath>
${pom.basedir}/swagger/commandapi-1.jar
</systemPath>
</dependency>

Aşağıda da görüldüğü üzere, ilgili jar dosyası oluşturuldu, projenin içerisine eklendi ve modeler kullanılabilir halde.
testlerin gerçekleştiği java classlarında çağırılıp, get set metodları ile manipüle edilebilir, sonrasında da request için, direkt olarak json formatına çevrilebilir.

Örnek kullanım;(Görüldüğü gibi modeller buradan geliyor.)

import org.openapitools.client.model.*;

Test içerisindeki kullanımı;


@Step({"I POST RawQnA Assign with Id"})
public void iPOSTRawQnAAssignWithId() {

AssignSingleRawQnAModel assignSingleRawQnAModel = new AssignSingleRawQnAModel();
assignSingleRawQnAModel.setAssignedOperator("operatorName");


commandBody = gson.toJson(assignSingleRawQnAModel);

RestAssured.baseURI = BASE_API_URL;
RequestSpecification request = RestAssured
.given().log().all()
.request()
.header("Content-Type", "application/json")
.pathParam("id", "64758435743957948356");

commandResponse = request
.body(commandBody)
.when()
.post(RestAssured.baseURI + "commandapi/v1/RawQnA/{id}/assign");
}

Sonraki yazılarda görüşmek üzere.

--

--