M
M
Maxim Ivanov2017-03-14 14:30:40
bash
Maxim Ivanov, 2017-03-14 14:30:40

How to write asynchronous loop execution in bash for simple load testing?

I want to test a load of 200 users per server

users=200 # количество пользователей
count=5000 # количество запросов каждого пользователя
url=localhost:8282

# авторизация
mkdir userCookie

    for i in $(seq 1 ${users})
    do
        curl --cookie-jar "userCookie/jsession${i}.out" -s -X POST --data "{login=admin,password=123456}" --verbose http://${url}/auth/login
        echo "\n"
    done

# выше у нас создалось 200 сессий (это вроде как можно считать за одновременное количество пользователей)
# так получается только один пользователь посылает запросы
for i in $(seq 1 ${count})
do
   echo "Request number $i"
   curl --cookie "userCookie/jsession1.out" -X GET --verbose http://${url}/api/get-message
   echo "\n"
done

And now it is necessary to execute 5000 requests from each user (if this is done sequentially, then there will be no load and the script will be executed for a long time)
How can you write parallel 200 cycles that execute 5000 requests?
And is it possible to somehow learn from this some kind of temporal analytics, to understand where it is worse or better to work, at what time load (or is it better to immediately switch to jMeter or Ya.Tank tools later)?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
dummyman, 2017-03-24
@splincodewd

Apache has the ab utility for this.

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
                    (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question