Web Sitesi Yük Test Aracı Locust – Web Site Load Test LOCUST
Eğer sizde benim gibi özel olarak yapılandırdığınız Web Hizmetlerinizi barındıran Web Sunucularınızı optimize edip servis sürekliliği açısında ne kadar kaynaklı kaç sunucu oluşturmak istediğinizi ölçmek istiyorsanız birazdan anlatacağım konu tam size göre.
Web Sunucularınızın çalıştırdığınız web hizmetine göre performans testini ölçebileceğiniz ücretsiz, Open Source ve başarılı yazılımlara baktığımızda ilk karşımıza gelenler; Grinder, jMeter ve Locust alternatifleriniz arasında olacaktır. jMeter ve Grinder, Java GUI tabanlı yazılımlar olmasından dolayı test yapılan cihazın kaynaklarını daha çok kullanmakta. Fakat Locust komut tabanlı olmasından dolayı daha az kaynak kullanarak daha başarılı sonuçlar vermektedir.
Bu makalemizde sizlere web sitelerinizin performans testini ücretsiz ve Open Source bir araç olan Locust ile nasıl yapacağınızı anlatacağım. Hem Windows hem de Linux üzerinde çalıştırabileceğiniz Locust diğer performans test yazılımlarına göre client (testi başlattığınız cihaz) üzerinde en düşük yük oluşturma özelliğinden ötürü yoğun talep görmektedir.
Bu makalemiz 3 ana bölüm ve 4 alt bölümden oluşmaktadır. Şimdi sırası ile önce gereksinimleri, kurulumu ve kullanımına geçelim.
1- Gereksinimler: Python Kurulumu
Locust temelde Python ile çalışmaktadır. Bu nedenle kurulum ve yapılandırmaya geçmeden önce Aşağıdaki linkten 3.6 sürümünün en güncel Python’u indirip kurulumunu gerçekleştirmeniz gerekiyor.
https://www.python.org/downloads
Genellikle en çok sorulan soru “Locust’u Windows’a mı çalıştırmalıyız yoksa Linux üzerinde mi?”. Benim yaptığım testlerde Linux makine üzerinde daha fazla sanal kullanıcı açabildim. Bu nedenle önerim birden fazla Linux cihaz üzerinden testi başlatmanızdır. Eğer Linux bilginiz az ise önce Windows üzerinde kurup test ayarlarınızı oluşturup locustfile.py dosyasını temel kurulumları yaptığınız Linux makine üzerinde çalıştırmanızdır.
Windows Üzerinde Python Kurulumu:
Windows cihazlara Python kurulumu için gelişmiş seçeneğini işaretleyerek ilerleyiniz.
Gelişmiş seçeneğini seçtiğinizde tüm ek bileşenleri işaretleyiniz. “pip” bileşeni Locust kurulumunda kullacağız.“.py launcher” ise Locust’u çalışmasını sağlayan bileşendir.
Standart kurulumdan farklı olarak “Advanced Options” sekmesindeki tüm alanları işaretleyiniz. Bu sizin Locust’u çalıştırırken ihtiyacınız olacaktır.
Windows makineye kurulum yaparken kurulum yapılan bilgisayara eğer başkaları da bağlanıp Python’u çalıştıracaksa ProgramFiles altına kurulumu yapmanız. Değil ise AppData\Local\Programs\Python\Python36-32 yer alıyor. Bu sayede sizin hesabın dışındakilerinde kullanımına açmış olursunuz.
İşletim sistemleri bazı güvenlik ve performans değerlerinden ötürü aynı anda belli sayıda dosya açmaya izin vermektedir. Fakat Locust çalışma sistematiği olarak aynı anda sizin test yapmak istediğiniz sanal kullanıcı sayısı kadar dosya açalarak test yapmakta. Bu davranıştan ötürü “Python error IOError: [Errno 24]” hata mesajı alınabilir. Bu sorunun çözümü için Python kurulumunun son adımında “Disable path length limit” butonuna basarak kurulumu tamamlamanız.
Centos Linux Üzerinde Python Kurulumu:
Eğer Centos Linux repo’da Python3.6 güncel sürüm yoksa aşağıdaki komutları çalıştırınız.
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum update
sudo yum install yum-utils
sudo yum groupinstall -y “Development Tools”
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
python get-pip.py
Linux üzerinde ise Python kurulum dizininde (/usr/lib64/Python3.6 ) aşağıdaki komutu ile dosya açma limitini 12000 çıkartırsınız.
ulimit -n 12000
Locust Kurulumu:
Python kurulumu tamamlandıktan sonra kurulum dizininde komut satırından gidip aşağıdaki komutları çalıştırınız.
python -m pip install –upgrade pip
pip install locustio
pip install pyzmq
Kurulum için Firewall İzni:
Kurulum yapılabilmesi için Kurulum yapılacak cihazın https://files.pythonhosted.org
Web adresine 443 TCP portundan internet erişiminin olması gerekmektedir.
Locust’un Yapılandırılması:
Locust’un çalışabilmesi için locustfile.py isimli yapılandırma dosyasının kurulum yapılan Python klasörü içinde bulunuyor ve düzenlenmiş olması gerekiyor.
Eğer Windows’a standart kurulum yapıldı ise “C:\Program Files (x86)\Python36-32\Scripts” altında Linux’de ise /usr/lib64/Python3.6 klasörü altına locustfile.py ismi ile dosya oluşturun.
Temel olarak Web Sitesi testi için locustfile.py isimli dosyayı her hangi bir text editörü ile açıp aşağıdaki verileri giriniz.
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
@task
def get_something(self):
self.client.get(“/sitecontrol.html”)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
Web Sitesi Testine Başlama:
Yapılandırdığınız ayarlarla Locust servisinin başlaması için aşağıdaki komutu çalıştırınız.
locust –host=http://test_yapacağınız_web_sitesi_adresini_giriniz
Teste başlamak için kurulumu ve yapılandırmayı yaptığınız sunucu üzerinde http://localhost:8089/ adresine giriniz. Başka makineden girecekseniz localhost yerine sunucu ip adresini giriniz.
Locust Yönetim sayfasına girdiğinizde sizi ilk karşılayan testi kaç kullanıcı ile yapmak istediğinizi bildiriyor. Aşağıda verdiğim tanımlara göre uygun değerleri girip “Start Swarming” dediğinizde testiniz başlıyor.
Number of user to simulate: Testi toplam kaç sanal kullanıcı oluşturularak test yapılacağı
Hatch Rate: kaç saniyede bir ne kadar kullanıcı eklemek istersiniz
Test sonuçlarını ve anlık değerleri bu sayfa üzerinden görüntüleyebilirsiniz.
Locust Çoklu Çalışma Desteği:
Aslına baktığınızda tüm Load Test yazılımlarındaki temel kısıt client yani testi başlattığınız cihazın kaynak durumudur. Locust diğer Web Site Load Test yazılımlarından farklı olarak master – slave çalıştırmaya müsait. Tek bir makine, ihtiyacınız olan kullanıcı sayısını simüle etmek için yeterli olmadığında Locust, birden fazla makineye testi dağıtarak yük testi oluşturmayı destekliyor.
Bunun için en az 1 ana makine (master) ve istediğiniz kadar ek cihaz (slave) üzerinden aşağıdaki komutları kullanarak Locust servisini başlatmanız gerekiyor.
Locust Master Servis Kodu :
locust –host=http://test_yapilacak_web_sitesi –master
Locust Slave Servis Kodu :
locust –host=http:// test_yapilacak_web_sitesi –slave –master-host=master_ip_adresi
Kaynak:
https://docs.locust.io/en/stable/quickstart.html
https://docs.locust.io/en/stable/writing-a-locustfile.html
https://www.promptworks.com/blog/load-testing-with-locust
http://powerupcloud.azurewebsites.net/2016/02/18/running-loadtests-an-introduction-to-locust/
https://gist.github.com/agconti/0f3886cbf1ce158e913e
https://github.com/aws-samples/eb-locustio-sample/blob/master/locustfile.py
https://gist.github.com/kbeswick/10405384