Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Генерация репрезентативных данных для тестов производительности рельсов

Автор вопроса: tstyleОтветов: 1

Конкретная страница моего сайта ruby ​​on rails работает медленно.

Чтобы понять, что происходит, я попытался выполнить это руководство при настройке этого простого теста на локальном хосте:

class BrowsingTest < ActionDispatch::PerformanceTest
  def test_homepage
    get '/slow_page'
  end
end

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

1) Каким-то образом скопируйте данные с рабочего сервера и вставьте их в тестовую базу данных (есть ли простой способ сделать это?)

OR

2) Создайте много пользователей и сообщений, используя файлы тестовых приспособлений .yml.

OR

3) Поместите код в seed.rb для создания пользователей и сообщений. (Я пытался сделать это, но по какой-то причине материал, который я генерирую в этом файле, исчезает к тому времени, когда мой PerformanceTest запускается

4) Я наткнулся на некоторые жемчужины, такие как Factory Girl и Faker. Я еще не пробовал их, но из того, что я читал, кажется, что они больше предназначены для создания конкретных ситуаций и состояний, чем для создания тысяч пользователей для тестирования производительности.

Я думал, что это будет обычный сценарий, и хотел бы получить несколько советов от тех, кто это сделал. Спасибо.

ruby-on-railsunit-testingtestingperformanceprofiling

Ответы

Ответ 1 · рейтинг 2 · Elad

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

На практике вы хотите сделать следующее:

  • Скопируйте свою производственную базу данных и используйте ее для тестов производительности - это гарантирует, что любые запросы, которые выполняются медленно в производстве, например, из-за больших таблиц, отсутствующих индексов, слишком большого количества индексов, влияющих на скорость обновления и т. д., сделают то же самое в ваших тестах.
  • Проанализируйте журналы вашего веб-сервера, чтобы определить количество одновременных запросов на медленных страницах в часы пик, и создайте такую ​​же нагрузку (или выше - в зависимости от ваших ожиданий роста) в ваших тестах.
  • Возможно, вы захотите взглянуть на сервисы, которые предлагают приближенные значения реальной нагрузки от распределенной сети серверов. Например, взгляните на Mob браузера.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы