Soap Image Soap Image

SoapUI-Web Servis Testleri Nasıl Yapılır? Part 1-Genel Terimler ve Kavramlar

Web Service, farklı sistemler arasında veri alışverişi yapmak için kullanılan bir mekanizmadır. WSDL, bir web servisinin nasıl kullanılacağını tanımlar. SOAP, XML formatında mesajlaşmayı sağlayan bir protokoldür ve Envelope, Header, Body ve Fault gibi bileşenlerden oluşur. REST, daha esnek bir veri alışverişi sunar ve JSON veya XML formatlarıyla çalışır. REST API’lerinin gereksinimleri doğrulama, önbellekleme, sayfalama, sıralama, versiyonlama ve yetkilendirmeyi içerir.
Web Servis

Web Service Nedir ?

Web Service, iki uygulamanın ya da makinenin mimarisi ve teknolojisinden bağımsız olarak veriyi değiş tokuş edecek mekanizma veya iletişim ortamıdır. Web Servisler web üzerinden HTTP protokolü ile hizmet veren program parçalarıdır. Hangi dilde ve/veya platformda geliştirildiklerinin bir önemi olmadığı için farklı sistemler arasında veri alışverişi yapmamıza olanak sağlar. Örneğin .NET ile yazılmış bir servisle PHP’de yazılmış bir uygulama birbiri ile iletişim kurabilir.

WSDL Nedir ?

WSDL Web Services Description Language (Web Servisleri Tanımlama Dili) kısaltmasıdır. Web servislerin kullanılabilmesi için web servis içindeki metot, parametre, web servis adresi vb. değerlerin bilinmesi gerekir. WSDL, web servisi kullanabilmek için gerekli olan bilgileri tanımlayan bir standarttır. WSDL, XML biçiminde hazırlanır ve yapısı aşağıdaki gibidir.

Web Servis kod

SOAP Nedir ?

SOAP (Simple Object Access Protocol/Basit Nesne Erişim Protokolu) en temel anlamda, internet üzerinden küçük miktardaki bilgileri ya da mesajları aktarma protokolüdür. SOAP mesajları XML formatındadır ve genellikle HTTP (Hyper Text Transfer Protocol) protokolü (bazen de TCP/IP) kullanılarak gönderilirler. Burada dikkat edilmesi gereken en önemli durumlardan biri, SOAP’ın bizi XML tabanlı kullanıma mecbur bırakmasıdır. Bu konuda esnek değildir.

SOAP – İleti Yapısı

Envelope: Zarf anlamına gelen bu element, SOAP mesajının tüm iskeletini oluşturur.

Header: Başlık elementi, mesaj sağlayıcılarının kullanacağı isteğe bağlı niteliklerinin (attributes) ayarlandığı verilerden oluşur. Bu element isteğe bağlı (optional) olarak eklenebilir.

Body: Gövde elementi, XML verinin kendisini barındıran, asıl mesajı içeren veridir. Bu element zorunlu (mandatory) olarak eklenmelidir.

Fault: Hata elementi, mesaj sağlayıcıları tarafından alınan hatalar hakkında bilgi veren bir veridir.

Yukarıda her bir elementi açıklanan SOAP mesaj yapısının iskeleti aşağıda gösterilmektedir.

<?xml version="1.0"?> 
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Header> 
... 
</soap:Header> 
<soap:Body> 
...
 <soap:Fault>
 ...
 </soap:Fault>
</soap:Body> 
</soap:Envelope>

Envelope Elementi

SOAP’ ın bütün mesajını sarmalayan kök elementtir. Aşağıda örnek şablonu verilmektedir.

<?xml version="1.0"?> 
<soap:Envelope
 xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
... 
Message information goes here 
... 
</soap:Envelope>

XMLNS: Soap niteliği SOAP mesajında kullanılan ad uzayını (namespace) tanımlar. soap:encodingStyle niteliği SOAP mesajında kullanılacak veri tiplerini tanımlar. Yukarıdaki örnekte gösterilen veri tipleri XML dilinde kullanılan W3C’ nin tanımladığı XSD veri tipleridir.

Header Elementi

Başlık elementi SOAP mesajlarında isteğe bağlı olarak doldurulan bilgilerden oluşur. Bir başlık elementini, örnek olarak, şifre korumalı servislere dijital imza sağlamak için kullanabilir veya bir servise login olmak için kullanılan kullanıcı adı ve şifre bilgilerinizi bu element altında girebilirsiniz. Header elementleri bir SOAP zarfı içerisinde ilk olarak tanımlanan XML imlerinden oluşur. Örnek bir header imi aşağıda gösterilmektedir.

Örnek Header:

<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Header>
 <m:Trans xmlns:m="http://www.example.com/transaction/">100
 </m:Trans> 
</soap:Header> 
... 
... 
</soap:Envelope>

Bir SOAP header elementi mustUnderstand, actor ve encodingStyle niteliklerini barındırabilir.

soap:mustUnderstand niteliği SOAP başlığının alıcı tarafından tanınmasının zorunlu olup olmadığını söyler. Şayet bu değer yukarıdaki örnekte olduğu gibi 1 ise, bu mesajı alan alıcı bu başlığı işlemek zorunda kalır. Aksi halde 0 değeri, bu başlığın işlenmek zorunda olmadığını belirtir. Şayet 1 olan değeri alan alıcı başlığı tanımlayamaz ise bir hata döndürür. Örnek kullanımı aşağıda gösterilmektedir.

Örnek mustUnderstand:

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Header> 
 <m:Trans xmlns:m="http://www.example.com/transaction/"
 soap:mustUnderstand="1">100 
 </m:Trans> 
</soap:Header> 
... 
... 
</soap:Envelope>

soap: actor niteliği bir göndericinin, alıcıya mesajı iletirken, arada yönlendirme yapan mesaj sağlayıcılarına bu mesajı ileteceğini belirtir. Örnek kullanımı aşağıda gösterilmektedir.

Örnek actor:

<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Header> 
 <m:Trans xmlns:m="http://www.example.com/transaction/"             soap:actor="http://www.example.com/appml/">100 
 </m:Trans> 
</soap:Header> 
... 
... 
</soap:Envelope>

soap:encodingStyle niteliği yukarıda anlatılan görevi ile aynıdır.

Body Elementi

SOAP mesajının gövdesini oluşturan asıl mesajı temsil eder. Doldurulması zorunlu olan bir bilgidir. Uzak prosedür çağrılarının ve servislerinin kullanıldığı yer burasıdır. Bir SOAP operasyonu burada çağrılarak sunucuya gönderilir. Aşağıdaki örnekte bir müşterinin ID bilgisini alarak adını döndüren SOAP mesajı aşağıda gösterilmektedir.

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body> 
 <m:GetName xmlns:m="http://www.example.com/customers"> 
  <m:Item>1234</m:Item> 
 </m:GetName> 
</soap:Body> 
</soap:Envelope>

Yukarıdaki örnekte www.example.com/customers web servis sağlayıcısına, 1234 numaralı müşteri sorgusu yapılmaktadır. Sunucunun döndüğü örnek cevap ise aşağıdaki formattadır.

<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body> 
 <m:GetNameResponse xmlns:m="http://www.example.com/customers"> 
  <m:Name>Fatih KABAKCI</m:Name> 
 </m:GetNameResponse> 
</soap:Body> 
</soap:Envelope>
</soap:Envelope>

Fault Elementi

İsteğe bağlı olarak doldurulan hata elementi, alınan hatalar hakkında bilgi sağlayan imlerden oluşur. Bir hata oluştuğunda, bu mesaj body elementi altında gösterilir. Bir hata elementi aşağıdaki 4 alt elementten oluşur.

<faultcode> hata kodunu gösterir.

<faultstring> hatanın açıklamasını gösterir.

<faultactor> hataya sebep olan actor bilgisini gösterir.

<detail> body elementi ile ilişkili uygulamaya özel hata bilgisini barındırır.

Yukarıdaki elementler bir hatanın hangi parçalardan oluştuğunu gösterir. Aşağıda örnek bir hata mesajı gösterilmektedir.

<?xml version='1.0' encoding='UTF-8'?> 
<soap:Envelope 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/1999/XMLSchema"> 
 <soap:Body> 
  <soap:Fault> 
   <faultcode xsi:type="xsd:string">soap:Server</faultcode> 
   <faultstring xsi:type="xsd:string"> 
    Exception from service object: null 
   </faultstring> 
  </soap:Fault> 
 </soap:Body> 
</soap:Envelope>

REST Nedir ?

REST (Representational State Transfer Architecture/Temsili Durum Transferi) en temel anlamda, İstemci ve Sunucu (Client-Server) arasında veri alış verişinin basit bir yoludur. REST mimarisi standart bir tanımlamaya ihtiyaç duymaz. REST ile veri alışverişini JSON, XML hatta text formatında bile yapabilirsiniz, esnek bir yapıya sahiptir.

HTTP Methodları (Verb)

GET: Veri görüntüler/listeler
POST: Yeni veri ekler/oluşturur
PUT: Var olan bir veriyi günceller/üzerine yeni veri ekler
DELETE: Veri siler
PATCH: Verinin bölümünü günceller
OPTIONS: Kabul edilen istekler konusunda bilgi iletir.

REST API Gereksinimleri

Sunucu bu tiplerden hepsine ya da birkaçına cevap verebilir. Peki, bu işlemlerin gerçekleştirilebilmesi için REST API’nin ne gibi gereksinimleri karşılaması gerekir?

Doğrulama (Validation)
Kullanıcı Doğrulama (Authentification)
Ön Bellek (Caching)
Sayfalama
Sıralama/Filtreleme
Versiyonlama
Yetkilendirme/Yetki Kısıtlama (Authorization)

Örnek bir REST talebi şöyledir:

GET http://www.catechizeme.com/catechisms/catechism_for_young_children/daily_question.js HTTP/1.1
Accept-Encoding: gzip,deflate
Host: www.catechizeme.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

Bu örnek talebe verilen yanıt ise şu şekilde olacaktır:

HTTP/1.1 200 OK 
Date: Fri, 22 Nov 2013 22:32:22 GMT 
Server: Apache 
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.17 
ETag: "b8a7ef8b4b282a70d1b64ea5e79072df" 
X-Runtime: 13 
Cache-Control: private, max-age=0, must-revalidate 
Content-Length: 209 
Status: 200 
Keep-Alive: timeout=2, max=100 
Connection: Keep-Alive 
Content-Type: js; charset=utf-8 
{ 
"link": "catechisms\/catechism_for_young_children\/questions\/36", "catechism": "Catechism for Young Children", "a": "Original sin.", "position": 36, "q": " What is that sinful nature which we inherit from Adam called?" 
}

REST API Response Yaygın HTTP Status Kodları

Sıklıkla karşılaşılan status değerlerine dair kısa açıklamalar eklemek gerekirse;

200OKYapılan web servis çağrısının başarılı olduğu anlamına gelmektedir.
201CREATEDVeri eklenme işlemi sonunda verinin kendisi 201 ile döner.
204NO CONTENTSilinme işleminin ardından ilgili verinin olmadığını belirtir.
400BAD REQUESTTalepte (kayıt ekleme, güncelleme, silme vb.) gönderilen talebin doğrulanamadığı (validation) durumları ifade eder.
401UNAUTHORIZEDTalep yetkilendirilen kullanıcının yetkileri ötesindeyse (sınırlandırma) 403 status kodu dönecektir.
403FORBIDDENİşlemler kullanıcının oturum gerçekleştirmesini zorunlu kılıyorsa ve oturum gerçekleştirilmemişse 401 status bildirimi alınacaktır.
404NOT FOUNDKullanıcının istek yaptığı URL yok ya da geçersiz ise 404 status dönecektir.
405METHOD NOT ALLOWEDİstek izin verilen dışında bir tip barındırıyor ise bu status dönecektir.
429TOO MANY REQUESTSKullanıcı belirtilen sayıdan fazla ya da karmaşık bir istekte (saatlik, dakikalık vb.) bulunmuşsa bu status dönecektir.
Bu status bildirimlerini genel gruplandırmalar altında ifade etmek gerekirse;
1xx – Bilgilendirme
2xx – Başarılı İşlem
3xx – Yönlendirme
4xx – Kullanıcı Kaynaklı Hata
5xx – Server Kaynaklı Hata
SOAP UI Temel Proje Tipleri Nelerdir ?
SOAP projeleri , genellikle bir WSDL dosyasından veya tek bir hizmet çağrısından oluşturulur.
REST projeleri , WADL dosyasından veya doğrudan bir URL ve parametrelerinden oluşturulabilir.
Genel projeler, çeşitli ara birimler ve yöntemlerle sunulan hizmetler için çok amaçlı bir projedir.
 
İbrahim Yılmaz
Yazılım Test Mühendisi
 
Kaynaklar:
https://www.yusufsezer.com.tr/wsdl-nedir/
http://fatihkabakci.com/article-SOAP(BASIT_NESNE_ERISIM_PROTOKOLU)
https://ceaksan.com/tr/rest-soap-api-nedir/
 
SoapUI-Web Servis Testleri Nasıl Yapılır? yazı dizisinin tüm linkleri aşağıdadır;
http://egemsoft.net/yazilim-test/2019/10/10/soapui-web-servis-testleri-nasil-yapilir-part2-test-structure/
http://egemsoft.net/yazilim-test/2019/12/12/soapui-web-servis-testleri-nasil-yapilir-part3-end-to-end-web-servis-test-otomasyonu/