Web Uygulamalarına ve Web Servislerine LOCUST ile Yük Testi Yapma

Bu yazıda çok kullanışlı bir python kütüphanesi olan LOCUST‘ u anlatacağım. Bir web sitenizin yada bir web servisinizin olduğunu düşünelim. Kullanıcı deneyiminin en iyi şekilde olmasını istiyorsanız kullanıcıya cevap sürelerinizin düşük olmasını ve hizmetinizin çökmemesini istersiniz.

Locust, web sitelerimize veya servislerimize hızlı ve kolay bir şekilde performans testi yapabileceğimiz kullanıcı arayüzü de olan bir araçtır. Locust ile aynı anda çok sayıda kullanıcıya istek yaptırarak sitemizin çöküp çökmediğini test edebiliriz. Ayrıca uygulamamızda yaptığımız iyileştirmelerin(örneğin cache mekanizması gibi) öncekine göre ne durumda olduğunu da Locustla test ederek görebiliriz.

Kurulum

Locust’ u kullanabilmek için ilk önce bilgisayarımıza yüklememiz gerekiyor. Bunun için pip paket yöneticisi ile aşğıdaki kodları çalıştırarak yüklüyoruz.

pip3 install locust yükleme yaptıktan sonra locust -v diyerek versiyonunu kontrol edebiliriz.

Kullanım

Bilgisayarımızın masaüstüne testlerimizi yazacağımız locust_test.py isminde dosyamızı oluşturuyoruz.

Bu test dosyasına aşağıdaki kodları yazarak test senaryomuzu oluşturuyoruz.

import time
from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(1, 2.5)

    @task
    def my_first_task(self):
        self.client.get("")

    @task(2)
    def my_second_task(self):
        self.client.get("index.php/about/")

Testimizde sitemizin anasayfasına ve about sayfasına GET istekleri yaparak performansını ölçeceğiz.

wait_time: 1 ile 2.5 saniye arası rastgele zaman üretilerek bu zamana göre bekleme yapılıp http isteği yapılır.

@task : Test scriptimiz çalıştırıldığında, task dekoratörünün altında tanımlanan görevler yapılır. Task dekoratörü opsiyonel bir parametre alır. Bu parametre görevlerin ağırlığını tanımlar. Bizim örneğimizde my_first_task birkere istek atarken my_second_task iki kere istek atar.

scriptimizi masaüstünde oluşturduğumuz için bu dosyayı çalıştırmak için ilk önce komut terminalini açıyoruz. Daha sonra aşağıdaki komutları yazarak(veya dosya_yolu/locust_test.py) çalıştırıyoruz.

locust -f locust_test.py

Scriptimiz hatasız çalıştığında Locusttun arayüzünü web tarayıcısına http://localhost:8089/ yazarak açabiliriz. Açılan ekranda bir form ekrana gelir. Bu formda testte Kaç kullanıcının simüle edileceği, kaç saniyede bir ne kadar kullanıcı eklemek istediğimizi(spawn rate) ve hangi domaine bağlanılacağını tanımlıyoruz. Formu doldurduktan sonra Start swarming butonuna bastığımızda testimiz başlamış olur.

Test başladığında aşağıdaki resimde olan ekran çıkacaktır. Tabloya bakarak sayfalara ne kadar sürede cevap verildiğini, Toplam istek Sayılarınını, Saniyedeki istek sayılarını (RPS(request per second)), Hataları görebiliriz. Charts tabına basarakta grafik ekranını açabiliriz.

Test raporunu çıkarmak için Download Report sayfasını açıp download report düğmesine basarak raporu elde edebiliriz.

Locust Testleri yazarken POST isteğide yapabiliriz.

@task
def my_load_test(self):
        self.client.post("/login", json={"username":"foo", "password":"bar"})

Ayrıca testlerimizi bir döngü olarakta tanımlayabiliriz.

@task()
    def view_items(self):
        for item_id in range(10):
            self.client.get(f"/item?id={item_id}", name="/item")
            time.sleep(1)

Locust, test için birden fazla makine kullanılmasını da destekler. Daha fazla bilgi için locust un resmi dokümanını kullarak testlerinizi geliştirebilirsiniz. Başarılar.

Kaynaklar
  1. https://docs.locust.io/en/stable/index.html