splincodewd
@splincodewd
Developer

Как написать асинхронное выполнение циклов на bash для простого нагрузочного тестирования?

Хочу протестировать нагрузку в 200 пользователей на сервер

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


И теперь надо от каждого пользователя выполнить по 5000 запросов (если это делать последовательно, то и нагрузки никакой и долго скрипт выполняться будет)

Как можно написать параллельные 200 циклов, которые выполняют 5000 запросов?

И можно ли как-то научиться из этого какую-то временную аналитику строить, понять, где хуже или лучше работать, при какой нагрузке по времени (или лучше уже потом сразу на инструменты переходить jMeter или Я.Танк)?
  • Вопрос задан
  • 676 просмотров
Решения вопроса 1
dummyman
@dummyman
диссидент-схизматик
Для этого у апача есть утилита ab

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)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы