Всем привет!
Хочу поделиться своим опытом нагрузочного тестирования 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:
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.
One thought on “Нагрузочное тестирование Atlassian Jira, Confluence, Bitbucket Часть 1”