Всем привет!
Хочу поделиться своим опытом нагрузочного тестирования Atlassian Jira, Confluence и Bitbucket c использованием инструмента Atlassian dc-app-performance-toolkit.
Это будет серия статей, в которых я не буду рассказывать про методологию нагрузочного тестирования, а расскажу только о технических аспектах нагрузочного тестирования с помощью упомянутого инструмента.
Если Вы хотите больше узнать про методологию нагрузочного тестирования в контексте продуктов Atlassian, то я про это рассказывал на Highload 2018.
Итак, перейдем к dc-app-performance-toolkit.
Этот инструмент позволяет Вам нагрузочно протестировать такие приложения Atlassian как Jira, Confluence и Bitbucket. Я узнал про этот инструмент, когда мне нужно было протестировать плагин Atlassian Jira для сертификации на Data Center, и сразу же мне этот инструмент понравился, потому что мне не пришлось тратить часы на его настройку. Все заработало из коробки.
В инструменте используется Taurus, jmeter и Selenium.
Вы можете использовать этот инструмент для следующих целей:
Шаги, которые необходимо выполнить для тестирования Atlassian Jira, Confluence и Bitbucket, в большинстве случаев одинаковы, поэтому я буду выполнять все действия на Atlassian Jira. Если будут какие-то специфические шаги для продукта, то я про это упомяну.
Первым делом нужно взять инструмент с github:
И перейти в созданную папку:
Далее нужно установить все зависимости для использования инструмента. Вы можете прочитать, как это сделать в path_to_dc_app_performance_toolkit/README.md.
Перед тем, как пользоваться инструментом, пожалуйста, прочитайте документацию к этому инструменту в папке path_to_dc_app_performance_toolkit/doc.
Вот краткое описание содержимого этой папки:
Перед тем, как запускать нагрузочное тестирование Вам необходимо внести изменения в файл jira.yml, confluence.yml или bitbucket.yml, которые находятся в папке path_to_dc_app_performance_toolkit/app, в зависимости от того, какой продукт Вы собираетесь тестировать. Это файлы конфигурации Taurus. Почитать про Taurus Вы можете вот здесь.
Я дам комментарии к jira.yml. Файлы для других продуктов строятся по такому же принципу.
settings — это секция конфигурационного файла Taurus. Она содержит верхнеуровневые параметры для Taurus. Вы можете найти более подробную информацию по этой секции вот здесь.
artifacts-dir — шаблон пути, который будет использоваться для хранения артефактов нагрузочного тестирования. Вот неполный список артефактов:
aggregator — агрегатор, который будет использоваться для сбора результатов тестирования и передачи результатов в модуль отчетности. Вы можете прочитать больше про агрегаторы вот здесь.
verbose — параметр для запуска Taurus в режиме дебага. В нашем случае мы выключем этот режим.
env позволяет установить переменные среды. Вы можете больше прочитать здесь.
Параметры выше содержат информацию о Вашем экземпляре, который Вы собираетесь протестировать. Я указал параметры к экземпляру Jira, который располагается на моем компьютере. Эти параметры будут использоваться в JMeter, Selenium и скриптах.
Эти параметры будут переданы в секцию execution. Я объясню значение этих параметров, когда будут говорить про эту секцию.
WEBDRIVER_VISIBLE устанавливает видимость браузера Chrome во время выполнения тестов Selenium. Мы скрываем Chrome.
JMETER_VERSION — версия JMeter, которую мы будем использовать для тестирования.
services — секция конфигурационного файла Taurus. Здесь указывается информация о том, какие скрипты нужно запустить перед запуском, после и во время выполнения теста. Больше про эту секцию можно почитать здесь.
Shell executor используется для выполнения скриптов.
Prepare, shutdown и post-process это этапы жизненного цикла Taurus. Вы можете почитать больше о жизненном цикле Taurus вот здесь. На каждом этапе запускаются скрипты. Вот эти скрипты:
execution — секция конфигурационного файла Taurus. Содержит сценарии, которые будут выполняться при тестировании. Можно найти более подробную информацию здесь.
Это параметры выполнения сценария для JMeter. Вы можете найти больше информации здесь.
concurrency – число виртуальных пользователей. Этот параметр означает сколько одновременно работающих пользователей будет имитировать JMeter. В нашем случае мы имитируем 200 одновременно работающих пользователей.
ramp-up – время разгона теста. Мы будем выходить на 200 одновременно работающих пользователей постепенно. В нашем случае мы выйдем на 200 одновременно работающих пользователей за 3 минуты.
hold-for – продолжительность теста после выхода на заданное число одновременно работающих пользователей в параметре concurrency.
Параметры выполнения тестов Selenium. Вы можете найти больше информации здесь.
executor – Selenium.
runner – тесты будем проводить с помощью pytest.
hold-for – продолжительность тестирования.
scenarios — секция конфигурационного файла Taurus. Здесь приводится конфигурация для каждого сценария из секции execution.
script — путь к тестам Selenium.
script — путь к проекту JMeter, который будет выполнятся во время тестирования.
total_actions_per_hr число действий, которые будут выполнены за час. Одно действие — это выполнение одного теста. Тесты, которые будут запускаться можно понять из perc_ параметров.
perc_ параметры — процент выполнения каждого теста. Сумма всех perc_ параметров должна быть равна 100%.
modules — секция конфигурационного файла Taurus. Эта секция содержит описание всех модулей, которые будут использоваться во время тестирования.
jmeter — параметры JMeter модуля. Вы можете прочитать про модуль Jmeter здесь.
detect-plugins – JMeter Plugins Manager позволяет устанавливать плагины для JMeter автоматически. Мы устанавливаем этот параметр в yes, для того, чтобы Taurus сказал Jmeter, чтобы тот установил все необходимые плагины автоматически.
plugins – список плагинов JMeter, которые использовались при написании тестов.
system-properties – дополнительные параметры для JMeter.
selenium — параметры для Selenium.
chromedriver – версия драйвера Chrome, который мы будем использовать для тестирования.
reporting — секция конфигурационного файла Taurus. Здесь устанавливаются настройки для модулей анализа и отчетности. Мы используем модуль отчетности JUnit xml. Вы можете найти больше информации по этому модулю здесь.
Давайте подведем итог.
У нас 6 секций в файле jira.xml:
settings – верхнеуровневые настройки и параметры.
Вам необходимо изменить следующие параметры в этой секции:
Так же Вам, возможно, понадобится изменить следующие параметры:
Я изменил эти параметры на маленькие значения для того, чтобы тесты быстро отрабатывали.
Если Вы изменили test_duration и concurrency не забудьте проверить параметр ramp-up в секции execution. Возможно, Вам его тоже потребуется изменить.
services – скрипты, которые буду выполняться на этапах жизненного цикла тестов Taurus.
execution – параметры выполнения сценариев тестирования. Сначала запускаем JMeter, а потом Selenium.
scenarios – параметры сценариев тестирования. Возможно, Вам понядобится изменить количество операций в час и процентное соотношение тестов. О том как добавлять или удалять тесты я расскажу в одной из следующих частей.
modules – модули, используемые для тестов. Мы используем consolidator, JMeter и Selenium. Taurus обеспечивает нам наличие этих модулей во время тестирования.
reporting – параметры модуля отчетности.
Хорошо. Мы изменили файл конфигурации и готовы запускать тесты.
Первым делом активируйте Python virtual environment (Вы можете найти информацию об этим в файле README.md), перейдите в папку app и запустите тест:
В моем случае тест завершился с ошибкой:
Все правильно. Мое экземпляр Jira пуст. Необходимо наполнить его данными для тестирования. Я расскажу, как это сделать, в части 2.
Хочу поделиться своим опытом нагрузочного тестирования Atlassian Jira, Confluence и Bitbucket c использованием инструмента Atlassian dc-app-performance-toolkit.
Это будет серия статей, в которых я не буду рассказывать про методологию нагрузочного тестирования, а расскажу только о технических аспектах нагрузочного тестирования с помощью упомянутого инструмента.
Если Вы хотите больше узнать про методологию нагрузочного тестирования в контексте продуктов Atlassian, то я про это рассказывал на Highload 2018.
Итак, перейдем к dc-app-performance-toolkit.
Этот инструмент позволяет Вам нагрузочно протестировать такие приложения Atlassian как Jira, Confluence и Bitbucket. Я узнал про этот инструмент, когда мне нужно было протестировать плагин Atlassian Jira для сертификации на Data Center, и сразу же мне этот инструмент понравился, потому что мне не пришлось тратить часы на его настройку. Все заработало из коробки.
В инструменте используется Taurus, jmeter и Selenium.
Вы можете использовать этот инструмент для следующих целей:
- Вы разрабатываете плагины для Atlassian Marketplace. В этом случае Вы можете использовать этот инструмент для сертификации своего плагина для Data Center.
- Вы используете Atlassian Jira, Confluence и Bitbucket для собственных нужд и дорабатываете эти продукты с помощью стандартных средств, скриптов, плагинов или же любыми другими способами, и Вы хотите понять насколько Ваша конфигурация выдержит нагрузку. В этом случае Вы тоже можете использовать данный инструмент. Причем важно отметить, что Вы можете проводить нагрузочное тестирование на Ваших собственных данных. Для этого Вам не придется что-то переделывать в инструменте. В документации к инструменту написано, что он поддерживает только определенные версии продуктов Atlassian, но если у Вас не совсем древняя версия продуктов Atlassian, то инструмент, скорее всего, будет работать без дополнительных доработок. В любом случае, в этой серии статей я расскажу как модифицировать инструмент.
Шаги, которые необходимо выполнить для тестирования Atlassian Jira, Confluence и Bitbucket, в большинстве случаев одинаковы, поэтому я буду выполнять все действия на Atlassian Jira. Если будут какие-то специфические шаги для продукта, то я про это упомяну.
Установка
Первым делом нужно взять инструмент с github:
git clone https://github.com/atlassian/dc-app-performance-toolkit.git
И перейти в созданную папку:
cd dc-app-performance-toolkit
Далее нужно установить все зависимости для использования инструмента. Вы можете прочитать, как это сделать в path_to_dc_app_performance_toolkit/README.md.
Файлы конфигурации
Перед тем, как пользоваться инструментом, пожалуйста, прочитайте документацию к этому инструменту в папке path_to_dc_app_performance_toolkit/doc.
Вот краткое описание содержимого этой папки:
- В корне находятся 3 md файла (один для Jira, один для Confluence и один для Bitbucket). В этих файлах Вы можете найти информацию, как проводить нагрузочное тестирование с ипользованием этого инструмента для сертификации плагина на Data Center.
- Три папки: jira, confluence и bitbucket с информацией о том, как запускать нагрузочные тесты для каждого из продуктов.
jira.yml
Перед тем, как запускать нагрузочное тестирование Вам необходимо внести изменения в файл jira.yml, confluence.yml или bitbucket.yml, которые находятся в папке path_to_dc_app_performance_toolkit/app, в зависимости от того, какой продукт Вы собираетесь тестировать. Это файлы конфигурации Taurus. Почитать про Taurus Вы можете вот здесь.
Я дам комментарии к jira.yml. Файлы для других продуктов строятся по такому же принципу.
settings:
settings — это секция конфигурационного файла Taurus. Она содержит верхнеуровневые параметры для Taurus. Вы можете найти более подробную информацию по этой секции вот здесь.
artifacts-dir: results/jira/%Y-%m-%d_%H-%M-%S
artifacts-dir — шаблон пути, который будет использоваться для хранения артефактов нагрузочного тестирования. Вот неполный список артефактов:
bzt.log
– лог команды bzt. Данная команда запускает нагрузочное тестирование.error_artifacts
– папка для хранения скриншотов и html тестов Selenium, которые завершились с ошибками.jmeter.err
– лог JMeter.kpi.jtl
– данные тестирования JMeter.pytest.out
– лог исполнения Selenum тестов.selenium.jtl
– данные тестирования Selenium.results.csv
– агрегированные результаты тестирования.jira.yml
– jira.yml, который использовался для тестирования.
aggregator: consolidator
aggregator — агрегатор, который будет использоваться для сбора результатов тестирования и передачи результатов в модуль отчетности. Вы можете прочитать больше про агрегаторы вот здесь.
verbose: false
verbose — параметр для запуска Taurus в режиме дебага. В нашем случае мы выключем этот режим.
env:
env позволяет установить переменные среды. Вы можете больше прочитать здесь.
application_hostname: localhost # Jira DC hostname without protocol and port e.g. test-jira.atlassian.com or localhost
application_protocol: http # http or https
application_port: 2990 # 80, 443, 8080, 2990, etc
application_postfix: /jira # e.g. /jira in case of url like http://localhost:2990/jira
admin_login: admin
admin_password: admin
Параметры выше содержат информацию о Вашем экземпляре, который Вы собираетесь протестировать. Я указал параметры к экземпляру Jira, который располагается на моем компьютере. Эти параметры будут использоваться в JMeter, Selenium и скриптах.
concurrency: 200
test_duration: 45m
Эти параметры будут переданы в секцию execution. Я объясню значение этих параметров, когда будут говорить про эту секцию.
WEBDRIVER_VISIBLE: false
WEBDRIVER_VISIBLE устанавливает видимость браузера Chrome во время выполнения тестов Selenium. Мы скрываем Chrome.
JMETER_VERSION: 5.2.1
JMETER_VERSION — версия JMeter, которую мы будем использовать для тестирования.
allow_analytics: Yes # Параметр, который включает и выключает передачу аналитики в Atlassian. Эта аналитика поможет Atlassian понять, как используется инструмент, и поможет понять, сколько ресурсов потратить на развитие этого инструмента.
services:
services — секция конфигурационного файла Taurus. Здесь указывается информация о том, какие скрипты нужно запустить перед запуском, после и во время выполнения теста. Больше про эту секцию можно почитать здесь.
- module: shellexec
Shell executor используется для выполнения скриптов.
prepare:
- python util/environment_checker.py
- python util/data_preparation/jira/prepare-data.py
shutdown:
- python util/jmeter_post_check.py
- python util/jtl_convertor/jtls-to-csv.py kpi.jtl selenium.jtl
post-process:
- python util/analytics.py jira
- python util/cleanup_results_dir.py
Prepare, shutdown и post-process это этапы жизненного цикла Taurus. Вы можете почитать больше о жизненном цикле Taurus вот здесь. На каждом этапе запускаются скрипты. Вот эти скрипты:
- util/environment_checker.py – проверяет версию Python и прекращает тест, если версия не та.
- util/data_preparation/jira/prepare-data.py – подготавливает данные тестирования. Мы поговорим об этом скрипте подробно в следующей части.
- util/jmeter_post_check.py – проверяет, существует ли файл kpi.jtl. Если этот файл не существует, значит что-то пошло не так во время тестирования JMeter.
- util/jtl_convertor/jtls-to-csv.py kpi.jtl selenium.jtl – создает файл results.csv на основе файлов kpi.jtl и selenium.jtl. Файл results.csv содержит агрегированную информацию. Вы можете найти в этом файле такие метрики как: среднее время выполнения теста, медиану, 90% линию, максимальное и минимальное время выполнения теста и другие метрики.
- util/analytics.py jira – отправляет аналитику в Atlassian. Вы можете отключить отправку в Atlassian с помощью параметра allow_analytics.
- util/cleanup_results_dir.py – удаляет временные файлы, которые были созданы во время тестирования.
execution:
execution — секция конфигурационного файла Taurus. Содержит сценарии, которые будут выполняться при тестировании. Можно найти более подробную информацию здесь.
- scenario: jmeter
concurrency: ${concurrency}
hold-for: ${test_duration}
ramp-up: 3m
Это параметры выполнения сценария для JMeter. Вы можете найти больше информации здесь.
concurrency – число виртуальных пользователей. Этот параметр означает сколько одновременно работающих пользователей будет имитировать JMeter. В нашем случае мы имитируем 200 одновременно работающих пользователей.
ramp-up – время разгона теста. Мы будем выходить на 200 одновременно работающих пользователей постепенно. В нашем случае мы выйдем на 200 одновременно работающих пользователей за 3 минуты.
hold-for – продолжительность теста после выхода на заданное число одновременно работающих пользователей в параметре concurrency.
- scenario: selenium
executor: selenium
runner: pytest
hold-for: ${test_duration}
Параметры выполнения тестов Selenium. Вы можете найти больше информации здесь.
executor – Selenium.
runner – тесты будем проводить с помощью pytest.
hold-for – продолжительность тестирования.
scenarios:
scenarios — секция конфигурационного файла Taurus. Здесь приводится конфигурация для каждого сценария из секции execution.
selenium:
script: selenium_ui/jira_ui.py
script — путь к тестам Selenium.
jmeter:
# provides path to the jmeter project file
script: jmeter/jira.jmx
properties:
application_hostname: ${application_hostname}
application_protocol: ${application_protocol}
application_port: ${application_port}
application_postfix: ${application_postfix}
# Workload model
# the number of actions for an hour.
total_actions_per_hr: 54500
# actions and the % of execution within one hour. The sum of all parameters must equal to 100%
perc_create_issue: 4
perc_search_jql: 13
perc_view_issue: 43
perc_view_project_summary: 4
perc_view_dashboard: 12
perc_edit_issue: 4
perc_add_comment: 2
perc_browse_projects: 4
perc_view_scrum_board: 3
perc_view_kanban_board: 3
perc_view_backlog: 6
perc_browse_boards: 2
perc_standalone_extension: 0 # By default disabled
script — путь к проекту JMeter, который будет выполнятся во время тестирования.
total_actions_per_hr число действий, которые будут выполнены за час. Одно действие — это выполнение одного теста. Тесты, которые будут запускаться можно понять из perc_ параметров.
perc_ параметры — процент выполнения каждого теста. Сумма всех perc_ параметров должна быть равна 100%.
modules:
consolidator:
rtimes-len: 0 # CONFSRVDEV-7631 reduce sampling
percentiles: [] # CONFSRVDEV-7631 disable all percentiles due to Taurus's excessive memory usage
modules — секция конфигурационного файла Taurus. Эта секция содержит описание всех модулей, которые будут использоваться во время тестирования.
jmeter:
version: ${JMETER_VERSION}
detect-plugins: true
memory-xmx: 8G # allow JMeter to use up to 8G of memory
plugins:
- bzm-parallel=0.4
- bzm-random-csv=0.6
- jpgc-casutg=2.5
- jpgc-dummy=0.2
- jpgc-ffw=2.0
- jpgc-fifo=0.2
- jpgc-functions=2.1
- jpgc-json=2.6
- jpgc-perfmon=2.1
- jpgc-prmctl=0.4
- jpgc-tst=2.4
- jpgc-wsc=0.3
- tilln-sshmon=1.0
- jpgc-cmd=2.2
- jpgc-synthesis=2.2
system-properties:
server.rmi.ssl.disable: true
java.rmi.server.hostname: localhost
httpsampler.ignore_failed_embedded_resources: "true"
jmeter — параметры JMeter модуля. Вы можете прочитать про модуль Jmeter здесь.
detect-plugins – JMeter Plugins Manager позволяет устанавливать плагины для JMeter автоматически. Мы устанавливаем этот параметр в yes, для того, чтобы Taurus сказал Jmeter, чтобы тот установил все необходимые плагины автоматически.
plugins – список плагинов JMeter, которые использовались при написании тестов.
system-properties – дополнительные параметры для JMeter.
selenium:
# version of the chrome driver
chromedriver:
version: "80.0.3987.106" # Supports Chrome version 80. You can refer to http://chromedriver.chromium.org/downloads
selenium — параметры для Selenium.
chromedriver – версия драйвера Chrome, который мы будем использовать для тестирования.
reporting:
- data-source: sample-labels
module: junit-xml
reporting — секция конфигурационного файла Taurus. Здесь устанавливаются настройки для модулей анализа и отчетности. Мы используем модуль отчетности JUnit xml. Вы можете найти больше информации по этому модулю здесь.
Давайте подведем итог.
У нас 6 секций в файле jira.xml:
settings – верхнеуровневые настройки и параметры.
Вам необходимо изменить следующие параметры в этой секции:
application_hostname: localhost # Jira DC hostname without protocol and port e.g. test-jira.atlassian.com or localhost
application_protocol: http # http or https
application_port: 2990 # 80, 443, 8080, 2990, etc
application_postfix: /jira # e.g. /jira in case of url like http://localhost:2990/jira
admin_login: admin
admin_password: admin
Так же Вам, возможно, понадобится изменить следующие параметры:
concurrency: 5
test_duration: 5m
Я изменил эти параметры на маленькие значения для того, чтобы тесты быстро отрабатывали.
Если Вы изменили test_duration и concurrency не забудьте проверить параметр ramp-up в секции execution. Возможно, Вам его тоже потребуется изменить.
services – скрипты, которые буду выполняться на этапах жизненного цикла тестов Taurus.
execution – параметры выполнения сценариев тестирования. Сначала запускаем JMeter, а потом Selenium.
scenarios – параметры сценариев тестирования. Возможно, Вам понядобится изменить количество операций в час и процентное соотношение тестов. О том как добавлять или удалять тесты я расскажу в одной из следующих частей.
modules – модули, используемые для тестов. Мы используем consolidator, JMeter и Selenium. Taurus обеспечивает нам наличие этих модулей во время тестирования.
reporting – параметры модуля отчетности.
Хорошо. Мы изменили файл конфигурации и готовы запускать тесты.
Run test
Первым делом активируйте Python virtual environment (Вы можете найти информацию об этим в файле README.md), перейдите в папку app и запустите тест:
bzt jira.yml
В моем случае тест завершился с ошибкой:
17:03:26 WARNING: Errors for python util/data_preparation/jira/prepare-data.py:
There are no software projects in Jira
Все правильно. Мое экземпляр Jira пуст. Необходимо наполнить его данными для тестирования. Я расскажу, как это сделать, в части 2.