Скрипты тестирования производительности

Прежде чем пользователи получат доступ к новой установкеJIRA  и ее настройке, полезно понять, как она будет работать под ожидаемой нагрузкой. Скрипты, которые генерируют загрузку запроса ('request') (или использования), предоставляются в нашем общедоступном репозитории Maven (ссылка ниже). Используя эти скрипты, вы можете узнать, где, возможно, вам нужно будет заранее улучшить настройку, чтобы устранить узкие места.

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

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

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

Аналогичным образом, при внесении изменений в установку JIRA для устранения узких мест производительности полезно оценить влияние этих изменений в тестовой установке JIRA перед их внедрением в производство.

Предпосылки

Вам понадобится следующее:

 

  • Установка JIRA, настройка и запуск с пользователем администратора. В сценариях предполагается, что комбинация имени пользователя и пароля этого пользователя - «admin» / «admin».
  • Рекомендуется протестировать базу данных качества производства, например, одну из них, указанную на странице Поддерживаемые платформы. Не используйте HSQLDB.
  • Apache JMeter (в настоящее время версия 2.3.4). Если вы собираетесь выполнять тестирование с высокой нагрузкой, используйте вместо этого нашу измененную версию JMeter (для которой требуется Java 1.6).
  • Скрипты тестирования нагрузки и ресурсы, доступные в нашем общедоступном хранилище Maven - выберите версию, которая наиболее точно соответствует вашей версии JIRA, и загрузите файл ZIP или Gzip в этом каталоге. Если есть сомнения, загрузите архив ZIP-архива.

Быстро, просто скажите мне, как запускать эти тесты!

Если вы не хотите читать остальную часть этого документа, вот основные моменты:

  1. Создайте (Create) настройки testdata:

<jmeter location>/bin/jmeter -n -t jmeter-test-setup.jmx -Jadmin.user=<username> -Jadmin.pass=<password>

 

  1. Запустите (Run) тест с фиксированной нагрузкой (fixed load test):

<jmeter location>/bin/jmeter -n -t jmeter-test-fixedload.jmx

Остальная часть этого документа - это просто разработка этих двух этапов.

 

Тесты производительности

Тесты производительности JIRA состоят из двух частей:

Тест установки

Тест установки отвечает за:

  • Создание проектов
  • Создание пользователей
  • Создание и комментирование (и, возможно, решение) задач.

Выполнение теста установки:

После извлечения файла zip-теста производительности перейдите в каталог performanceTest. Из этого каталога запустите тест настройки производительности:


<jmeter location> / bin / jmeter -n -t jmeter-test-setup.jmx -Jadmin.user = <имя_пользователя> -Jadmin.pass = <пароль>

где <jmeter.location> является базовым каталогом JMeter

 

Если вы опустите ключ -n, JMeter будет работать как графический интерфейс. Затем вы можете запустить тест из GUI.

 

Как видно выше с параметрами admin.user и admin.pass, JMeter поддерживает -Jparameter = значение аргументов команды, чтобы контролировать выполнение. Следующие параметры контролируют выполнение теста установки:

 

Управление конфигурацией

Параметр

По умолчанию

Обьяснение

jira.host

localhost

Имя хоста или адрес установки JIRA.

jira.port

8000

Сетевой порт, на котором запущена установка JIRA.

jira.context

/

Контекст веб-приложения JIRA

admin.user

admin

Имя пользователя-администратора.

admin.pass

admin

Пароль администратора.

script.base

.

Расположение тестов производительности. Это следует устанавливать только в том случае, если вы запускаете тесты вне пределов каталога сценариев.

remove.data

false

Запуск сценария с этим допуском  приведет к удалению пользователей и проектов, созданных тестом.

 

Пользовательский контроль

Параметр

По умолчанию

Объяснение

create.users.enable

true

Создайте пользователей в целевой установке JIRA. Используйте false, если у вас уже есть пользователи, созданные в другом месте.

browseissue.max

250

Количество пользователей, которые будут созданы для просмотра установки JIRA (так называемые пользователи browseissue).

createissue.max

250

Количество пользователей, которые будут созданы для создания задач (например, пользователи «createissue»).

editissue.max

250

Количество пользователей, которые будут созданы для редактирования задач (например, пользователи «editissue»).

search.max

250

Количество пользователей, которые будут созданы для поиска задач (например, пользователей «поиска»).

useraction.max

250

Количество пользователей, которые будут созданы для просмотра пользовательской информации (так называемые пользователи useraction).

browseissue.groupname

никто

Группа, в которую будут помещаться пользователи «browseissue». Используйте none для группы.

createissue.groupname

JIRA-разработчики

Группа, в которую будут помещены пользователи «createissue». Используйте none для группы.

editissue.groupname

JIRA-разработчики

Группа, к которой будут добавлены пользователи «editissue». Используйте none для группы.

search.groupname

никто

Группа, в которую будут помещаться пользователи поиска. Используйте none для группы.

useraction.groupname

JIRA-разработчики

Группа, к которой будут добавлены пользователи «useraction». Используйте none для группы.

 

Контроль проекта

Параметр

По умолчанию

Объяснение

create.projects.enable

true

Создавайте проекты. Используйте false, если вы хотите использовать существующие проекты (в существующих данных).

project.max

20

Количество проектов для создания в системе.

 

Контроль задач

Параметр

По умолчанию

Объяснение

create.issues.enable

true

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

issue.max

3000

Количество задач, которые необходимо создать.

issue.comment.enable

true

Контролирует, добавляются ли комментарии к задачам.

issue.comment.max

10

Если issue.comment.enable истинно, то количество фактических комментариев, созданных по задаче, выбирается случайным образом между 0 и этим значением.

issue.close

true

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

issue.close.percentage

60

Если параметр issue.close включен, то это значение определяет процент закрытых задач.

issue.setupload.threads

10

Количество потоков, используемых для создания задач.

issue.setupload.pause

50

Количество времени (в миллисекундах), для которого имитируемый пользователь хочет «бездействовать» между каждым запросом(request) во время создания задачи.

resource.dir

ресурсы

Каталог, содержащий ресурсы данных CSV.

 

Вывод теста

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


jmeter -n -t jmeter-test-setup.jmx
Created the tree successfully using jmeter-test-setup.jmx
Starting the test @ Mon Oct 26 23:53:28 CDT 2009 (1256619208435)
Generate Summary Results +   931 in  31.3s =   29.7/s Avg:    26 Min:    13 Max:  3256 Err:     0 (0.00%)
Generate Summary Results +  2948 in 180.0s =   16.4/s Avg:    31 Min:     8 Max:  1162 Err:     0 (0.00%)
Generate Summary Results =  3879 in 211.4s =   18.3/s Avg:    29 Min:     8 Max:  3256 Err:     0 (0.00%)
Generate Summary Results +  5048 in 179.9s =   28.1/s Avg:    44 Min:     7 Max:   936 Err:     0 (0.00%)
Generate Summary Results =  8927 in 391.4s =   22.8/s Avg:    37 Min:     7 Max:  3256 Err:     0 (0.00%)
Generate Summary Results +  3114 in 180.1s =   17.3/s Avg:    41 Min:     7 Max:   805 Err:     0 (0.00%)
Generate Summary Results = 12041 in 571.3s =   21.1/s Avg:    38 Min:     7 Max:  3256 Err:     0 (0.00%)
Generate Summary Results +  4956 in 179.8s =   27.6/s Avg:    45 Min:     7 Max:  1844 Err:     0 (0.00%)
Generate Summary Results = 16997 in 751.4s =   22.6/s Avg:    40 Min:     7 Max:  3256 Err:     0 (0.00%)
Generate Summary Results +   313 in  17.1s =   18.3/s Avg:    37 Min:     7 Max:   165 Err:     0 (0.00%)
Generate Summary Results = 17310 in 768.5s =   22.5/s Avg:    40 Min:     7 Max:  3256 Err:     0 (0.00%)
Tidying up ...    @ Tue Oct 27 00:06:17 CDT 2009 (1256619977181)
... end of run

Этот вывод данных будет обновляться каждые 3 минуты, показывая самую последнюю активность, а также резюме для всего теста.

Журналы результатов

В дополнение к этим итоговым данным, которые выводятся в командной строке, файлы журналов создаются как для успешных (jmeter-results-setup.jtl), так и для неудачных (jmeter-assertions-setup.jtl) результатов. Эти файлы журнала сохраняются в формате JTL (который основан на XML). Существует несколько парсеров ( синтаксических анализаторов), которые будут генерировать графики из этих файлов журнала. Для получения дополнительной информации см. страницу вики JMeter в журнале Analysis.

Тест с фиксированной нагрузкой

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

 

Этот тест имеет ряд параметров для настройки поведения. По умолчанию тест имеет следующее поведение и стратегию:

  • Несколько групп пользователей, все работают одновременно в течение фиксированного времени, каждый из которых имеет небольшую задержку между задачами.
    • Пользователи «Изменить задачу» (Edit Issue) (editissue) просматривают проект, а затем пытаются найти задачу. Они будут комментировать, редактировать или изменять рабочий процесс этой задачи.
    • Пользователи (User Action) (useraction) User Action создают фильтры, просматривают часы и голоса.
    • Пользователи «Обзор задач» (Browse Issue) (browseissue) просматривают проекты и проблемы.
    • Пользователи «RSS» просматривают проект, а затем периодически берут RSS-ленту для этого проекта.
    • Пользователи «Создать задачи» (Create Issues) (createissue) добавляют в экземпляр новые задачи.
    • Пользователи «Поиск задач» (Search Issues) (search) ищут задачи, используя текстовое поле быстрого поиска.

 

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

Выполнение теста с фиксированной нагрузкой:


<jmeter location>/bin/jmeter -n -t jmeter-test-fixedload.jmx

Как и в случае теста установки (выше), эта команда будет запускать тест с фиксированной нагрузкой со значениями по умолчанию. Аналогичным образом, можно управлять выполнением JMeter с параметрами -J. Тест с фиксированной нагрузкой имеет следующие доступные параметры:

Управление конфигурацией

Параметр

По умолчанию

Объяснение

jira.host

localhost

Имя хоста или адрес установки JIRA.

jira.port

8000

Сетевой порт, на котором запущена установка JIRA.

jira.context

/

JIRA контекст webapp.

admin.user

admin

Имя пользователя-администратора.

admin.pass

admin

Пароль администратора.

script.base

.

Расположение тестов производительности. Это должно только быть установлено, если Вы выполняете тесты снаружи каталога скриптов.

script.runtime

1800

Количество времени для запуска (в секундах).

resource.dir

resources

Подкаталог, содержащий файлы CSV ресурсов. Замените это, если вы хотите настроить внутренние данные.

 

Редактировать задачу

Параметр

По умолчанию

Объяснение

editissue.threads

5

Количество одновременных пользователей «Редактировать задачу» для имитации.

editissue.pause

15000

Пауза между каждым запросом(request) пользователя «Редактировать задачу» (в миллисекундах).

workflow.matchname

(Закрыть | Разрешить) (Close | Resolve)

Регулярное выражение для соответствия процессу рабочего процесса.

editworkflow.percentage

20

Процент запросов(requests) пользователя «Редактировать задачу» (Edit Issue), которые будут пытаться изменить рабочий процесс задачи.

addcomment.percentage

60

Процент запросов (requests) пользователя «Редактировать задачу» (Edit Issue) который попытается добавить комментарий к задаче.

editissue.percentage

20

Процент запросов (requests) пользователя «Редактировать задачу» (Edit Issue), который попытается редактировать задачу.

editissue.issuestoown

5

Количество задач, которые тест пытается назначить пользователю «Редактировать задачу» (Edit Issue).

 

Действия пользователя

Параметр

По умолчанию

Объяснение

useraction.threads

1

Количество одновременных пользователей «Действия пользователя» (User Action)  для имитации.

useraction.pause

40000

Пауза между каждым пользовательским запросом(request) «Действия пользователя» (User Action) (в миллисекундах).

createfilter.percentage

10

Процент запросов (requests) пользователя «Действия пользователя» (User Action) , который будет пытаться создать фильтр.

viewwatches.percentage

10

Процент запросов(requests) пользователя «Действия пользователя» (User Action), который будет пытаться «просматривать часы».

viewvotes.percentage

10

Процент запросов(requests) пользователя «Действия пользователя» (User Action), который будет пытаться просматривать голоса.

 

Обзор задач и проектов

Параметр

По умолчанию

Объяснение

browseissue.threads

40

Количество одновременных пользователей «Обзор задачи» (Browse Issue) для имитации.

browseissue.pause

3000

Пауза между каждым запросом (request) пользователя «Обзор задачи» (Browse Issue) (в миллисекундах).

userprofile.percentage

10

Процент запросов пользователя «Обзор задачи» (Browse Issue), который попытается просмотреть профиль пользователя.

browsedashboard.percentage

20

Процент запросов пользователя «Обзор задачи» (Browse Issue), который попытается просмотреть панель управления.

dashboard.category

allprojects

Категория проекта для запросов(requests) гаджета статуса проекта.

 

 

RSS – новостная  лента

Параметр

По умолчанию

Объяснение

browserss.threads

10

Количество одновременных пользователей RSS для имитации.

browserss.pause

60000

Пауза между каждым запросом (request) пользователя «RSS» (в миллисекундах).

 

Создать задачи

Параметр

По умолчанию

Объяснение

issue.create.threads

10

Количество одновременных пользователей «Создать задачу» (Create Issues) для имитации.

issue.create.pause

15000

Пауза между каждым запросом(request) пользователя «Создать задачу» (Create Issues) (в миллисекундах).

issue.comment.max

2

Максимальное количество комментариев по задаче. Фактическое число выбирается случайным образом между 0 и этим значением.

 

Поиск задач

Параметр

По умолчанию

Объяснение

search.threads

2

Количество одновременных пользователей «Поиск» (Search) для имитации.

search.pause

15000

Пауза между каждым запросом (request) пользователя «Поиск» (Search) (в миллисекундах).

 

Вывод теста

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


jmeter -n -t jmeter-test-fixedload.jmx
Created the tree successfully using jmeter-test-fixedload.jmx
Starting the test @ Wed Oct 28 01:13:22 CDT 2009 (1256710402435)
Waiting for possible shutdown message on port 4445
Generate Summary Results +   568 in  97.9s =     5.8/s Avg:    62 Min:     1 Max:  1534 Err:     0 (0.00%)
Generate Summary Results +  3861 in 179.4s =    21.5/s Avg:    39 Min:     0 Max:   494 Err:     0 (0.00%)
Generate Summary Results =  4429 in 277.4s =    16.0/s Avg:    42 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results +  7356 in 180.0s =    40.9/s Avg:    37 Min:     0 Max:   481 Err:     0 (0.00%)
Generate Summary Results = 11785 in 457.3s =    25.8/s Avg:    39 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 10841 in 180.1s =    60.2/s Avg:    38 Min:     0 Max:   995 Err:     0 (0.00%)
Generate Summary Results = 22626 in 637.4s =    35.5/s Avg:    39 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 11821 in 180.3s =    65.6/s Avg:    37 Min:     0 Max:   507 Err:     0 (0.00%)
Generate Summary Results = 34447 in 817.3s =    42.1/s Avg:    38 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 11904 in 180.9s =    65.8/s Avg:    38 Min:     0 Max:   658 Err:     0 (0.00%)
Generate Summary Results = 46351 in 997.4s =    46.5/s Avg:    38 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 11697 in 180.3s =    64.9/s Avg:    38 Min:     0 Max:   488 Err:     0 (0.00%)
Generate Summary Results = 58048 in 1177.4s=    49.3/s Avg:    38 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 11731 in 180.0s =    65.2/s Avg:    39 Min:     0 Max:   810 Err:     0 (0.00%)
Generate Summary Results = 69779 in 1357.4s=    51.4/s Avg:    38 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 11646 in 180.0s =    64.7/s Avg:    39 Min:     0 Max:   776 Err:     0 (0.00%)
Generate Summary Results = 81425 in 1537.4s=    53.0/s Avg:    38 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results + 11810 in 180.0s =    65.6/s Avg:    39 Min:     0 Max:   798 Err:     0 (0.00%)
Generate Summary Results = 93235 in 1717.3s=    54.3/s Avg:    38 Min:     0 Max:  1534 Err:     0 (0.00%)
Generate Summary Results +  5453 in 109.1s =    50.0/s Avg:    42 Min:     0 Max:   858 Err:     0 (0.00%)
Generate Summary Results = 98688 in 1826.4s=    54.0/s Avg:    39 Min:     0 Max:  1534 Err:     0 (0.00%)
Tidying up ...    @ Wed Oct 28 01:43:49 CDT 2009 (1256712229128)
... end of run

Этот вывод текста будет обновляться каждые 3 минуты, показывая самую последнюю активность, а также резюме для всего теста.

Журналы результатов

Как и ранее, в командной строке будет отображаться вывод, а файлы журнала будут созданы как для успешных (jmeter-results-setup.jtl), так и для неудачных (jmeter-assertions-setup.jtl) результатов. Эти файлы журнала сохраняются в формате JTL (на основе XML). Существует несколько парсеров (синтаксических анализаторов), которые будут генерировать графики из этих файлов журналов. Для получения дополнительной информации см. страницу вики JMeter в анализе журнала.

 

По материалам Atlassian JIRA Administrator's Guide: Performance Testing Scripts