Как написать сценарий нагрузочного теста Load Impact для имитации только пользователей Chrome?

Мы довольно часто сталкиваемся с этим вопросом в Load Impact, поэтому я добавляю его в сообщество Stack Overflow, чтобы его было легче найти

В: Разные браузеры ведут себя по-разному при загрузке контента с сервера. Кроме того, некоторые сайты/приложения предоставляют различный контент в зависимости от используемого браузера. Как заставить мой нагрузочный тест Load Impact эмулировать определенный браузер?


person Ragnar    schedule 17.04.2015    source источник


Ответы (1)


Чтобы эмулировать конкретный браузер, вы можете использовать API-функции скрипта загрузки http.set_user_agent_string() и http.set_max_connections(), чтобы настроить имитируемый клиент так, чтобы он вел себя так, как если бы это был рассматриваемый браузер.

Вот код, где мы выполняем эмуляцию IE6

-- Emulating IE6
http.set_user_agent_string("Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)")
http.set_max_connections(34, 2)
-- make several HTTP requests as IE6
http.request_batch({
  {"GET", "http://test.loadimpact.com/"},
  {"GET", "http://test.loadimpact.com/index.php"},
  {"GET", "http://test.loadimpact.com/news.php"},
  {"GET", "http://test.loadimpact.com/contacts.php"}
})

В приведенном выше примере мы настраиваем имитируемый клиент для выполнения двух задач:

Используйте специальную строку User-Agent, используемую браузером Internet Explorer 6 под управлением Windows XP. Используйте не более 2 одновременных подключений на каждый целевой хост и не более 34 одновременных подключений в целом в первом примере, как в IE6 Результат будет такой, потому что все четыре запроса мы make относятся к одному и тому же хосту («test.loadimpact.com»), 2 соединения будут использоваться для параллельного извлечения 2 вещей. Если каждая транзакция занимает, например. 100 мс означает, что весь пакет запросов займет в общей сложности 200 мс для IE6.

А вот тот же код, но вместо этого эмулирующий Chrome 22

-- Emulating Chrome 22
http.set_user_agent_string("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1")
http.set_max_connections(17, 6)
-- make several HTTP requests as Chrome 22
http.request_batch({
  {"GET", "http://test.loadimpact.com/"},
  {"GET", "http://test.loadimpact.com/index.php"},
  {"GET", "http://test.loadimpact.com/news.php"},
  {"GET", "http://test.loadimpact.com/contacts.php"}
})

Chrome 22 использует до 6 одновременных подключений к одному хосту, и всего до 17 одновременных подключений. В нашем примере это означало бы, что Chrome смог открыть 4 одновременных соединения с хостом «test.loadimpact.com» и получить все четыре элемента параллельно. Если для получения каждого элемента требуется 100 мс, это будет означать, что весь пакет запросов был выполнен всего за 100 мс.

Строка User-Agent, которую мы установили в обоих примерах, будет отправлена ​​в HTTP-заголовке «User-Agent:» на веб-сервер, когда наш смоделированный клиент делает запрос, заставляя удаленный веб-сервер полагать, что клиент использует эту конкретную комбинацию браузера и платформы. Для некоторых сайтов это может привести к доставке специализированного контента, адаптированного для конкретного браузера и/или платформы.

Поскольку Chrome использует в три раза больше одновременных подключений к одному и тому же хосту, чем IE6, когда он извлекает данные, это означает, что он может получать данные намного быстрее (до трех раз быстрее). Это также подвергает целевой хост/систему гораздо большему давлению, поэтому важно эмулировать правильное сочетание браузеров при запуске нагрузочного теста.

Чтобы узнать больше о характеристиках браузера, влияющих на производительность, Browserscope является хорошим источником информации.

person Ragnar    schedule 17.04.2015