Как мне создать пользовательский сценарий, включающий несколько страниц на моем веб-сайте и имитирующий реалистичное поведение пользователя?

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

Я хочу, чтобы мой нагрузочный тест был реалистичным. Как создать пользовательский сценарий Load Impact, который имитирует реалистичное поведение пользователя, доступ к разным страницам, а также более частый доступ к некоторым страницам (например, домашней странице), как это сделали бы настоящие пользователи?


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


Ответы (3)


Если на вашем сайте есть 3 страницы, которые могут посещать пользователи, и вы знаете, сколько раз каждая страница посещается пользователями, вы можете рассчитать «вес» каждой страницы и создать пользовательский сценарий, который имитирует посетителя того же типа. паттерн на сайте, который демонстрируют реальные пользователи. Это пример того, как это сделать.

Во-первых, мы должны выяснить, насколько популярна каждая из трех страниц. Это можно сделать, посмотрев статистику, например. Google Analytics, чтобы узнать, сколько раз каждая страница была посещена за последний месяц или около того. Допустим, у нас есть эти цифры:

==== Page ====    ==== Visits/day ====
/                 8453
/news.php         1843
/contacts.php     277

Общее количество посещений страницы 10573 (8453+1843+277). Если мы разделим каждое отдельное число на общее количество, мы получим «вес» (процент) для этой конкретной страницы, то есть насколько велика вероятность того, что случайная загрузка страницы на сайте приведет к загрузке этой конкретной страницы:

==== Page ====    ==== Visits/day ====    =========== Weight ===========
/                 8453                    0.799 (79.9% of all page loads)
/news.php         1843                    0.174 (17.4% of all page loads)
/contacts.php     277                     0.026 (2.6% of all page loads)

Теперь мы можем создать наш пользовательский сценарий, который имитирует реальный трафик на нашем сайте, то есть будет использовать наш веб-сервер так же, как это делают настоящие пользователи. Вот код:

-- We create functions for each of the three pages. Calling one of these functions 
-- will result in the simulated client loading all the resources necessary for rendering
-- the page. I.e. the client will perform one page load of that particular page.
--
-- Main/start page
local page1 = function()
    -- First load HTML code
    http.request_batch({
        "http://test.loadimpact.com/"
    })
    -- When HTML code is done loading, start loading other resources that are
    -- referred to in the HTML code, emulating the load order a real browser uses
    http.request_batch({
        "http://test.loadimpact.com/style.css",
        "http://test.loadimpact.com/images/logo.png"
    })
end
--
-- /news.php page
local page2 = function()
    -- This example page consist of only one resource - the main HTML code for the page
    http.request_batch({
        "http://test.loadimpact.com/news.php"
    })
end
--
-- /contacts.php page
local page3 = function()
    -- This example page consist of only one resource - the main HTML code for the page
    http.request_batch({
      "http://test.loadimpact.com/contacts.php"
    })
end
--
--
-- Get a random page to load, using our page weights that we found out earlier
--
-- Generate a value in the range 0-1
local randval = math.random()
-- Find out which page to load
if randval <= 0.799 then
    -- 79.9% chance that we load page1
    page1()
elseif randval <= (0.799 + 0.174) then  
    -- 17.4% chance that page2 gets loaded
    page2()
else
    -- ...and the rest of the time (2.7%), page3 gets loaded
    page3()  
end
person Ragnar    schedule 01.04.2015

Я предлагаю использовать автоматизированный инструмент веб-тестирования.

Одним из вариантов является JMeter. Инструкции по созданию план тестирования для базового тестирования веб-сайта, в том числе; действия пользователя, количество пользователей, скорость и частота выполнения, а также сбор данных.

Еще одним вариантом базовых веб-скриптов является Selenium IDE.

Или, если у вас есть опыт программирования, я бы рассмотрел использование Selenium Web Driver. Это дает вам максимальную гибкость и может интегрироваться в существующий тестовый проект Java, C#, Python и т. д. Он также хорошо масштабируется и может быть интегрирован со службами непрерывной интеграции, такими как Sauce Labs.

person StCleezy    schedule 02.04.2015

Существует также возможность записи поведения пользователя для создания сценариев для Load Impact.

Справочные материалы и инструкции находятся здесь Моделирование реалистичной нагрузки

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

Выяснение того, сколько пользователей вы должны иметь в своем тесте, — это немного другой вопрос, и я отложу его расширение до тех пор, пока оно действительно не понадобится.

person Michael Sjolin    schedule 13.04.2015