Как мне стресс-тест загрузить файл веб-формы? - PullRequest
4 голосов
/ 23 октября 2008

Мне нужно протестировать веб-форму, которая загружает файл. Размер файла при каждой загрузке будет около 10 МБ. Я хочу проверить, может ли сервер обрабатывать более 100 одновременных загрузок и при этом оставаться отзывчив на остальную часть сайта.

Повторная отправка форм из нашего офиса будет ограничена нашей местной линией DSL. Сервер находится вне офиса с более высокой пропускной способностью.

Ответы, основанные на опыте, были бы хорошими, но любые предложения приветствуются.

Ответы [ 3 ]

8 голосов
/ 27 ноября 2008

Используйте инструмент командной строки ab (ApacheBench) , который входит в комплект Apache (Я только что открыл этот замечательный маленький инструмент). В отличие от cURL или wget, ApacheBench был разработан для проведения стресс-тестов на веб-серверах (любой тип веб-сервера!). Он также генерирует много статистики. Следующая команда отправит HTTP POST-запрос, включая файл test.jpg до http://localhost/ 100 раз, до 4 одновременных запросов.

ab -n 100 -c 4 -p test.jpg http://localhost/

Это производит вывод как это:

Server Software:        
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      4
Time taken for tests:   0.78125 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      2600 bytes
HTML transferred:       0 bytes
Requests per second:    1280.00 [#/sec] (mean)
Time per request:       3.125 [ms] (mean)
Time per request:       0.781 [ms] (mean, across all concurrent requests)
Transfer rate:          25.60 [Kbytes/sec] received

Connection Times (ms)
          min  mean[+/-sd] median   max
Connect:        0    0   2.6      0      15
Processing:     0    2   5.5      0      15
Waiting:        0    1   4.8      0      15
Total:          0    2   6.0      0      15

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%     15
  95%     15
  98%     15
  99%     15
 100%     15 (longest request)
0 голосов
/ 23 октября 2008

Автоматизация Selenium RC с использованием вашего любимого языка. Запустите 100 Threads of Selenium, каждый из которых вводит путь к файлу во входных данных и нажимает кнопку «Отправить».

Вы можете сгенерировать 100 файлов с последовательными именами, чтобы легко их зацикливать, или просто использовать один и тот же файл снова и снова

0 голосов
/ 23 октября 2008

Возможно, я бы советовал вам использовать cURL и отправлять только случайные вещи (например, читать 10 МБ из /dev/urandom и кодировать его в base32), через POST-запрос и вручную создавать тело для загрузки файла (это не ракетостроение).

Создайте этот скрипт 100 раз, возможно, на нескольких серверах. Просто убедитесь, что системные администраторы не думают, что вы делаете DDoS или что-то еще:)

К сожалению, этот ответ остается немного расплывчатым, но, надеюсь, он поможет вам подтолкнуть вас на правильный путь.

Продолжение согласно комментарию Лиама:
Если сервер, принимающий загрузки, не находится в той же локальной сети, что и клиенты, подключающиеся к нему, было бы лучше получить как можно более удаленные узлы для стресс-тестирования, если только имитировать поведение как можно более аутентичным. Но если у вас нет доступа к компьютерам за пределами локальной сети, локальная сеть всегда лучше, чем ничего.

Стресс-тестирование внутри одного и того же оборудования было бы не очень хорошей идеей, так как вы делали бы двойную нагрузку на сервер: выявляли случайные данные, упаковывали их, отправляли их через стек TCP / IP (хотя, вероятно, не через Ethernet). ), и только тогда сервер сможет сделать свое волшебство. Если отправляющая часть передана на аутсорсинг, вы получаете удвоенную (взятую с зерном соли произвольного размера) производительность принимающей стороны.

...