21 Haziran 2018 Perşembe

Web Servis Test Araçları


 Web servisleri günümüzde yaygın olarak kullanılan bir yöntem olup platformdan bağımsız olarak farklı platformda çalışan uygulamaların bir birleri ile veri alış verişi yapmalarına olanak sağlayan geliştiriciler için önemli bir yapıdır. Örnek olarak bir E-Ticaret sitesindeki bir müşterinin ürünlerini bir masaüstü uygulamasında göstermek için Web sitesi bir web servis sunması halinde masaüstü uygulamasının yazıldığı kısımda kolay bir şekilde gerekli request parametreleri gönderilerek bu sağlanabilmektedir.



Bu kadar önemli olan web servislerinin test işlemleride ayrı bir işlem olarak ele alınmaktadır.
Özellikle web servisi sunan platformların gerek güvenlik gereksede yapılan servislerinin  gerekli isterleri karşılayıp karşılamadığının test edilmesi gerekmektedir.
Web servislerinden REST ve SOAP olmak üzere iki farklı web servis türü yaygın olarak kullanılmaktadır.
SOAP (Simple Object Access Protocol) uygulamalar ile web servislerin bilgi aktarımını sağlayan XML tabanlı bir protokoldür. Yani web servise giden bilgi XML olarak gönderilir, web servis bu bilgiyi yorumlar ve sonucunu XML olarak geri döndürür. SOAP tabanlı bir web servisin, gönderilen XML verisini nasıl yorumlayacağının tanımlanması gerekir. Bu web servis tanımlaması WSDL (Web Services Description Language) standardı ile yapılır.
REST mimarisinde ise işlemler resource kavramıyla yapılır. Resource URI ile tanımlanır ve bir metod tanımlaması veya bir değişken olabilir. Yani REST’te SOAP’ta olduğu gibi XML yardımıyla metodlar çağırılmaz bunun yerine o metodu çağıracak URIler ile web servise HTTP protokolüyle istek yapılır. Böylece REST için WSDL gibi bir tanımlama diline ihtiyaç kalmaz işlemler tamamen HTTP metodları üzerinden yapılır. Örneğin, bir web servisin metodunu SOAP ile “getProductName” şeklinde çağırırken REST ile “/products/name/1″ URI’si ile çağırabiliriz. Ayrıca RESTin döndürdüğü veri tipinin de XML olması zorunlu değildir JSON, XML, TXT, HTML gibi istenen veri türünde değer döndürülebilir.


POSTMAN
Postman, Rest web servislerinin test edilmesini sağlayan basit ve kolay kullanımı olan bir test aracıdır.
Arayüz kısmından test edilecek rest servise GET,POST,PUT,DELETE ve bunlar gibi diğer kullanılan veri gönderme türlerini desteklemektedir. Aynı zamanda test kodlarının yazılabilmesini sağlayan bir de komut istemcisi vardır. Bu kısımda yazılan test kodları çalıştırılıp geriye dönen sonuçlar analiz edilmesini sağlamaktadır. Aynı zamanda da raporlama yapabilen kullanışlı bir tooldur.

Örnek Test Senaryosu
Web Servis Url : http://jsonplaceholder.typicode.com/posts/



Authorization Sekmesi
Kullanılacak Api eğer bir kimlik doğrulaması istiyorsa bu kısımda istenen bir doğrulama protokolü seçilebilir ve gerekli kimlik doğrulama bilgileri girilerek doğrulama işlemi yapılabilir.



Header Sekmesi
Bu kısımdan request bilgiyle gönderilecek header bilgileri gönderilebiliyor. Aşağıdaki örnekte içerik tipinin JSON olması gerektiği belirtilmiştir.




Tests Sekmesi
Postman ın kendi test scriptlerini bu kısımdaki komut alanına yazılarak bir çok test yapılabilir. Bunların örnekleri ileriki aşamalarda gösterilecektir.

Rest Api Çıktısı
Body sekmesinden test edilen url sayfasından gelen sonuçları bu kısımda görebiliriz. Aynı zamanda JSON, XML, HTML, Text Ve Auto olmak üzere farklı tiplerde sonuçları ekranda gösterebiliriz.




Yapılan örnekte GET metodu ile işlemler yapılmış olup apinin sağladığı özelliklere göre POST, DELETE, PUT vb bir çok işlem Postman ile gerçekleştirilebilir.


JSON Çıktısı


Tests Sekmesi  Komut Terminalinin Kullanımı
Aiağıdaki terminal kısmında Postman için yazılmış test script kodları bulunmaktadır. Bu ve bunlar gibi daha fazla script komutunu Postman ın kendi dökümantasyonlarında örnek kullanımları mevcuttur[1].









Test Scriptlerinin Çalıştırılması
Yazılan test scriptleri çalıştırıldığında Test Result sekmesinden aşağıdaki gibi sonuçları alabiliriz. Aşağıdaki örnekte yazılan 5 test scriptinden 3 ü başarılı olmuş 2 tanesi ise başarısızlıkla sonuçlanmıştır.

Postman SOAP WSDL Testi
Postman diğer bir web servis türü olan ve yaygın olarak kullanılan SOAP ı WSDL(Web Services Description Language) adreslerini de desteklemektedir. SOAP web servislerinin uzantısı aşağıdaki örnekte görüldüğü gibi asmx uzantılıdır.





WSDL Sonuçları


SoapUI
Geliştiriciler için free open source bir test aracıdır. Aynı zamanda Professional sürümüde mevcuttur. Professional sürümü free versiyona göre daha fazla test özelliği bulunmaktadır. Ancak geliştiriciler için free versiyonuda kullanım olarak bir çok özelliği karşılamaktadır.
Rest Ve Soap web servislerinin ayrı ayrı test edilmesi SoapUI ile mümkündür. Her biri için ayrı ayrı test projeleri oluşturup sonuçları analiz edebiliriz.


SoapUI Menü Araçları
Menü araçlarından SOAP için ve REST API için ayrı ayrı projeler oluşturup ilgili web servislerinin testleri ve çıktıları yapılabilir.





1.      Rest Test Projesi Oluşturma
Programı kurup çalıştırdıktan sonra top menü kısmından REST butonuna tıklayarak yeni bir rest projesi oluşturuyoruz.

Ekrandaki URI kısmına web servisimizin adresini yazıyoruz bu adres içinde alacağı parametreler varsa onlarıda GET metodu yapısına uygun şekilde ekliyoruz.
Ok butonuna bastıktan sonra aşağıdaki ekranda url adresini ve parametrelerini görebiliriz. Kırmızı ile işaretlenen kutucuk içindeki çalıştırma butonuna tıklayarak test işlemini başlatıyoruz.
Test Url : http://jsonplaceholder.typicode.com
Parametre eklenerekte sadece istenen veriler gösterilebilir.
Rest servisin test sonuçlarını aynı ekranda görüldüğü üzere farklı veri tiplerinde ekranda görebiliriz. Sonuçların gösterildiği yerdeki Raw sekmesinden request isteğinin header kısmındaki verileride görebiliriz.

1.1 SoapUI Load Test (Yükleme Testi)
Programın en önemli diğer bir özelliği web servisleri üzerinde yüklemem testi de yapabilmesidir. Önceki örnekte kullandığımız panelde aşağıdaki ekran görüntüsüne ait kare içine alınmış kırmızı alandan yükleme testi oluşturup bu testin yapılması içinde bir adet locasyon seçilmesi gerekmektedir. Bu şekilde belirlenen locasyonun ip adresinden web servisimize istek giderek web servisimize yükleme testi uygulanmaktadır.


Yükleme testi esnasında test aşamalarını ve süresini aşağıdaki çıkan ekrandan takip edilebilmektedir.

Bu ekran dışında test bittiğinde sonuçların raporlandığı ekranda mevcut olup bu ekran yükleme testini yaptığımızda seçtiğimiz locasyon ekranı ile aynı kısımdadır.








2.      Soap WSDL Örneği
Aşağıdaki gibi SOAP api url adresini girdikten sonra sol kısımdaki proje dosyalarının olduğu bölümde otomatik olarak url adresinin desteklediği metodlar gelmektedir. Burada GetWeather ve GetCitiesByCountry olmak üzere iki adet metod geldi. Bunlardan örnek olması için GetCitiesByCountry adlı item ın üzerine çift tıklıyoruz.

Aşağıdaki ekran açıldıktan sonra görüldüğü gibi otomatik olarak bir xml requesti geldi. Xml requestinin içindeki CountryName adlı tagın içine Turkey olarak bir ülke ismi girildi.


Soap Xml Requesti Test Örneği






Requesti çalıştırdığımızda aşağıdaki gibi sonuçları alıyoruz.

SONUÇ
POSTMAN ve SoapUI olmak üzere 2 adet test aracı incelenmiş olup genel anlamda her iki tool da benzer şekilde web servislerine belirlenen istek türlerine göre sorgulama yapıp bizlere sonuçları geri getirmektedir. Ancak toollar arasında bazı farklılar vardır. Bunlardan ilki POSTMAN kendi test yazım kuralları çerçevesinde test scripti yazma imkanı vermektedir[1].
SoapUI test aracı ise test scripti yazılmıyor ancak POSTMAN dan farklı olarak belirlenen web servislerine Load Test i ve Security Test i yapabilmektedir. 




HttpMaster Express
Ücretsiz bir web servis test aracı olup. Basit anlamda diğer web servis test araçlarının yaptığı genel işlevler olan  HTTP metodlarıyla request gönderip gelen sonuçları çıktı olarak listeletebilmektedir. Request arayüzü aşağıdaki gibi olup url adresi girilerek sonuçlar aşağıdaki sekmeden gösterilmektedir. Aynı zamanda request isteğinden gelen Header bilgilerinide görebiliriz.

General Sekmesi
Bu kısımda web servisine request isteği yapıldıktan sonra sayfanın geriye döndürdüğü HTTP Status Kodu ve yapılan HTTP istek türü gibi temel bilgiler bu kısımda görülmektedir.




Headers Sekmesi
Bu sekmeden web servisin Header kısmındaki bilgileri görebiliriz. Bu kısımda sayfanın içerik tipinden, bağlantı türüne kadar tüm bilgileri görebiliriz.
Cookies
Request isteği gönderilirken bazı web servisleri bilgisayarda cookie bırakabilir. Genellikle bu cookie lerde web servisin geçici olarak kullandığı key value bilgileri içerebilir.








Response Body & Response View
Bu sekmelerden web servisinden gelen JSON, XML veya buna benzer veri formatlarında sonuçlar gösterilmektedir. Response Body  de çıktının ham hali gösterilirken Response Viewer de veri formatına uygun bir yapıda renkli çıktı olarak sonuçlar gösterilmektedir.

Response Viewer








HttpMaster aynı zamanda toplu olarak birden fazla requesti toplu olarak çalıştırılmasına olanak sağlamaktadır. Arayüz kısmından girilen request istekleri liste halinde karşımıza çıkmaktadır bu kısımdan istenirse tek tek istenirse toplu olarak hepsi çalıştırılabilir.








Rest Assured
REST hizmetini test etmeyi kolaylaştıran açık kaynaklı bir Java Etki Alanına özgü dil (Domain-specific language - DSL) dilidir.
Rest assured ile web servislerini yapmak için java editörüne ihtiyacımız vardır. Bunedenle Netbeans, Eclipse gibi bir editör kullanılabilir. Bilgisayarda javanın da yüklü olması gerekmektedir. Bunların hepsi tamamlandıktan sonra java da yeni bir maven projesi oluşturup gerekli dependency leri eklememiz gerekiyor. Bunu rest assured için verilen dökümantasyonlardan ilgili kütüphaneleri entegre edebiliriz[4].

Dependency Entegrasyonu
Maven projesine ilgili kütüphaneler eklendikten sonra bazı temel test işlemleri yapmak için bir adet java class ı oluşturup rest assured ın dökümantasyonlarından faydalanarak gerekli kodlamar aşağıdaki gibi yapılmış ve sonuçları gösterilmiştir.

1-      Rest Api Header Kısmının Status Kodları İle Alınması

Aşağıda yazılan kod ile get parametresinin içine gönderdiğimiz url adresindeki web servisinden gelen 200 kodlu yani başarılı olması halinde gelen header bilgilerini ve json formatındaki response kısmını alabiliriz.

Header Bilgilerinin Alındıktan Sonraki Görüntüsü ;

Json Çıktısı Ve Header Bilgileri
2-      Authentication Bilgileri İle Kimlik Doğrulama Yapıp Rest Api Testi
Bu kısımda yapacağımız işlem ise bilindiği gibi bazı web servisleri güvenlik veya başka nedenlerden dolayı kimlik doğrulama yapıldıktan sonra istenen işlemlerin yapılmasına izin vermektedir.
Bu tarz kimlik doğrulama içeren web servisleri içinde Rest Assured bizlere kolaylık sunmaktadır. Yazılan tek satır kod ile basit bir şekilde web servise kimlik doğrulaması yapılıp işlemler yapılabilir.

Rest Assured Authentication Bilgileri İle Kimlik Doğrulama


3-      Response Body de Sadece İstenilen Kısmın Alınması
Web servisine yapılan istek sonucunda eğer doğru bir şekilde istek gönderilmiş ise web servisine bizlere json veya xml formatı gibi formalarda geriye bilgi veren sonuçlar gelmektedir. Bu sonuçların içinden sadece belli bir etiketin taşıdığı value kısmını almak isteyebilir. Örneğin aşağıda gösterilen kod kısmıda ilgili url adresin bizlere userId, id, title ve body etiketlerinden oluşan bir json çıktısı üretmektedir. Bu json çıktısından sadece body etiketinin taşıdığı değeri elde etmek istediğinizde Rest Assured bunun için bir kolaylık sunmaktadır. Aşağıdaki örnek kod ile istenen yeri alabiliriz.

Rest Assured İle Belirli Etiket Değerlerini Almak
           
Ekran Çıktısı
           
Body Etiketinin Değerinin Alınması
4-      Http Config Ayarlarının Yapılması
Özel durumlar için HttpClient nesnesi override edilerek tekrardan konfigüre edilebilir.
Bunun için Rest Assured yine kendi içinde basitleştirilmiş bir fonksiyonu bulunmaktadır. Bu şekilde HttpConfig ayarı istenildiği şekilde yapılabilir.

Rest Assued ın kendi dökümantasyonlarında bir çok farklı işlevi yerine getiren fonksiyonlar ve bunların örnek kullanımları mevcut olup bu makalede sadece bazı önemli özellikler ele alınmaya çalışıldı. Daha fazla örnek ve işlevsel fonksiyonlar için makalenin kaynak kısmında yaplaşılan linkten detaylı bilgi alınabilir [4].

RestSharp #
RestSharp .NET için geliştirilmiş bir rest api test aracıdır. Bu aracın diğer araçlardan farkı olarak kolay yüklenebilir olması ve .NET platformuna özgü olmasıdır. NuGet paket yöneticisi yardımı ile basit bir şekilde Visual Studio programının Package Manager konsolunda yüklenebilir [5]. Aynı zamanda isteyenler için Github ortamındaki kaynak kodlarını alıp projelerine dahil ederekte bu yapıyı kullanmaları mümkündür [6]. Aynı zamanda RestSharp kendi Github adresinde nasıl kullanılacağına ilişkin basit anlaşılır bir döküman paylaşmıştır.
RestSharp ile .NET in kod kısmında test komutlarını yazıp normal bir şekilde console veya istenirse .NET ortamında geliştirilen programın arayüz kısmında test sonuçları gösterilebilir.

            Genel Özellikleri
  • .NET 4.5.2 and .NET Standard 2.0 Versiyonlarında Sorunsuz Çalışır.
  • NuGET kullanımı ile kolay kurulum imkanı
  • Otomatik XML and JSON çıktısı
  • ISerializer ve IDeserializer vasıtasıyla özel seri hale getirme ve deserialization'ları destekler
  • Bulanık Eleman Adı Eşleştirme ('product_id' in XML/JSON will match C# property named 'ProductId')
  • Otomatik İçerik Tip Dönüştürücüsü
  • GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, COPY Metodlarını Destekleme
  • Standart Dışı HTTP metodlarını Destekleme
  • OAuth 1, OAuth 2, Basic, NTLM – Kimlik Doğrulama Protokollerini Destekleme
  • Dosya Yükleme Özelliği İle Rest API de Dosya İşlemleri Gerçekleştirme - Multi-part form/file







NuGet Komutu
NuGet Komutu
RestSharp Kurulumu
Package Manager İle Kurulumu
Kullanımı
Bu senaryomuzda daha önceki toollarda test ettiğimiz api üzerinden GET metodu yardımı ile request gönderip geriye gelen response ları ekranda gösterimini yapacağız.
.NET Visual Studio ortamında paket yöneticisi ile RestSharp ı kurduktan sonra RestSharp ı using namespace ile komut sayfamıza çağırıp sayfaya include ediyoruz.
RestSharp ın Import Edilmesi
Sonrasında ise kodlarımızı yazıyoruz. Kodları yazarken kullanımlarına bakmak için github adresindeki ana sayfasından bakılabilir.
GET Metodu İle Request Oluşturulması Ve Response Çıktısını Alma
Yukarıda ASP.NET MVC modeli kullanıldığı için content değişkenindeki response değerlerini ViewBag komutu ile ilgili Action metodunun view sayfasına göndermekteyiz.
Response Çıktısı
Kodlarımızı çalıştırıdığımız zaman aşağıdaki resimdeki gibi sonuçları ekranda gösterilmiştir.
Response Çıktısı
Response çıktısının diğer özellikleri de yine alınabilir. Bunun için response adlı değişkenden sonra alınacak api den gelen header, content type veya status code gibi bilgileri de elde etmek mümkündür.

Response Metodu Özellikleri

Status Code un Alınması
RestSharp ile test edilecek api eğer bir kimlik doğrulama içeriyor ise bunun içinde bir metod yapısı mevcut. Metodun içine girilecek kullanıcı adı ve şifre parametreleri ile authentication işlemini gerçekleştirmek mümkündür.

client.Authenticator = new HttpBasicAuthenticator(username, password);

Rest api de Header a bilgi eklemek istenebilir gösterilecek content type veya buna benzer başka parametreler yada api nin dosya yükleme işlemi yapan bir metodu test edilecek bunun için örnek bir dosya yüklenmesi gerekir yine bunlar içinde basit olarak kullanımları aşağıda gösterilmiştir.

RestSharp İle Header Ve File Upload Kullanımı

GENEL SONUÇLAR
Bu makalede toplamda 5 adet web servis test araçları incelenmiştir. Farklı senaryolar üzerinde test işlemleri yapılan bu araçların her biri genel olarak web servislerinden gelen istekleri raporlama ve sonuçları gösterme işlevlerini ortak olarak yapmaktadır.
Ancak kullanıldıkları platformlar ve kurulum şekilleri farklılık gösterdiği gibi belirli alanlar için sadece kullanımı mevcut olan araçlarda mevcuttur. Bunların herbir özelliğini ve kurulum yapılma farklılıkları aşağıdaki tabloda özet olarak ele alınmıştır.

Test Aracı
Özellikleri
Platform/Kurulum





Postman
·         Hem otomatik hem de keşif amaçlı testler için kullanılabilir
·         Swagger ve RAML biçimleri için destek gibi bir grup entegrasyona sahiptir    
·         Çalıştırma, Test, Belge ve İzleme Özelliklerine Sahip
·         Yeni bir dil öğrenmeye gerek duymaz
·         Rest Ve Soap Desteği
·         Tüm HTTP Metodlarını Destekler
·         Mac, Windows, Linux ve Chrome
·         Web sitesi üzerinden uygulaması indirilerek veya chrome eklentisi yardımıyla kurulabilir.




SoapUI
·         Ücretsiz ve Ücretli Pro sürümleri bulunmaktadır
·         Rest Ve Soap Api Türleri İçin Kullanılabilir
·         Tüm HTTP Metodlarını Destekler
·         Load Ve Security Testing İşlemlerini Yapabilme
·         Web sitesi üzerinden SoapUI kurulum dosyası indirilerek windows ortamında kurulumu yapılabilir.


HTTP Master Express
·         RESTfull Web Servislerini Test Etmek İçin Kullanılır
·         Toplu Requestleri Çalıştırabilir
·         Parametre Özellikleri İle Request İsteklerini Dinamikleştirmeyi Sağlar
·         Windows platformlarında çalışmakta ve .NET Framework 4.5 Sistem Gereksinimi İstemektedir.
·         Web Sitesi Üzerinden Ücretli Veya Ücretsiz Sürümleri Kullanılabilir.



Rest-Assured
·         Java Projelerinde Kullanılan Açık Kayak Kodlu Bir Kütüphanedir
·         REST Hizmetini Javada Yazılımcılar İçin Test Etmeyi Kolaylaştırır.
·         HTTP Metodlarının Tümünü Destekler
·         Kolay Kullanım Esnekliği Sunar
·         Java Yazılan Tüm Geliştirme Ortamlarına Entegre Edilebilir
·         Java Maven Projesi Oluşturularak Dependency İle Projeye Entegre Edilebilir.





RestSharp #
·         Rest İsteklerini Test Etmek İçin Kullanılır
·         .NET Platformlarında Kullanılır Ancak Mobil Platformlar İçinde Seçenekleri Mevcuttur
·         Nuget Yapısı Sayesinde Paket Yöneticisinden .NET Projesine Kolaylıkla Entegre Edilebilir.
·         Supports .NET 3.5+, Silverlight 5, Windows Phone 8, Mono, MonoTouch, Mono for Android
·         Visual Studio Paket Yöneticisi Konsoluna Nuget Sitesinden Alınan Komut İle Projeye Eklenebilir.

Kaynaklar


Öne Çıkan Yayın

NodeJS İle Basit Chat Uygulaması

Merhaba arkadaşlar bu yazımda sizelere nodejs ile genel olarak yapılan chat uygulamasından bahsedeceğim. NodeJs hakkında zaten internette fa...