Olá a todos!Quero compartilhar minha experiência com os testes de estresse do Atlassian Jira, Confluence e Bitbucket usando o kit de ferramentas dc-app-performance- tool do Atlassian .Esta será uma série de artigos nos quais não falarei sobre a metodologia de teste de estresse, mas falarei apenas sobre os aspectos técnicos do teste de estresse usando a ferramenta.Se você quiser saber mais sobre a metodologia de teste de carga no contexto dos produtos Atlassian, falei sobre isso no Highload 2018 .Então, vamos para o dc-app-performance-toolkit.Esta ferramenta permite carregar aplicativos Atlassian de teste, como Jira, Confluence e Bitbucket. Aprendi sobre essa ferramenta quando precisei testar o plug-in Atlassian Jira para obter certificação no Data Center e imediatamente gostei dessa ferramenta porque não precisava passar horas configurando-a. Tudo funcionou fora da caixa.A ferramenta usa Taurus , jmeter e Selenium .Você pode usar esta ferramenta para os seguintes propósitos:- Você está desenvolvendo plug-ins para o Atlassian Marketplace. Nesse caso, você pode usar esta ferramenta para certificar seu plug-in para Data Center.
- Atlassian Jira, Confluence Bitbucket , , , . . , . - . , Atlassian, Atlassian, , , . , .
As etapas que você precisa executar para testar o Atlassian Jira, Confluence e Bitbucket são as mesmas na maioria dos casos, portanto, farei todo o trabalho no Atlassian Jira. Se houver etapas específicas para o produto, mencionarei isso.Instalação
A primeira coisa a fazer é obter uma ferramenta com o github:git clone https://github.com/atlassian/dc-app-performance-toolkit.git
E vá para a pasta criada:cd dc-app-performance-toolkit
Em seguida, você precisa instalar todas as dependências para usar a ferramenta. Você pode ler como fazer isso em path_to_dc_app_performance_toolkit / README.md .Arquivos de configuração
Antes de usar a ferramenta, leia a documentação desta ferramenta na pasta path_to_dc_app_performance_toolkit / doc .Aqui está uma breve descrição do conteúdo desta pasta:- 3 md ( Jira, Confluence Bitbucket). , Data Center.
- : jira, confluence bitbucket , .
jira.yml
Antes de iniciar o teste de carregamento, é necessário fazer alterações nos arquivos jira.yml , confluence.yml ou bitbucket.yml , localizados na pasta path_to_dc_app_performance_toolkit / app , dependendo do produto que você vai testar. Esses são os arquivos de configuração do Taurus. Você pode ler sobre Touro aqui .Vou dar comentários sobre jira.yml. Arquivos para outros produtos são criados com o mesmo princípio.settings:
configurações é uma seção do arquivo de configuração do Taurus. Ele contém opções de nível superior para o Taurus. Você pode encontrar mais informações nesta seção aqui . artifacts-dir: results/jira/%Y-%m-%d_%H-%M-%S
artifacts-dir - modelo de caminho que será usado para armazenar artefatos de teste de carga. Aqui está uma lista parcial de artefatos:bzt.log
- o log do comando bzt. Este comando inicia o teste de carga.error_artifacts
- uma pasta para armazenar capturas de tela e testes html do Selenium, que terminou com erros.jmeter.err
- log do JMeter.kpi.jtl
- Dados de teste do JMeter.pytest.out
- Registro de execução do teste Selenum.selenium.jtl
- Dados de teste de selênio.results.csv
- resultados de testes agregados.jira.yml
- jira.yml, que foi usado para o teste.
aggregator: consolidator
agregador - o agregador que será usado para coletar os resultados dos testes e transferir os resultados para o módulo de relatórios. Você pode ler mais sobre agregadores aqui . verbose: false
verbose - parâmetro para iniciar o Taurus no modo de depuração. No nosso caso, desativamos este modo. env:
env permite que você defina variáveis de ambiente. Você pode ler mais aqui . 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:
admin_login: admin
admin_password: admin
Os parâmetros acima contêm informações sobre sua instância que você vai testar. Especifiquei os parâmetros para a instância do Jira, localizada no meu computador. Esses parâmetros serão usados no JMeter, Selenium e scripts. concurrency: 200
test_duration: 45m
Esses parâmetros serão passados para a seção de execução. Vou explicar o significado desses parâmetros quando eles falarem sobre esta seção. WEBDRIVER_VISIBLE: false
WEBDRIVER_VISIBLE define a visibilidade do navegador Chrome durante a execução dos testes do Selenium. Estamos escondendo o Chrome. JMETER_VERSION: 5.2.1
JMETER_VERSION é a versão do JMeter que usaremos para testar. allow_analytics: Yes # , Atlassian. Atlassian , , , .
services:
services - seção do arquivo de configuração do Taurus. As informações sobre quais scripts você precisa executar antes de iniciar, após e durante o teste são indicadas aqui. Você pode ler mais sobre esta seção aqui . - module: shellexec
O executor de shell é usado para executar scripts. 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
Preparar, desligar e pós-processo são os estágios do ciclo de vida do Touro. Você pode ler mais sobre o ciclo de vida de Touro aqui . Em cada estágio, os scripts são executados. Esses scripts são:- util / environment_checker.py - verifica a versão do Python e para o teste se a versão não é a mesma.
- util / data_preparation / jira / prepare-data.py - prepara dados de teste. Falaremos sobre esse script em detalhes na próxima parte.
- 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:
execução - seção do arquivo de configuração do Taurus. Contém scripts que serão executados durante o teste. Você pode encontrar mais informações aqui . - scenario: jmeter
concurrency: ${concurrency}
hold-for: ${test_duration}
ramp-up: 3m
Estas são as opções de execução de script para o JMeter. Você pode encontrar mais informações aqui .simultaneidade é o número de usuários virtuais. Este parâmetro significa quantos usuários simultâneos o JMeter simulará. No nosso caso, simulamos 200 usuários trabalhando simultaneamente.ramp-up - teste o tempo de overclock. Iremos para 200 usuários trabalhando simultaneamente gradualmente. No nosso caso, alcançaremos 200 usuários que trabalham simultaneamente em 3 minutos.hold-for - duração do teste após atingir um determinado número de usuários simultâneos no parâmetro simultaneidade. - scenario: selenium
executor: selenium
runner: pytest
hold-for: ${test_duration}
Opções de execução de teste de selênio. Você pode encontrar mais informações aqui .executor - Selênio.runner - os testes serão realizados usando pytest.espera - duração do teste.scenarios:
cenários - seção do arquivo de configuração do Taurus. Aqui está a configuração para cada script da seção de execução. selenium:
script: selenium_ui/jira_ui.py
script - o caminho para os testes do 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 - o caminho para o projeto JMeter, que será executado durante o teste.total_actions_per_hr o número de ações que serão executadas em uma hora. Uma ação é realizar um teste. Os testes que serão executados podem ser entendidos a partir dos parâmetros perc_.parâmetros perc_ - porcentagem de conclusão de cada teste. A soma de todos os parâmetros perc_ deve ser igual a 100%.modules:
consolidator:
rtimes-len: 0 # CONFSRVDEV-7631 reduce sampling
percentiles: [] # CONFSRVDEV-7631 disable all percentiles due to Taurus's excessive memory usage
modules - seção do arquivo de configuração do Taurus. Esta seção contém uma descrição de todos os módulos que serão usados durante o teste. 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 - parâmetros do módulo JMeter. Você pode ler sobre o módulo Jmeter aqui .detect-plugins - o JMeter Plugins Manager permite instalar plug-ins para o JMeter automaticamente. Definimos esse parâmetro como yes, para que o Taurus diga ao Jmeter para instalar todos os plugins necessários automaticamente.plugins - uma lista de plugins JMeter que foram usados ao escrever os testes.system-properties - parâmetros adicionais para o JMeter. selenium:
# version of the chrome driver
chromedriver:
version: "80.0.3987.106" # Supports Chrome version 80. You can refer to http:
selênio - parâmetros para o selênio.chromedriver é a versão do driver do Chrome que usaremos para testar.reporting:
- data-source: sample-labels
module: junit-xml
Reporting - seção do arquivo de configuração do Taurus. Aqui você define as configurações para os módulos de análise e relatório. Usamos o módulo de relatório JUnit xml. Você pode encontrar mais informações sobre este módulo aqui .Vamos resumir.Temos 6 seções no arquivo jira.xml:settings - configurações e parâmetros de nível superior.Você precisa alterar os seguintes parâmetros nesta seção: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:
admin_login: admin
admin_password: admin
Você também pode precisar alterar os seguintes parâmetros:concurrency: 5
test_duration: 5m
Alterei esses parâmetros para valores pequenos para que os testes funcionassem rapidamente.Se você alterou test_duration e simultaneidade, verifique o parâmetro de aceleração na seção de execução. Você pode precisar alterá-lo também.serviços - scripts que serão executados nos estágios do ciclo de vida do teste Taurus.execução - parâmetros de execução dos scripts de teste. Primeiro, execute o JMeter e, em seguida, o Selenium.cenários - parâmetros de script de teste. Talvez você queira alterar o número de operações por hora e a porcentagem de testes. Falarei sobre como adicionar ou remover testes em uma das seguintes partes.modules - módulos usados para testes. Usamos consolidador, JMeter e Selenium. O Taurus nos fornece a disponibilidade desses módulos durante o teste.reporting - parâmetros do módulo de relatórios.Boa. Alteramos o arquivo de configuração e estamos prontos para executar os testes.Teste de corrida
Primeiro, ative o ambiente virtual Python (você pode encontrar informações sobre isso no arquivo README.md ), vá para a pasta do aplicativo e execute o teste:bzt jira.yml
No meu caso, o teste falhou com um erro:17:03:26 WARNING: Errors for python util/data_preparation/jira/prepare-data.py:
There are no software projects in Jira
Tudo está correto. Minha cópia do Jira está vazia. É necessário preenchê-lo com dados para teste. Vou lhe dizer como fazê-lo, na parte 2.