2009-11-11 4 views
2

Мне было поручено найти решение для тестирования производительности для одного из наших приложений Java, работающих на сервере Weblogic. Требование состоит в том, чтобы записывать производственные запросы (как GET, так и POST, включая данные POST), а затем запускать эти запросы в среде тестирования производительности с копией производственной базы данных.Приложение для тестирования производительности для шеек бутылок с использованием производственных данных

Причины использования запросов производства вместо тестового сценария являются:

  1. Это большое приложение без каких-либо существующих тестовых сценариев, так что было бы аа большой объем работы, чтобы писать сценарии, чтобы покрыть все заявки ,
  2. Некоторые проблемы с производительностью возникают, когда пользователи выполняют ряд действий в определенном порядке.
  3. Для проверки использования фактического взаимодействия пользователя с системой не является оценка того, как пользователи могут взаимодействовать с системой. Мы все знаем, что пользователи будут делать то, о чем мы не думали.
  4. Я хочу, чтобы уметь исправлять проблемы с производительностью и повторно запускать запросы против фиксированного кода перед выпуском на производство.

Я посмотрел на использование JMeters Access Log Sampler с журналов доступа сервера, однако журналы доступа не содержат данные POST и журнал пробоотборник доступа выглядит только по запросу URL, поэтому он не может имитировать пользователей подавших данные формы.

Я также рассмотрел использование HTTP-прокси-сервера JMeter, однако он может записывать действия только одного пользователя и требует от пользователя настройки своего браузера для использования прокси-сервера. Это же ограничение существует с Tsung и The Grinder.

Я рассмотрел использование Wireshark и TCReplay, но запись на уровне пакетов чрезмерна и не даст никаких полезных отчетов на уровне запроса.

Есть ли лучший способ анализа производительности продукции, учитывая, что мне нужно иметь возможность тестировать исправления до выпуска продукции?

ответ

0

Это сложный вопрос. Я работаю с Visual Studio Test Edition для загрузки тестов моих приложений, и мы можем «оценивать» активность пользователей на сайте.

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

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

Это is возможно изменить ваше веб-приложение, чтобы записывать и регистрировать каждый запрос и сообщение против сеанса и даты и времени. Затем это пользовательское ведение журнала может использоваться для генерации запросов на тестирование нагрузки на тестовом веб-сайте. Это будет серьезное изменение кода на вашем существующем сайте и, скорее всего, приведет к снижению производительности.

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

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

+0

Спасибо за отличный ответ Nat. Я думаю, что лучший вариант - использовать фильтр сервлетов Weblogic. Это дает мне доступ к объекту ServletRequest, который затем я могу вытащить данные POST и другие данные и записать их в журнал. Затем я могу использовать данные журнала для ввода в приложение. Это будет иметь неизвестное влияние на производительность. К счастью, он должен будет работать в течение короткого периода времени, чтобы получить образец производственного взаимодействия. – JosephL

0

Пожалуйста, проверьте эту Whitepaper по Толчком Technologies на этой странице .. http://www.impetus.com/plabs/sandstorm.html

+0

В секции записи бумаги белой «Запись сценария осуществляется с помощью SANDSTORM в записи инструмент. Инструмент записи является прокси-сервером, который фиксирует связь между реальным клиентским приложением и сервером. После процесс записи, генерируется тестовый сценарий, который впоследствии может быть назначен виртуальным пользователям ». Это звучит точно так же, как прокси-сервер JMeter HHTP, где он управляет одним действием пользователей. Мое требование - захватить трафик на сервер от всех пользователей. – JosephL

0

Честно говоря, я не уверен, что задача, которую вы попросили сделать это даже возможно, не говоря уже о хорошей идеей. В зависимости от того, насколько сложным является бэкэнд приложения, и насколько совершенным вы можете воссоздать состояние (то есть: вплоть до внешних служб SOA или время/часы), может быть невозможно заставить эти запросы GET и POST воспроизводить то же самое поведение.

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

Удачи вам!

0

Я хотел бы предложить следующее, чтобы получить производственные запросы и моделировать точную нагрузку:

1) Используйте Coremetrics: Coremetrics предоставляет такие решения, с помощью которых вы можете знать характер использования приложения. Это поможет при разработке точной модели рабочей нагрузки. Затем эта модель может быть преобразована в тестовые сценарии и выполнена против маскированной копии производственной базы данных. Это даст вам точные результаты о производительности приложения в реальном времени.

2) Еще один вариант - создать небольшую утилиту, использующую AOP (ориентированный на объект apporach), чтобы он мог отслеживать все запросы и соответствующие трассы методов. Это поможет определить модель использования продукции и, в свою очередь, точное моделирование рабочей нагрузки. Можно использовать рамки AOP, такие как AspectJ. Это не потребует никаких изменений в коде. Инструментарий можно выполнить «на лету». Другим преимуществом было бы то, что thi cna можно включить только для определенного временного окна, а затем его можно отключить.

С уважением, batterywalam

 Смежные вопросы

  • Нет связанных вопросов^_^