Вопрос

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

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

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

Это было полезно?

Решение

Используйте 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)

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top