Hey.go

Gürkan Biçer
Dec 23, 2019 · 3 min read
Photo by William Iven on Unsplash

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ı.

Hey.go Logo from Git Repo: rakyll/hey

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.3300
Response 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 secs
Details (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

Hey.go ile genellikle kullanacağınız parametreler ve örnekleri;

-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.
-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.

GitHub Reposu için:

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade