Restsharp, Allure ve Log4Net framework kullanarak birkaç senaryo üzerinden API Test projesi oluşturdum. Test sonuclarının loglanması için log4net, monitoring edilmesi için de allure yapısını kullandım. Bu Proje Yazılmış olan API ların girilen parametrelere göre doğru çıktıyı verip vermediğinin kontrollerinin yapıldığı ve bunların yönetilmesini sağlayan monitoring ve logging yardımıyla çok amaçlı olarak isteğe göre değiştirilebilir bir projedir.
- C# (Proje de tam olarak istediğim yapıyı kurabilmem için bu dili tercih ettim);
- Nunit3(Test Caselerin yazılması ve çıktıların kontrollerinde kullandım);
- RestSharp (Case de yer alan API ye istek atılmak için kullandım);
- Newton.Json (Json ların serialization-deserialization dönüşüm işlemlerinde kullandım);
- Allure (Test Sonuclarının monitorize edilmesinde kullandım);
- Log4Net (Hata sonuclarının loglanmasında kullandım);
- Nunit-Console (Yazılmış olan test senaryolarını console üzerinden koşturup sonuçlarını takip etmek için kullandım);
Proje de alttaki yapıyı kullandım. Her başlığın ne için açıldığını ve ne zaman kullanıldığını altta açıklıyorum.
-
Base: Genel olarak kod içerisinde fazla kullanılacağını düşündüğüm kod yapılarının tekrarını önlemek için tek bir yerden oluşturup yönetimi kolaylaştırdım. Suan icerisinde 'RestHttpClient' ve 'BaseClass' isimli sınıflarimiz var.
- RestHttpClient: Yapılacak olan http isteklerini tek bir yerden yazıp yönetmek.
- BaseClass: Sistemi ayağa kaldıracak ve kapatacak ana kontrolcü gibi düşünülebilir. Caseler koşmadan önce BaseClass tan allure yapısı tetikleniyor. Testler koştuktan sonra da log yapısı tetikleniyor. Bu yapıyı kullanarak ilerde eklemeler olunca genel sistemde değişikler yapmayıp burdan kolaylıkla yapılmasını sağlayacağını düşündüğüm için ekledim.
-
Helpers: Sistemde birden fazla yerde kullanılacağını düşündüğüm metodları bu klasör altında topladım. Böylelikle kod tekrarını önleyip okunaklığı arttırdığını düşündüm. Küçük bir proje olduğu için şuan icerisinde Logger ve JsonConverter sınıfı var.
- Logger: Belirli bir path içerisine gönderilen mesajların eklenmesini sağlayan methodu içeriyor.
- JsonConverter: İçerisinde serialization-deserialization dönüşümlerini yapan methodlar bulunuyor.
-
Logs: Bu klasörün normalde burda olmaması gerekiyor. Sadece log ve allure çıktılarını gösterebilmek için ekledim. İstenilen bir klasörün path i verilerek log ve allure kayıtlarını istediğiniz path e kaydedebilirsiniz.
-
Models: API ye istek atarken bu isteklerin bir sınıf biçiminde olması gerekiyor. Genel olarak bu sınıfların ve bu sınıflar ile ilgili methodların yer aldığı klasördür. Bu klasörün içerisi projeye göre genişletilmelidir. Örneğin Test Suites altında Create, Update veya Search adında klasörler açıp her başlığa göre ilgili sınıfları ilgili başlık altında açmalıyız.
- SearchResponse: Senaryoya göre By Search yapısı kullanıldığı zaman dönen sonucların karşılığı olan sınıf yapısıdır. Search Response içerisinde dönen datalar içerisinde title a göre arama yapmamı sağlayan bir method da bulunuyor.
- SearchResponseById: Senaryoya göre By ID or Title search yapısı kullanıldığı zaman dönen sonucların karşılığı olan sınıf yapısıdır.
-
Test Suites: Test Caselerinin yer aldığı ve yönetildiği sınıftır. Bu klasörün içerisi projeye göre genişletilmelidir. Örneğin Test Suites altında Create, Update veya Search adında klasörler açıp caseleri anlamlı isimlendirmeler ile ayırmalıyız.
- SearchTestCases: Senaryoya göre içinde search test case lerinin bulunduğu sınıftır.
-
allureConfig.Template.json: Allure config ayarlarının bulunduğu dosyadır.
-
app.config: Proje de zaten default bulunuyor ama ben içerisine API url, API key ve allure log path gibi sabit olan değerleri ekleyerek gerektiği zaman da buradan okudum. Bu şekilde sürekli sabit olup proje çalıştığı sırada değişmeyecek olan değerleri bir yerde toplayarak gereksiz kod tekrarını önleyip kod okunaklığını ve yönetilebilirliğini arttırdım. Sürekli sabit olan değerleri bu bölüme ekleyerek devam edebiliriz.
-
Messages.resx: Proje genelinde case ler fail verdiği zaman gösterilecek olan hata mesajlarını tek bir yerden yazıp ilerde caseler çoğaldığı zaman geri dönüp düzeltilmesini kolaylaştıracağını düşündüm. Burda da örnek olarak 2 tane hata mesajını görebilirsiniz. ilk sutün da projede cağrılan ismi, 2. sütunda içeriğini ve son sütunda da açıklamasını görebilirsiniz.
-
İlk olarak projede Allure monitoring tool kullanıldığı için bilgisayarınızda allure yüklü olmaldır. Buradan indirebilirsiniz.
-
Allure çıktılarının kaydedileceği path i de kendinize göre ayarlamak için projede bulunan app.config dosyası içerisinden 'AllureLogsPath' key li değerin value sini kendi istediğiniz path ile değiştirin.
Not: Bu path içinde "allure-results" isimli bir klasör olması gerekiyor.
-
Log çıktılarının kaydedileceği path i de kendinize göre ayarlamak için yine projede bulunan app.config dosyası içerisinden log4net tag i içerisindeki file value yi kendinize göre ayarlayın.
-
(Opsiyonel) Projeyi açmadan console üzerinden çalıştırmak için nunit-console indirmeniz gerekiyor. Buradan indirebilirsiniz. Bunları yaptıktan sonra clean project ardından da rebuild yaptıktan sonra test caseleri koşturduğunuz zaman bir hata almamanız gerekiyor.
Allure yapısı caseler her tamamlandıktan sonra belirtilen path e kaydediliyor. Bunları görüntülemek için komut satırını açıp "allure serve [config dosyasında ayarladığınız path]\allure-results" girerseniz browserda açılan pencere üzerinde detaylı inceleme yapabilirsiniz. Örnek komut:
allure serve C:\Users\bilal\OneDrive\Masaüstü\TechTestAPI\TechTestAPI\Logs\AllureLogs\allure-results
Nunit console kullanarak projeyi çalıştırmadan komut satırından testleri koşturup sonuçları görmek isterseniz komut satırını açıp "[nunitconsole.exe path] [test projesinin dll pathi("bin\debug" içerisinde bulunur)] --params=allureCleanUpType=false" seklinde komut girerek testleri koşturabilirsiniz.
Örnek Komut:
C:\Users\bilal\Downloads\Compressed\NUnit.Console-3.11.1\bin\net35\nunit3-console.exe C:\Users\bilal\OneDrive\Masaüstü\TechTestAPI\TechTestAPI\bin\Debug\TechTestAPI.dll --params=allureCleanUpType=false
Son bölümdeki allureCleanUpType bölümünün sebebi de her koşma başlamadan önce eski allure loglarını silmek istediğiniz zaman true yapınca eski kayıtları silerek yeniden oluşturur. Bu parametreler isteğe göre eklenip çoğaltılabilir... Komut satırına girdikten sonra caseler koşmaya başlar ve tamamlandığı zaman yine komut satırı üzerinden size sonuçları gösterir. Daha detaylı bilgi almak isterseniz de komut satırını çalıştırdığınız konuma('C:\Users\UserName' olur genelde) 'TestResult.xml' isimli bir xml dosyası oluşturur. Buradan detaylı inceleyebilirsiniz.
-
Nunit console örnek ekran çıktıları
-
Log Yapısının örnek çıktıları
-
Allure Yapısının Örnek çıktıları
Yukarıdaki ekranlar dışında allure tool unun daha birçok özelliği bulunmaktadır. Detaylı bilgi almak buraya bakabilirsiniz.