Soap Ui kullanarak açık kaynak bir web servisi test etme aşamalarından bahsedeceğiz. Anlatılacak olan konunun başlıkları şu şekildedir;

  • Web servis testi neden yapılır?
  • Soap UI
  • Soap Projesi Oluşturmak
  • Proje Overview
  • Service Endpoints
  • WSDL Content
  • WS-I Compliance
  • Request Yapısı
  • Test Suite Oluşturmak
  • Assertions Yönetimi
  • Proje’de WSDL Güncellemek (Update Definition)
  • Dökümantasyon Oluşturmak

Web Servis Testi Neden Yapılır?

Web servis testinin amacı tüm Application Programming Interface (API)’lere uygulamanın beklendiği şekilde çalıştığını göstererek doğrulamaktır. Web servis testi uygulamanın fonksiyonelliğini, performansını ve güvenilirliğini kontrol etmek için kullanılır. Bazı durumlarda, belirli bir kod parçasına yönelik testleri olduğundan dolayı unit (birim) teste benzeyebilmektedirler. Web servis testi manuel olarak veya otomatikleştirilerek yapılabilir. Web servis testi geliştirilen API için tüm versiyonlarında uygulanmalıdır. Bu sayede yeni bir geliştirme veya sürüm geldiğinde yeni ve eski versiyonlarda regresyon testi yapılabilir.

Web servis nedir? Konusu ile ilgili daha detaylı bilgiye ulaşmak için linkteki yazımı okuyabilirsiniz. Web servis testlerinde kullanılan pek çok tool bulunmaktadır. Bunlardan birisi de SOAP UI. Bu yazımızda SOAP UI açık kaynak versiyonu üzerinden işlemlerimizi gerçekleştireceğiz.

SOAP UI

SOAP UI açık kaynaklı bir web servis test aracıdır. SOAP UI aracılığı ile API testi, Yük Testi, Güvenlik Testi gibi işlemler gerçekleştirilebilmektedir.

İlk olarak linkten SOAP UI Open Source sürümünü indiriyoruz. Kurulumu tamamladıktan sonra SOAP projemizi oluşturuyoruz.

SOAP UI

SOAP Projesi Oluşturmak

Projemizi oluşturmak için SOAP yazan ikona tıklayarak veya File> New SOAP Project menüsünden veya Ctrl+N kısayolu ile SOAP projemizi oluşturabiliriz.

SOAP UI Menü

Yeni proje oluştur butonuna tıkladığımızda karşımıza projenin wsdl uzantısını ve proje ismini girmenizi gerektiren bir pencere açılmakta. Kullanılacak olan servis açık kaynak olan basit bir hesap makinası servisidir.

Yeni SOAP Projesi

Proje ismini ve WSDL dosyasının yolunu girdiğimizde alt kısımdaki seçenekler erişilebilir olacaktır. Create Request seçeneği web servisi projeye dahil ettiğinizde içinde bulunan requestlerin otomatik olarak projeye tanımlanmasını sağlamaktadır. Create TestSuite seçeneği proje dahil ettiğimiz WSDL requestleri için TestSuite’ler oluşturur. Proje ismini ve linkini ekleyerek OK butonuna basıp projemizi oluşturuyoruz.

Proje Eklenmesi

Oluşan projemiz Navigator sekmesinde Projects Tab’ını altında gözükmektedir. Servisimizi ekledikten sonra WSDL uzantısını tarayıcıda açarak web servisin yapısını inceleyelim.

Calculator Web Service on Browser

Ekran görüntüsünde web serviste bulunan toplama metodu görülmektedir. Bu metot integer tipinde iki değişken alarak toplama işlemini gerçekleştirmektedir. Toplama işlemi sonucunu Add Response tag’i içerisinde AddResult adıyla integer olarak döndüğü görülmektedir.

Toplama metodu bu web servisin içerisinde bulunan metotlardan biridir. Bu metot dışında bölme, çarpma ve çıkarma metotları da bulunmaktadır. SOAP UI programında servisimizi eklediğimiz projeye geldiğimizde eklediğimiz proje ismine çift tıklandığında yeni bir pencerede servis ile ilgili özelliklerin bulunduğunu göreceksiniz.

Overview

Overview

Overview sekmesinde WSDL ile ilgili URL, alan adı, SOAP versiyonu gibi detaylar görülmektedir. Operations başlığının altında bulunan kısımda ise web servis içerisinde bulunan metotlar belirtilmiştir.

Service Endpoints

Service Endpoints

Service Endpoints sekmesinde Endpoint, username, password gibi alanlar bulunmaktadır. Endpoint web servisin diğer uygulamalar ile iletişim kurabileceği bir URL’dir. Bu URL kullanılarak iletişim sağlanır.

WSDL Content

WSDL Content

WSDL Content sekmesi web servis içeriği ve yapısı ile ilgili daha detaylı ve düzenli bilgiye ulaşabileceğimiz alandır. Örneğin Anonymous Complex Types klasörünün içinde web servisde bulunan metotların request ve response alanları gösterilmektedir. Bu alanlar XML yapısında bulunan taglar baz alınarak program tarafından oluşturulmaktadır.

WS-I Compliance

WS-I Compliance

WS-I Compliance sekmesinde WSDL dosyasının diğer uygulamalar birlikte çalışabilirliğindeki uyumun maksimum olmasından emin olmak amaçlı yapılan bir test bulunmaktadır. WSDL için test case oluşturma veya başka bir işlem öncesinde bu test yapılarak WSDL dosyasının uyumluluğu denetlenebilir. WSDL dosyasını projenize ekledikten sonra WS-I Compliance Sekmesinin altında bulunan “Create a WS-I report fort his interface” butonuna tıklayarak bu testi çalıştırabilirsiniz.

Create a WS-I report fort his interface

Requests

Proje kısmında metotlar alt alta eklenmiş şekilde görünmektedir. Bu yapıdan Add metodu içine tıklayarak açtığımızda Request1 adlı bir request görmekteyiz. Projeyi ilk oluşturma adımında WSDL dosyasını eklerken Create Request kutusunu işaretleyerek işleme başlamıştık. Bu işlemden dolayı metotlar içerisinde requestler otomatik olarak tanımlanmış halde gelmektedir.

Requests

Request1’ e tıkladığımızda bir pencere açılmaktadır. Bu pencerede sol tarafta request içeriği gözükmektedir. Bu kısımda toplama işlemi için iki adet integer değer alanı bulunmaktadır. Body tag’inin altında Add metodunun içinde tanımlı olan değer alanlarına iki adet integer veri girilerek yukarıda bulunan yeşil çalıştır butonuna bastığımızda, pencerenin sağ tarafında response sonucunun döndüğünü görmekteyiz. Response sonucu yine Body tag’i içerisinde AddResponse alanında AddResult ismi ile dönen integer bir değerdir.

Request 1

Test Suite Oluşturmak

Test suite oluşturmak için WSDL ismine sağ tıklayarak, Generate Test Suite seçeneğine tıklıyoruz. Bu seçenek bizim için hızlı bir şekilde TestSuite’leri oluşturacaktır.

Generate TestSuite Step-1

Bu işlem sonrası Generate TestSuite penceresi açılacaktır. Bu kısım projemizde bulunan tüm işlemler için TestCase’ler ile birlikte TestSuite’lerini oluşturacaktır. Style alanında iki seçenek bulunmaktadır. Bunlardan ilki “Single TestCase with one Request for each Operation ”dır. Bu seçenek işaretlendiğinde bulunan tüm işlemler için yalnızca bir adet test case oluşturup Add, Divide, Subtract ve Multiply metotlarında bulunan tüm requestleri bu test case içerisinde tanımlayacaktır.

Generate TestSuite Step-2

“One TestCase for each Operation” seçeneği ise her request için ayrı TestCase’ler oluşturuyor. Request Content alanında oluşturulacak olan Request’lerin içeriklerinin mevcut request kullanarak mı yoksa boş olarak mı oluşturulacağı seçilmektedir. İlk seçeneği seçersek eğer bir request içerisinde değişiklik yaptıysak mesela Add metodundaki servise değer gönderdik içerik kısmı değişmiş oldu. Yeni olarak oluşacak requestde şuan değiştirdiğimiz requestle aynı olacaktır. Eğer ikinci seçenek olan yeni requestler oluştur seçeneğini seçersek içerisinde veri girilmemiş boş requestler oluşturulacaktır. Operations bölümünde ise web servisde bulunan işlemlerden eklenmek veya çıkarılmak istenenler var ise ilgili seçimler yapılarak düzenlenebilir. OK butonuna tıklayarak işlemimize devam ediyoruz. Açılan pencerede isteğe bağlı olarak oluşturulacak olan TestSuite ismi değiştirilebilmektedir.

Generate TestSuite Step-3

TestSuite oluştuğunda sol tarafta bulunan panelde proje bölümüne eklenmektedir. Test Suite “One TestCase for each Operation” seçeneği ile oluşturulduğu için her işlem için birer tane TestCase oluştu. TestCase’ler içerisinde Test Steps kısmında ilgili olan Requestler eklendi.

CalculatorSoap TestSuite

Ana panelde açılan TestSuite penceresinde ise oluşturulan TestSuite çalıştırılmaktadır. Çalıştır tuşuna basıldığında TestCaseler default olarak sırayla çalıştırılacaktır.

CalculatorSoap TestSuite with TestCases

Çalıştır butonun olduğu kısımda en sağda bulunan sarı renkle işaretlenmiş olan butona tıklandığında TestCase’ler sırayla değil paralel olarak aynı anda çalıştırılacaktır. Sırayla çalıştırılması için paralel Çalıştır tuşunun solunda bulunan ok simgesi olan tuşa tıklayabilirsiniz.

Run TestCases

TestSuite çalıştırıldığında servis tarafında bir hata oluştuğunda TestCase’ler FAILED olacaktır. Herhangi bir sorun olmadığında FINISHED durumu görülecektir.

Finished CalculatorSoap TestSuite

TestSuite penceresinin alt kısmında bulunan TestSuite Log butonuna tıklayarak gerçekleştirilen test ile ilgili detaylı bilgiye ulaşabilirsiniz. Bu alanda çalıştırılan case’in ne zaman başladığı, ne zaman bittiği, ne kadar zamanda tamamlandığı bilgileri yer almaktadır.

Export This Log a File Button

Log kısmının üzerinde bulunan en sağdaki “Export This Log a File” tuşu ile bu logları kaydedebilirsiniz.

İşlemler sonucu gelen response detaylarını görüntülemek için TestCase’lerin altında bulunan Step’lere tıklayarak message viewer ile sonuçları görüntüleyebilirsiniz.

Açılan message viewer penceresinde ilgili case sonucu dönen veriyi XML, JSON, HTML ve RAW formatlarında görüntüleyebilirsiniz.

Message Viewer

Yukarıda açılan pencerede Add işleminden dönen sonuç görüntülenmektedir. Toplama işlemine integer iki değer gönderilmişti. Ve girilen değerler sonucu servisten dönen yanıt bu şekilde görüntülenmektedir.

Assertions Yönetimi

Assertions kullanım amacı, test stepler aracılığı ile alınan istekler veya gelen cevapların içeriklerini kontrol etmektir. Assertions TestSuite içerisinde TestCase’leri çalıştırırken kullanılabilen bir yapıdır. Çalışma yapısı gelen istek veya dönen yanıt içeriğini, oluşturulan assertion içeriği ile karşılaştırarak PASSED veya FAILED olma durumunu sağlamakta. Servise gönderilen bir requestin beklenen sonucunun gelip gelmediğini bu şekilde bir kontrol noktası mantığı ile kontrol edilebilir.

Assertions yapısında kendi içerisinde farklı etkenleri kontrol etmek için bulunan birden fazla çeşidi bulunmakta. Proje içerinde anlatırken kullanacağım Assertions çeşitleri Contains ve Not Contains.

  • Assertions eklemek için Test Suite> Test Case> Test Step > Test Request bölümüne gidilir.
  • Burada Test Request’e tıklayarak ilgili metodun detay sayfası açılır.
  • Pencerenin altı kısmında bulunan Assertions butonuna tıklanır.
Assertions

Assertions butonuna tıklandığında Add Assertions penceresinin açılması beklenmektedir. (Kısa bir test koşum adımı yazmış olduk 😊 test koşum adımları yazarken yine bu şekilde hatta daha detaylı ve anlaşılır şekilde adım adım yazmaktayız. )

Add Assertion

Bu pencerede sol tarafta Assertions bölümünde kullanılan Assertionların işlevlerine göre gruplandığını görmekteyiz. Kullanacak olduğum Assertionlar Property Content menüsü içeriğinde bulunmaktadır.

Contains Assertion

Property Content> Contains seçtikten sonra pencerenin alt kısmında bulunan ADD butonuna tıkladığımızda Assertion içeriğinde gerekli düzenlemelerin yapılması için Contains Assertion penceresi açılmakta.

Contains Assertion

Bu kısımda Content alanına gelmesi beklenen verinin bir kısmı veya tamamı eklenebilir. Bu kısımda ben AddResult tag ismini ekledim. Add işleminde servisten dönen işlem cevabı AddResult tag’i içinde yazılmakta. Burada bir işlem sonucu da girilebilirdi mesela gönderilen iki integer değerin toplama işlemi sonucunda gelmesi beklenen değer yazılabilir. Diyelim ki 5 ve 4 değerleri gönderilen bir toplama işleminde Assertion content alanına 9 eklediğimizde response kısmında bu değeri arayacak ve varsa TestCase başarılı olacaktır. Test sırasında gönderilen değer değişken olacağından AddResult tag ismini yazarak işlem gerçekleştiriliyor mu bunu kontrol ediyoruz. Eğer kontrol edilmesi gereken spesifik bir değer varsa, o değeri içeren bir Assertion’da eklenebilir. Diğer Assertion’ı eklemek için Add Assertion butonuna tıklayarak yine Contains Assertion sayfasının açılmasını sağlamaktayız.

Not Contains Assertion

Add Assertion sayfasında bulunan Property Content bölümünde Not Contains Asssertion’ı seçerek ilerliyoruz. Bu Assertion ise Contains Assertion’ı ile tam tersi işlemi yaparak servisten gelen istek veya cevapta olması istenmeyen veriyi aramakta ve bulamadığında TestCase başarılı olmaktadır. Bu alana “Bad Request” değerini giriyorum bu değer servisten dönen cevap içerisinde olmadığında TestCase başarılı olmakta.

Assertions

Assertions kısmında eklenen Assertionlar bu şekilde görünmektedir. Ekleme, düzenleme ve silme işlemleri yapılabilir. Eklenmiş olan iki assertion simgesinin yeşil olma nedeni işlemin başarılı olması. Servis tarafında herhangi bir hata alındığında hata kodu ve mesajı dönmektedir.

Add Metodu Assertion Kontrolü

Integer değeri yerine hatalı bir veri gönderilerek case çalıştırıldığında Contains assertion’ı hata verdi. Çünkü “AddResult” değerini gelen cevap içerisinde aradı ve bulamadığı için TestCase FAILED oldu. Not Contains Assertion’ı “Bad Request” değerine baktığı için herhangi bir hata vermedi. Assertions tarafında alınan hata TestSuite’de caseler çalıştırılırken ilgili TestCase FAILED olarak gözükecektir.

TestSuite

Assertions ile ilgili detaylı bilgiye linkten ulaşılabilir.

Proje’de WSDL Güncellemek (Update Definition)

Proje isminin altında bulunan servis ismine sağ tıklanarak çıkan menüde Update Definition seçeneği seçilerek veya F5 tuşu kısayolu ile WSDL güncelleme işlemi gerçekleştirilir. Update Definion kısmında WSDL dosyasında bir değişiklik yapıldığında veya yeni bir metot eklendiğinde, eklenen işlemlerin projeye dahil edilebilmesi için bir güncelleme özelliği bulunmaktadır.

Update Definition

İsteğe bağlı olarak tüm proje tekrar yeni bir şema ile oluşturulabilir veya yalnızca eklenen yeni metotların proje dahil edilmesi gerçekleştirilebilir.

Dökümantasyon Oluşturmak

WSDL’i bir döküman şekline dönüştürmek için Proje isminin altında bulunan servis ismine sağ tıklayarak açılan menüde Generate Documentation seçeneğine tıklanır.

Generate Documentation

Açılan Create Documentation penceresinde dosyanın oluşturulacağı konum seçilerek OK butonuna tıklanır. Proje dökümanı oluşturulmuş olur.

Create Documentation

Otomatik olarak program tarafından oluşturulan proje dökümanı HTML formatında bir belgedir. Servis içeriğinin düzenli ve okunabilirliği yüksek bir şekilde eklenmiş olduğu bir formata sahiptir. Bu belgede,

  • Service location,
  • Protocol,
  • Transport protocol,
  • Operations bilgileri bulunmaktadır.

Serviste yer alan işlemlerin (Add, Divide gibi) detayları ve kaynak kodları da düzenli bir yapı halinde bulunmaktadır.

WSDL Documentation

Genel olarak SOAP UI yapısını ve bir web servis testinin temel aşamalarını anlatmaya çalıştım. Umarım faydalı olmuştur.

Kaynak 1

Kaynak 2

Nasıl Yapılır? kategorisinde bulunan diğer içerikleri de okumanızı tavsiye ederiz!