Teste de carga Atlassian Jira, Confluence, Bitbucket Part 1

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.ymlconfluence.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://localhost:2990/jira
    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://chromedriver.chromium.org/downloads

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://localhost:2990/jira
    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.

All Articles