Performans, yük testi araçlarını bir sürü farklı ürün temsil eder ve kullanılabilirlik, performans, özellik kümesi veya güvenilirlik açısından bir araç ile diğer bir araç arasında çok büyük farklılıklar olabilir.

Hem açık hem de kapalı kaynak birçok yük test aracı bulunmaktadır. Açık kaynak araçlar popülerlik kazandıkça, Keytorc’ta açık kaynak yazılımlar tercih edilmiştir, bu nedenle bu incelemede açık kaynak araçlara daha fazla yer vermenin yararlı olacağı düşünülerek hazırlanmıştır.

Ancak, gerçek şu ki bu araçların birçoğu ihtiyaçlarımız için uygun olmayabilir. Bazıları HTTP protokolü ile sınırlı. Bazıları ise yıllardır güncellenmedi. Çoğu parametre, korelasyon, assertion ve dağıtılmış test yetenekleri sağlayacak kadar esnek değil. Bugün çoğumuzun karşılaştığı zorluklar göz önüne alındığında, bu yazıda gözden geçireceğimiz aşağıdaki listede beş sıradışı seçeneği bulabilirsiniz.

  • Gatling
  • Locust
  • Tsung
  • Taurus
  • LoadImpact K6

Bu yazı, yük testi araçlarının iyi ve kötü yönleriyle göreceli takım performansını kapsayan ve bir dizi gözleme dayanan yorumlar içermektedir.

  1. Gatling

Gatling oldukça yetenekli bir yük testi aracıdır. Kullanım kolaylığı, bakım kolaylığı ve yüksek performans için tasarlanmıştır. Gatling, herhangi bir HTTP sunucusunu yük testi için tercih edilen bir araç haline getiren HTTP protokolünün desteğiyle birlikte gelir. Çekirdek motoru gerçekte protokol bağımsız olduğundan, olası diğer protokoller için de destek sunar. Örneğin, Gatling şu anda JMS (Java Message Service) desteğini de sağlıyor.

Gatling, ücretsiz ve açık kaynaklı performans test aracıdır. Gatling yalnızca test kaydediciyle sınırlı olan temel bir grafiksel kullanıcı arayüzüne sahiptir. Ancak, testler kolayca okunabilir ve yazılabilir bir etki alanına özgü dilde (DSL) geliştirilebilir.

Web uygulamaları için açık kaynak kodlu bir yükleme ve performans testi aracı olan Gatling, piyasaya sürülmeden önce uygulamalardaki darboğazları, hataları ve performans sorunlarını tanımlayarak pazara girme süresini kısaltmaya yardımcı olur.

Özellikler

  • HTTP senaryo kaydedici
  • Test geliştirme için anlamlı kendini açıklayan alanına özgü yapısal dil
  • Scala tabanlı
  • Asenkron engelleyici olmayan bir yaklaşım kullanarak daha yüksek yük üretimi
  • HTTP(S) protokollerinin tam desteği ve JDBC (Java Database Connectivity) ve JMS yük testi için de kullanılabilir
  • Veriye dayalı testler için çoklu giriş kaynakları
  • Güçlü ve esnek doğrulama ve iddia(assertion) sistemi
  • Kapsamlı ve bilgilendirici HTML formatında yük raporları

Kodlama

Gatling, Scala betiklerine dayanmaktadır. Temelde Dev-Ops’u (çok görevli geliştiricileri) hedef alır, bu yüzden kod yazmak gerekir.

Sonuçlar

Gatling’in raporları basit ama güçlüdür. Önemli ölçümleri ve grafikleri sunar. Raporlar, testin sonunda otomatik olarak oluşturulur.

  1. Locust

Locust, sisteminizin performansını milyonlarca simüle edilmiş eş zamanlı kullanıcı ile test etmek için Python dili kullanarak kullanıcı davranışını tanımlamanızı sağlayan bir açık kaynak yük test aracıdır.

Locust, performans komut dosyalarını saf Python dilinde yazmayı sağlayan, Python tabanlı açık kaynak kodlu bir yük test aracıdır. Bu çerçevenin temel benzersizliği geliştiriciler tarafından ve geliştiriciler için geliştirilmesidir. Locust’un asıl hedefleri web uygulamaları ve web tabanlı hizmetlerdir, ancak Python komut dosyası oluşturma konusunda rahatsanız neredeyse istediğiniz her şeyi test edebilirsiniz.

Buna ek olarak, Locust’un omurgası tamamen bu işlem için, olaylar yaklaşımı ve gevent eş yordamına dayanmaktadır. Kullanıcıları simüle etmek için tamamen farklı bir yol olduğunu belirtmekte fayda var. Bu işlem, sıradan bir dizüstü bilgisayarda bile binlerce kullanıcıyı taklit etmenize ve birçok adımı olan çok karmaşık senaryoları bile çalıştırmanıza olanak tanır. Böylece bir sistemin kaç tane eş zamanlı kullanıcı ile başa çıkabileceğini bulmanıza yardımcı olur.

“Yük jeneratörleri (Load Generators)” terimine aşina iseniz, Locust bunun yerine “Swarm” terimini kullanır. Böylece, web sitenize yük yüklemek için bir çekirge sürüsünü yönetebilirsiniz.

Ayrıca, bir web kullanıcı arayüzünden “Swarm” işlemini gerçek zamanlı olarak izlemenizi sağlar.

Özellikler

  • Python kullanarak test senaryolarını yaratma yeteneği
  • Çapraz platform
  • Ölçeklenebilirlik, birden fazla temsilci ile birlikte dağıtılan yüzlerce kullanıcı ile çalışır.
  • Olaylara dayalı uygulama nedeniyle normal makinelerde yüksek ölçeklenebilirlik
  • Sürüm kontrolü ile kullanım için kullanışlı olan kod tabanlı komut uygulamaları (Git, SVN)
  • Web tabanlı kullanıcı arayüzü ile takip
  • HTTP / HTTPS protokolleri için mükemmel destek
  • Python tabanlı özel örnekleyici uygulamasıyla hemen hemen her şeyi test edebilme
  • Genişletilebilir

Kodlama

Locust’un yazımı sade bir Python betiğinden farklı değildir.

Sonuçlar

Raporlama sistemi çok basittir. Sonuçları canlı takip edebilir ve CSV olarak indirebilirsiniz.

  1. Tsung

Tsung (önceden IDX-Tsunami olarak bilinir) çoklu protokol dağıtımlı yük testi aracıdır. IP tabanlı istemci ve sunucu uygulamalarının ölçeklenebilirliğini ve performansını test etmek için kullanılabilir.

Geçmişte sadece HTTP protokolü ile yük testi yapılabilirken bugün web soketleri, kimlik doğrulama sistemleri ve veri tabanları gibi modern protokollerin desteğiyle tamamen işlevsel bir performans testi çözümüdür.

(Desteklenen protokoller:  HTTP, WebDAV, SOAP, PostgreSQL MySQL LDAP, XMPP ve Jabber, BOSH, MQTT ve AMQP, TCP, UDP, WebSocket, (istemci sertifikası olmadan da) TSL ve SSL, IPv4 ve IPv6 desteklenir).

Erlang’da yazılmıştır, çoklu iş parçacıklı uygulamalar için yüksek performanslı bir dildir.

Özellikler

  • Bağımsız proxy kaydedici komutları doğrudan web tarayıcısı ile kaydeder
  • Yük, bir istemci bilgisayar kümesinde dağıtılabilir
  • Birden çok protokol desteği
  • Birden fazla IP adresi, “İşletim Sistemi IP Aliasing” kullanılarak tek bir makineden dağıtılabilir
  • Uzaktaki sunucularda SNMP, Munin veya Erlang temsilcileri ile işletim sistemi izleme (CPU, bellek ve ağ trafiği)
  • Dahili XML yapılandırma sistemi
  • Testler sırasında gerçek zamanlı olarak istatistikleri görüntülemek için web gösterge paneli (yanıt süreleri ölçümü, sunucu CPU vb. .)
  • Komut satırı arayüzü.
  • Yük sırasında toplanıp görselleştirilebilen, kolay okunabilen gömülü HTML raporlar
  • Veriye dayalı test için harici veri kaynakları

Kodlama

Tsung betikleri XML formatında yazılır. Betiği anlamak ve değiştirmek oldukça kolaydır.

Sonuçlar

Sunulan rapor metrikleri anlamlıdır. Raporlama verimli ve doğrudan konu ile ilgilidir.

  1. Taurus

Taurus tek başına bir yük test aracı değildir. Kod komut dosyasıyla ilişkilendirilmiş bir komut satırı aracıdır. Mevcut açık kaynaklı yük test araçlarına otomasyon dostu bir çerçeve sunar. Otomasyona uygun yapısı ile performans ve fonksiyonel testlerin karmaşıklığını gizler. Taurus, yük test araçlarının üstünde bir soyutlama katmanıdır. Kaputun altında, temel motor olarak hemen hemen her şeyi çalıştırabilir.

JMeter, Gatling, Locust, Grinder ve Selenium WebDriver’ı temel araç olarak kullanır. Apache 2.0 Lisansı altında ücretsiz ve açık kaynaklıdır.

Taurus testleri YAML’da yazarak tam kapsamlı bir betiği yaklaşık on satırlık bir metinle tanımlayabilirsiniz, bu da ekibinize bir YAML veya JSON dosyasındaki testlerini açıklama olanağı sağlar.

YAML, basit bir metin dosyasında testi tanımlamanıza olanak sağlayan, okunabilir bir yaklaşımdır. Böylece büyük, ağır bir özel kayıt ve komut dosyası aracına gerek kalmaz.

Özellikler

  • Birden fazla test aracı için otomasyon sistemi (JMeter, Gatling, Selenium, Locust ve daha fazlası)
  • Ekibinizin daha fazla üyesinin performans testlerine katkıda bulunmasını kolaylaştırır
  • Testler çok daha okunaklı ve kod incelemeleri kolaydır
  • CI / CD boru hattınıza performans testini çok daha verimli bir şekilde entegre olur
  • Performans testlerinin oluşturulması, çalıştırılması ve analizi kolaydır
  • Kontrol dostu ve birleşik DSL kullanarak sıfırdan yeni testler yapılabilir
  • Komut satırı arayüzüne sahip
  • Yüksek yapılandırılabilir sistem

Kodlama

Taurus betikleri YAML formatındadır.

Sonuçlar

Test sırasında, cpu, disk veya ağ kullanımı gibi bilgiler içeren bir terminal konsolu görüntüler. Taurus altındaki test araçlarını soyutlamak için iyi bir iş çıkarır. YML’yi hedef motor komut dosyası biçimine dönüştürmekten metrikleri toplamaya kadar.

Test tamamlandığında, sonuçlar konsol çıktısında konumu verilen bir klasörde arşivlenir. Klasör, aşağıdakiler dahil olmak üzere, ilgili tüm sonuçları içerir:

JMeter günlükleri, JMeter JMX projesi, YML’ler, Json, Taurus günlükleri ve daha fazlası. Toplanan kayıtlar performans testini yapmak için kullanılan test aracına bağlıdır.

Özet olarak Taurus bağımsız bir yük test aracı değildir. Yük test aracını sürmek için bir üst katmandır.

  1. LoadImpact K6

K6, sade bir komut dosyası oluşturma uygulama programlama arayüzüdür, dağıtılmış bulutta yürütme ve REST API üzerinden düzenleme sağlar. Back-End performansı test etmek için geliştirici merkezli, açık kaynaklı bir yük test aracıdır. Ayrıca Go ve JavaScript ile oluşturulmuş modern bir yük test aracıdır, böylece çoğu geliştiricinin iş akışına kolayca entegre olur.

Kalite güvence ve performans mühendisliği ekipleri, K6 test komut dosyası kaydedicisi gibi araçlarla gerçekçi kullanıcı testi senaryoları oluşturabilir. K6, bu altyapıyı kendiniz yönetmenize gerek kalmadan dağıtılmış bir bulut altyapısında büyük yük testleri yapmanızı sağlar. 10 farklı global konumdan yük oluşturulabilir.

K6 otomasyon için üretilmiştir ve sürekli entegrasyon boru hattınıza dahil olur. Jenkins, Circle CI, Team City ve GitLab gibi sürekli entegrasyon araçlarıyla entegrasyon kurulabilir.

Özellikleri

  • JavaScript betik ve kapsamlı etki alanına özgü dil
  • Go Lang ile yazılmış yüksek performanslı motor
  • Gelişmiş assertion ve doğrulamalar
  • HTTP, HTTPS ve WebSocket protokolleri için destek
  • Temiz komut dosyası uygulama programlama arayüzü
  • Dağıtılmış ve bulutta çalıştırma olanağı
  • REST API düzenleme yeteneği

Kodlama

LoadImpact K6 geliştiricileri Javascript öğrenmenin daha kolay olduğunu düşünmüş. Bu sebeple betikler K6’da Javascript dilinde yazılır.

K6, Docker container olarak çalışır. K6 Docker görüntüsü bu amaç için yapılmıştır.

Aşağıdaki görselde komut betiği ve sonuç örneği canlı olarak kaydedilmiştir.:

Sonuçlar

Bir önceki görselde olduğu gibi K6’da sonuçlar doğrudan konsolun içine yazdırılır. Sonuçlar ayrıca Json formatında da alınabilir.

Projeniz için stres ve yük testi yaparken doğru test aracının seçiminde iki temel soru cevaplandırılmalıdır. Bunlar; test etmeniz gerekenler ile ekibinizin sahip olduğu yeteneklerin neler olduğudur.

Bu nedenle, yukarıda incelemeleri yer alan performans test araçlarının karakteristik özellikleri, test yöntemleri, yazım dilleri ve son ürünlerinden bahsedilirken hangi aracı kullanacağınızı belirlemede yardımcı olacak ve karşılaştırma yapılabilecek bir biçimde verilmiştir. Siz de ortaya çıkabilecek darboğazları ve hataları belirlemede kullanmak üzere bu sıradışı performans test araçlarından projelerinizde faydalanabilirsiniz.

Berk Toprakçı

Keytorc