Saudações.
Nesse tutorial vou abordar os procedimentos para stress e benchmark de servidores HTTP para aferir a capacidade real de sites, APIs e Webhooks.
1 – Apache AB
O comando “ab” do Apache é o mais antigo, estável e eficiente de todos.
Bash
# Instalar apache2-utils
apt -y install apache2-utils;
# Menu de ajuda
ab -h;
# Usage: ab [options] [http[s]://]hostname[:port]/path
# Options are:
# -n requests Number of requests to perform
# -c concurrency Number of multiple requests to make at a time
# -t timelimit Seconds to max. to spend on benchmarking
# This implies -n 50000
# -s timeout Seconds to max. wait for each response
# Default is 30 seconds
# -b windowsize Size of TCP send/receive buffer, in bytes
# -B address Address to bind to when making outgoing connections
# -p postfile File containing data to POST. Remember also to set -T
# -u putfile File containing data to PUT. Remember also to set -T
# -T content-type Content-type header to use for POST/PUT data, eg.
# 'application/x-www-form-urlencoded'
# Default is 'text/plain'
# -v verbosity How much troubleshooting info to print
# -w Print out results in HTML tables
# -i Use HEAD instead of GET
# -x attributes String to insert as table attributes
# -y attributes String to insert as tr attributes
# -z attributes String to insert as td or th attributes
# -C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
# -H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
# Inserted after all normal header lines. (repeatable)
# -A attribute Add Basic WWW Authentication, the attributes
# are a colon separated username and password.
# -P attribute Add Basic Proxy Authentication, the attributes
# are a colon separated username and password.
# -X proxy:port Proxyserver and port number to use
# -V Print version number and exit
# -k Use HTTP KeepAlive feature
# -d Do not show percentiles served table.
# -S Do not show confidence estimators and warnings.
# -q Do not show progress when doing more than 150 requests
# -l Accept variable document length (use this for dynamic pages)
# -g filename Output collected data to gnuplot format file.
# -e filename Output CSV file with percentages served
# -r Don't exit on socket receive errors.
# -m method Method name
# -h Display usage information (this message)
# -I Disable TLS Server Name Indication (SNI) extension
# -Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
# -f protocol Specify SSL/TLS protocol
# (SSL2, TLS1, TLS1.1, TLS1.2, TLS1.3 or ALL)
# -E certfile Specify optional client certificate chain and private key
#
Usando o ab:
Bash
# URL a ser testada, troque pela sua URL alvo
URL="https://meusite.com/webhook/log-receive";
# Enviando 10.000 requisicoes no total, abrir no maximo 100 em paralelo
ab \
-n 10000 \
-c 100 \
$URL;
# Enviando payload JSON, tipo JSON, metodo POST, 500 requisicoes, maximo 50 paralelo
echo '{ "level": "warn", "message": "Burn server, burn" }' > /tmp/payload1.json;
ab \
-n 500 \
-c 50 \
-p /tmp/payload1.json \
-T application/json \
$URL;
# Payload de API autenticada com Bearer, 200 reqs, 20 em paralelo:
URL="https://meusite.com/api/store";
TOKEN="ak-store-38a8838j3h_h40h1";
echo '{"event":"order.created","id":42,"value":99.90}' > /tmp/payload2.json;
ab \
-n 200 \
-c 20 \
-m POST \
-p /tmp/payload2.json \
-T 'application/json' \
-H "Authorization: Bearer $TOKEN" \
-H "X-Test: 123" \
$URL;
.
.
“Pai dele, alho; mãe, cebola.
Como pode ele cheirar bem?“
Provérbio Árabe
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
