Locust ile API Yük Testi

Locust ile API Yük Testi

Locust ile API Yük Testi: Giriş

Muhtemelen daha önce bu durumda bulundunuz: bir şeyler yapan bir kod yazıyorsunuz, örneğin bir uç nokta. Uç noktanızı Postman veya Insomnia kullanarak test ediyorsunuz ve her şey yolunda gidiyor. Uç noktayı, daha sonra tüketen istemci tarafı geliştiriciye iletirsiniz. API ve uygulamayı dağıtır. Ancak daha sonra, kullanıcılar uygulamayı kullandığında API başarısız olur.

Bu, bir işletme için maliyetli olması bir yana, içinde bulunulması çok can sıkıcı bir durum olabilir. Yazılım geliştiricilerin, beklendiği gibi çalıştıklarından emin olmak için yazılım sistemleri üzerinde çeşitli testler gerçekleştirmelerinin nedeni budur. API'ler farklı değil. Devreye almadan önce en azından performans testleri ve güvenlik testleri yapmalısınız.

Performans testleri, işlevsellik testleri ve yük testleri olarak gruplandırılabilir. İşlevsellik testleri, genellikle Postacı veya Uykusuzluk için kullandığınız şeydir. API'nizin beklediğiniz gibi çalışmasını sağlarlar. Öte yandan yük testleri, API'nizin gerçek dünya kullanımı ve en yüksek yükte nasıl performans gösterdiğiyle daha çok ilgilenir ve bu makalenin konusu da budur. Yük testlerine daha detaylı bakalım.

API Yük Testi Nedir?

API yük testi, geliştiricilerin uç noktalardaki normal ve en yüksek yükü simüle etmek için kullandıkları bir test türüdür. Bu tür testler, geliştiricilerin dağıtılmadan önce bir API'nin gerçek dünyadaki performansını değerlendirmesine olanak tanır. Bir sistemin maksimum çalışma kapasitesini, varsa darboğazları ve performans düşüşünü belirlemelerine yardımcı olur. API yük testleri genellikle sanal kullanıcılar oluşturarak ve ardından bunları API'nin işlevselliğini eşzamanlı olarak test etmek için kullanarak yapılır. 

API yük testleri, yanıt süresi, eşzamanlı kullanıcılar, verimlilik oranları, kaynak kullanım seviyeleri, Arızalar Arasındaki Ortalama Süre (MTBF), Arızaya Kadar Ortalama Süre (MTTF) vb. gibi metrikleri ölçer. Tüm bu ölçümler, API'nin ne kadar iyi çalıştığını belirlemek için kullanılabilir.

Yük Testi Türleri

Her biri kullanım durumlarına sahip birkaç tür yük testi vardır. Bunlardan bazılarına bir göz atalım.

Yük Testi: Bu, bir yük testinin temel şeklidir. Normal yük ve beklenen tepe yük altında bir sistemin (bu durumda bir API) performansını değerlendirmek için kullanılır.

Stres testi: Bu, bir sistemin çok ağır bir yük altındaki performansını değerlendirmek için kullanılır. Bu testin amacı, bir sistemin arızadan sonra düzelip düzelmediğini ve bunun ne kadar sürdüğünü görmektir. Yük genellikle sistemin kapasitesini aşana kadar yavaş yavaş artırılır.

Spike Testi: Bu, stres testine biraz benzer, ancak ağır yükün yavaşça artırılması yerine aniden uygulanması dışında. Bu tür bir test, ortalama kullanıcı veya ziyaretçi sayınızda ani bir artış olduğunda veya sisteminize bir DDOS saldırısı olduğunda ne olacağını temsil eder.

Islatma Testi: Bu test yukarıdaki diğerlerinden farklıdır. Sisteminizi normal yükün %80'inin (veya yaklaşık olarak) altına sokar ve 12 ila 14 saat gibi uzun bir süre çalışır durumda bırakır. Bu tür testler bir sistemin zaman içinde ne kadar güvenilir olduğunu belirler.

API'lerinizi Locust ile Test Etme

Geliştiriciler, API'lerini yük testi için çeşitli seçeneklere erişebilir. Bazı yaygın yük testi araçları Gatling, JMeter ve Locust'tur. Bu yazıda Locust'a odaklanacağız.

Locust, Google, Microsoft ve Riot Games gibi önde gelen şirketler tarafından API'lerini test etmek için kullanılan, python tabanlı, açık kaynaklı bir yük testi aracıdır. Bu yazıda, bir API'yi nasıl yükleyeceğinizi göstereceğiz. 

Bu eğitim için Flask ile basit bir API oluşturacağım. Benimle birlikte takip edebilir veya API'nizi Node ile veya rahat olduğunuz herhangi bir çerçeve ile oluşturabilirsiniz.

Yer Alan Kurallar

Python 3

Kurulum ve Kurulum

Global Python ortamınızı bozmamak için öncelikle bilgisayarınızda sanal bir ortam kurmanız gerekiyor. Bunu yapmak için aşağıdaki komutları çalıştırın. Bu komutların bir Windows terminali için geçerli olduğunu unutmayın.

$ mkdir projesi

$ cd /d yol\to\proje

$ piton -m venv venv

$ venv\Komut Dosyaları\etkinleştir

 

İlk önce bir oluşturduk proje dizin. Ardından mevcut dizinimizi şu şekilde değiştirdik: proje. Daha sonra o dizin içinde Python için sanal bir ortam oluşturduk ve etkinleştirdik. 

Şimdi kuruluma geçeceğiz Cep şişesi(yük testi yapılacak uç noktaları oluşturmak için kullanacağız) ve keçiboynuzu kendisi. 

 

Flask'ı yüklemek için çalıştırın. içinde olduğundan emin ol proje sanal bir ortam oluşturduğunuz yer.

$ pip yükleme şişesi

 

Locust'u yüklemek için çalıştırın

$ pip yükleme çekirgesi

 

Bu yapıldıktan sonra, aşağıdaki komutları yazın. içinde olduğundan emin ol proje Bunu yaptığınızda dizin.

$ nul __init__.py kopyala

$ mkdir uygulaması

$ null app\app.py'yi kopyala

$ boş uygulamayı kopyala\__init__.py

 

Bu komut, Flask kullanarak uç noktalarımızı oluşturmak için kullanacağımız bazı dosyalar oluşturur. Bu arada, bu dosyaları dosya gezgininizi kullanarak da oluşturabilirsiniz. Ama bunun neresi eğlenceli? Bunu yaptıktan sonra, aşağıdaki kodu içine kopyalayın uygulama.py

şişeden içe aktarma Şişe, jsonify, istek

app = Flask (__ name__)

araba_modelleri = [

  {'marka': 'Tesla', 'model': 'Model S' }

]

 

uçak_modelleri = [

  { 'marka': 'Boeing', 'model': '747' }

]

 

@app.route('/arabalar')

def get_cars():

  dönüş jsonify(araba_modelleri)

@app.route('/uçaklar')

def get_planes():

  dönüş jsonify(plane_models)

eğer __name__ =='__main__':

    app.run(hata ayıklama=Doğru)  

 

Yukarıdaki kod bir yöntem içerir get_cars araba markalarının ve modellerinin bir listesini almak için kullanılır ve get_planes uçak markalarının ve modellerinin listesini almak için kullanılır. Bu uç noktayı test etmemiz için app.py'yi çalıştırmamız gerekiyor. Bunu yapmak için aşağıdaki komutu çalıştırın.

$ python yolu\to\app.py

Bunu çalıştırdığınızda, şöyle bir şey görmelisiniz:

API Yük Testi 1

URL'yi terminalden kopyalar ve yazarsanız arabalar or uçaklar /'den sonra, verileri orada görebilmeniz gerekir. Ancak amacımız uç noktayı tarayıcı ile değil locust ile test etmektir. Öyleyse yapalım. Aşağıdaki komutu bilgisayarınızın kökünde çalıştırın. proje dizin.

 

$ null locust_test.py kopyala

 

Bu, dosyanızın kök dizininde bir 'locust_test.py' dosyası oluşturur. proje dizin. Bunu yaptıktan sonra dosyayı açın ve aşağıdaki kodu yapıştırın. Birazdan açıklayacağız.

 

ithalat zamanı

çekirgeden içe aktarma HttpUser, görev, arasında

 

sınıf UserBehaviour(HttpUser):

    bekleme_süresi = arasında(5, 10)

 

    @görev

    def get_cars(kendisi):

        self.client.get('/arabalar')

    

    @görev

    def get_planes(kendisi):

        self.client.get('/uçaklar')

 

Bu, bir API'yi yüklemek için Locust kullanmanın temel bir örneğidir. İlk önce bir class oluşturuyoruz. Kullanıcı Davranışıherhangi bir uygun ad verilebilir, ancak genişletilmesi gerekir Http Kullanıcısı Http Kullanıcısı içinde belirttiğimiz görevleri yerine getirmek için birden çok sanal kullanıcının örneklenmesini sağlayan sınıftır. Kullanıcı Davranışı sınıf. 

Bir görev, bir yöntem ile dekore edilerek belirtilir. @görev dekoratör. Ayrıca adında bir fonksiyonumuz var. arasında() bu, bir sonraki görevi gerçekleştirmeden önce beklenecek bir saniye aralığı belirlememize olanak tanır. Kodumuzda bunun için 5 ila 10 saniyelik bir aralık atadığımızı görebilirsiniz. 

Kodu çalıştırmak için hala sanal ortamınızda olduğunuzdan emin olun. Oluşturduğunuz, API'ye hizmet veren sunucu tarafından kullanılıyorsa, yeni bir terminal açın, dizininizi kendi dizininiz olarak değiştirin. proje dizinine girin ve oluşturduğunuz sanal ortamı etkinleştirin. Yukarıda sanal ortam etkinleştirme komutunu bulabilirsiniz. Şimdi, terminalinize aşağıdaki komutu girin.

 

$ locust -f locust_test.py

 

Böyle bir şey görmelisin:

API Yük Testi 2

Varsayılan olarak, locust'un web arayüzü http://localhost/8089 adresinde bulunur. Web sitesini ziyaret ederseniz, şöyle bir arayüz görmelisiniz:

API Yük Testi 3

Arayüzden, kullanıcı sayısını, yumurtlama oranını (saniyede oluşturulan kullanıcı sayısı) ve Ana Bilgisayarı belirtebiliriz. Sunucunun çalıştığı terminali kontrol ederek hostunuzun adresini alabilirsiniz. Bizim durumumuzda, 5000 numaralı bağlantı noktasındadır. Kaynaşmaya başla, aşağıdaki arayüz ile karşılaşacaksınız.

API Yük Testi 4

Bu, size başarısız isteklerin sayısı, bir isteğin ortalama süresi, bir isteğin minimum süresi, saniye başına istek sayısı vb. gibi çeşitli faydalı ölçümleri gösterir. Gördüklerinizden memnun kaldığınızda, durdur düğmesine tıklayabilirsiniz. 


Ayrıca İstatistikler sekmesi var Grafikler daha fazlasını gösteren sekme bilgi aşağıdaki resimdeki gibi bir grafik şeklinde.

Var saniye başına toplam istek grafiği, tepki süresi grafiği, ve kullanıcı sayısı grafiği, hepsi zamana karşı çizildi. Grafikleri kullanarak, sabit bir yanıt süresi için kaç kullanıcının kabul edilebilir olduğunu belirleyebilir veya artan kullanıcı sayısına ve bunun gibi diğer öngörülere rağmen grafiklerinizi sabit bir yanıt süresi için gözlemleyebilirsiniz. Bunları paylaşmak isterseniz istatistikler başka biriyle birlikte, şu adresten bir rapor indirebilirsiniz: Verileri İndir sekmesi.

Sonuçlandırmak için...

API'nizin yük testi, geliştirme sürecinizde çok önemli bir etkinliktir, bu nedenle tasarım döngünüze dahil edildiğinden emin olun. Bu arada, kullanıcı sayısı ve spawn oranı için değerleri değiştirerek diğer yük testi türlerini de gerçekleştirebilirsiniz. 

Bir ani yükselme testi yapmak istiyorsanız, kullanıcı sayısı için büyük bir değer (örneğin 2000) ve ardından yumurtlama oranınız için eşit derecede büyük bir değer (örneğin 500) belirtin. Bu, 4 saniye içinde 2000 kullanıcının tamamını oluşturup uç noktalarınıza erişeceğiniz anlamına gelir. Bir stres testi benzer olacaktır, ancak yumurtlama oranı için çok daha düşük bir değere sahip olacaktır. Yapabileceğiniz her şeyi öğrenmek için Locust'a göz atın. belgeleme