Bir Benchmark Aracı: Hey.go

Hey, Golang ile hazırlanmış bir mini program. Web uygulamalarına yük testi yapmak için kullanılan, Apache Benchmark’dan da aşina olduğumuz standart parametreleri olan bir benchmark aracı.

Bir projeye başlamadan önce hangi framework’ü kullanmam gerektiğine, hangi firmada barındıracağıma ve hangi web servisini kullanarak deploy edeceğime karar verme aşamasında bir benchmark testine ihtiyacım oldu.

Normal koşullarda benchmark testine ihtiyaç duymadığım için gerektiği zamanlarda ilgili sunucu içerisine hızlıca ab (Apache Benchmark) kurar ve onu kullanırdım. Ancak, bu projede testleri yaparken sunucu üzerinde ab ile test yapmak istemedim (alternatif kullanım şekli var mı hiç merak etmedim, örneğin kişisel bilgisayar üzerinde ab kullanmak gibi) ve alternatif bir program aradım. Derin araştırmalar sonucunda Hey.go isimli bir programı keşfettim.

Hey, Golang yüklü Linux, Mac ve Windows platformlarında çalışabiliyor. Sunucu üzerine yüklemek gibi bir gereksinimi yok. Benim gibi kendi bilgisayarınızda da kullanabilir veya sunucu üzerinde de kullanabilirsiniz.

Hızlıca klonlamanız için;

git clone https://github.com/rakyll/hey.git

Ardından herhangi bir web sitesine ilk testimizi yapalım.

cd hey-master
go run hey.go https://httpbin.org/get

Aşağıdaki gibi bir çıktı almanız gerekiyor.

  Summary:
  Total: 4.5116 secs
  Slowest: 2.9641 secs
  Fastest: 0.1784 secs
  Average: 0.8984 secs

  Requests/sec: 44.3300Response time histogram:
  0.178 [1]  |
  0.457 [88] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.736 [30] |■■■■■■■■■■■■■■
  1.014 [2]  |■
  1.293 [7]  |■■■
  1.571 [28] |■■■■■■■■■■■■■
  1.850 [25] |■■■■■■■■■■■
  2.128 [10] |■■■■■
  2.407 [5]  |■■
  2.686 [1]  |
  2.964 [3]  |■

  Latency distribution:
  10% in 0.2121 secs
  25% in 0.2717 secs
  50% in 0.5179 secs
  75% in 1.5077 secs
  90% in 1.8428 secs
  95% in 2.0429 secs
  99% in 2.9635 secsDetails (average, fastest, slowest):
  DNS+dialup: 0.1717 secs, 0.1784 secs, 2.9641 secs
  DNS-lookup: 0.0368 secs, 0.0000 secs, 0.1461 secs
  req write: 0.0001 secs, 0.0000 secs, 0.0024 secs
  resp wait: 0.5081 secs, 0.1641 secs, 2.0028 secs
  resp read: 0.0003 secs, 0.0001 secs, 0.0025 secs
  
  Status code distribution:
  [200] 200 responses

Fakat, bağlantı hızı ve diğer faktörleri aradan kaldırmak isterseniz tabii ki sunucu üzerine kurmak ve localde test etmek gayet geçerli bir sebep. Ben gerçek bir kullanıcı gibi X istek gönderince ne kadar sürede yanıt verdiği ile daha çok ilgileniyorum.

Parametrelerinin kullanımını unuttuğunuz takdirde aşağıdaki komutu girerek detaylı bilgisini yeniden alabilirsiniz.

go run hey.go --help

Daha Fazla

-n Toplam istek sayısı. Varsayılanı 200’dür.

go run hey.go URL -n 200 

-c Eşzamanlı gönderilecek istek sayısı. Varsayılanı 50 olup, toplam istek sayısından düşük olamaz.

go run hey.go URL -n 400 -c 100

-z Hey.go belirli bir süre istek gönderip, web sunucudan yanıt alamazsa tekrar istek göndermesini engellesin diye kullanılan bir timeout parametresidir. Örneğin bir kafeye gittiniz, sipariş verdiniz, 30 dakikadır gelmedi siparişiniz ve kalkıp gitmek istersiniz, onun gibi bir şey 🙂

go run hey.go URL -n 400 -c 100 -z 30

-m API test ediyorsanız, GET, POST, PUT, DELETE, HEAD, OPTIONS parametreleriyle test yapmak isteyebilirsininiz.

go run hey.go URL -n 400 -c 100 -z 30 -m GET

-h İsteğe bağlı Header bilgisi göndermek için kullanabilirsiniz ve birden fazla header bilgisi gönderebilirsiniz. Örneğin;
-h “Accept: text/html” -h “Content-type: application/xml”

-t Diğer timeout parametresidir. İstek bazında yanıt verme süreci gecikirse bir sonraki isteğe geçer.

-a Basit Kimlik Doğrulama username:password formatındadır. Eğer şifre doğrulama bir sayfa üzerinde bir test yapıyorsanız kullanabilirsiniz.

-h2 HTTP/2 protokolü ile istek gönderir.

rakyll/hey

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir