Teste de carga Atlassian Jira, Confluence, Bitbucket Part 2

Aqui aqui você pode ler a parte 1 deste artigo.
Na Parte 2, falaremos sobre como preparar dados para teste de estresse usando a ferramenta  dc-app-performance-toolkit .

Preparando dados de teste


Existem duas maneiras de preparar dados de teste:

  • Use backups fornecidos pelo Atlassian. Você pode usar esta opção se, por exemplo, estiver escrevendo seu próprio plug-in e não interessar para você em quais dados esse plug-in funcionará.
  • Use seus próprios dados. Esta opção será útil se você tiver sua própria cópia do Jira, Confluence ou Bitbucket, que você modifica usando a funcionalidade padrão, scripts, plugins e outros métodos possíveis.

Backups Atlassian


O Atlassian fornece backups para Jira, Confluence e Bitbucket, que podem ser usados ​​para teste de carga.

Para instalar esses backups, você precisa acessar a pasta app-dc-performance-toolkit / app / util / jira se estiver testando o Jira,  app-dc-performance-toolkit / app / util / confluence se estiver testando o Confluence ou  app-dc-performance-toolkit / app / util / bitbucket se você estiver testando o Bitbucket.

Essas pastas contêm os arquivos que você precisa executar para instalar os backups do Atlassian. Aqui estão as descrições desses arquivos:

  • index-sync.sh ( Jira Confluence) – atlassian-jira.log (atlassian-confluence.log) “indexes – 100%”. , . , , Jira/Confluence. , , , , , , .
  • populate_db.sh – Postgres Jira/Confluence/Bitbucket.
  • upload_attachments.sh – data.
  • index-snapshot.sh ( Confluence) – , .

Todos os scripts acima devem ser executados na mesma máquina virtual na qual a instância que você está prestes a testar está instalada. Como esses scripts são executados na mesma máquina virtual, eles determinarão independentemente a versão da sua instância e farão o download do dump e dos anexos do banco de dados para a sua versão.

Bem, e se você não quiser usar o Postgres? Afinal, populate_db.sh funciona apenas para o banco de dados Postgres.

Nesse caso, apenas para o Jira, você pode fazer o download do backup xml e restaurá-lo usando a funcionalidade padrão do Jira . Aqui está um link para esse backup: https://centaurus-datasets.s3.amazonaws.com/jira/$ {Jira_Verson} /large/xml_backup.zip - versões suportadas do Jira 8.0.3, 7.13.6, 8.5.0.

Atlassian não preparou backups em XML para Confluence e Bitbucket. Você precisa usar o script populate_db.sh ou preparar você mesmo os dados, os quais discutirei mais adiante na seção “Usando nossos próprios dados”.

Usamos nossos próprios dados.


Se você deseja testar sua instância com seus próprios dados, isso também é possível. Tudo que você precisa é garantir que seus dados possam ser usados ​​pela ferramenta dc-app-performance-toolkit.

Quando o dc-app-performance-toolkit inicia o teste, o Taurus executa o script prepare-data.py, que seleciona os dados dos quais você testará na sua instância. Como resultado, vários arquivos csv com dados da sua instância são criados.

Se prepare-data.py não puder selecionar os dados necessários, o teste falhará. Portanto, você precisa garantir que os dados necessários estejam em sua cópia.

Para entender quais dados devem ser, você precisa estudar o arquivo prepare-data.py para o produto que você vai testar.

Vamos examinar esses arquivos.

Jira


O arquivo  prepare-data.py  para o Jira está localizado na  pasta dc-app-performance-toolkit / blob / master / app / util / data_preparation / jira / .

Este script seleciona dados do Jira e cria os seguintes arquivos:

  • Issues.csv - uma lista de ish.
  • jqls.csv - lista de consultas jql.
  • kanban-boards.scv - lista de painéis kanban.
  • project-keys.csv - lista de chaves do projeto.
  • scrum-boards.csv- lista de painéis scrum.
  • users.scv - lista de usuários.

Não estudaremos o arquivo prepare-data.py completamente, apenas precisamos analisar este método:

def __create_data_set(jira_api):
    dataset = dict()
    dataset[USERS] = __get_users(jira_api)
    software_project_keys = __get_software_project_keys(jira_api, PROJECTS_COUNT_LIMIT)
    dataset[PROJECT_KEYS] = software_project_keys
    dataset[ISSUES] = __get_issues(jira_api, software_project_keys)
    dataset[SCRUM_BOARDS] = __get_boards(jira_api, 'scrum')
    dataset[KANBAN_BOARDS] = __get_boards(jira_api, 'kanban')
    dataset[JQLS] = __generate_jqls(count=150)

    return dataset

Como você pode ver neste método, todos os dados necessários durante o teste são selecionados:

dataset[USERS] = __get_users(jira_api)

Selecionamos usuários da nossa instância do Jira. O nome de usuário deve começar com "performance_". Temos que selecionar quantos usuários configuramos simultaneamente usuários que trabalham no parâmetro simultaneidade no arquivo jira.yml . Se nenhum usuário for encontrado ou seu número for insuficiente, os usuários serão criados. Os usuários terão o prefixo "performance_" e a senha da senha.

software_project_keys = __get_software_project_keys(jira_api, PROJECTS_COUNT_LIMIT)
dataset[PROJECT_KEYS] = software_project_keys

Selecionamos chaves de projeto do tipo Software.

__get_issues(jira_api, software_project_keys)

Selecionamos não mais que 8000 softwares em projetos de software que não estão no status Fechado.

dataset[SCRUM_BOARDS] = __get_boards(jira_api, 'scrum')

Selecionamos não mais que 250 painéis de pan.

dataset[KANBAN_BOARDS] = __get_boards(jira_api, 'kanban')

Selecionamos não mais que 250 painéis Kanban.

dataset[JQLS] = __generate_jqls(count=150)

Geramos consultas jql com o seguinte conteúdo: 'text ~ “abc *” ”.

Portanto, para que os testes sejam executados sem erros, é necessário garantir a disponibilidade de projetos de software com placas ish, scrum e kanban. Se você já possui esses objetos em sua instância, não precisa fazer nada (o teste será bem-sucedido sem nenhuma alteração); caso contrário, será necessário criar os objetos ausentes.

Como minha instância do Jira está vazia, criei os projetos Scrum Software Development e Kanban Software Development e executei o teste de carga novamente:

bzt jira.yml

Desta vez, o script foi concluído sem erros. Aqui está a saída do script:

18:15:24 INFO: Taurus CLI Tool v1.14.0
18:15:24 INFO: Starting with configs: ['jira.yml']
18:15:24 INFO: Configuring...
18:15:24 INFO: Artifacts dir: /Users/alexm/PycharmProjects/easymigration/dc-app-performance-toolkit/app/results/jira/2020-05-02_18-15-24
18:15:24 INFO: Preparing...
18:15:25 INFO: Starting shell command: python util/environment_checker.py
18:15:25 INFO: Starting shell command: python util/data_preparation/jira/prepare-data.py
18:15:26 WARNING: There is newer version of Taurus 1.14.2 available, consider upgrading. What's new: http://gettaurus.org/docs/Changelog/
18:15:28 INFO: Will install JMeter into /Users/alexm/.bzt/jmeter-taurus/5.2.1
18:15:28 INFO: Downloading: https://apache-mirror.rbc.ru/pub/apache//jmeter/binaries/apache-jmeter-5.2.1.zip
100% [===========================================================] Time: 0:00:04
18:15:33 INFO: Unzipping /var/folders/4r/w8hkd4w51x787tw4ynb29v2w0000gn/T/tmp9g5rzqs1.zip to /Users/alexm/.bzt/jmeter-taurus/5.2.1
18:15:50 INFO: Downloading jmeter-plugins-manager-1.3.jar from https://search.maven.org/remotecontent?filepath=kg/apc/jmeter-plugins-manager/1.3/jmeter-plugins-manager-1.3.jar
18:15:51 INFO: Downloading cmdrunner-2.2.jar from https://search.maven.org/remotecontent?filepath=kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar
100% [===========================================================] Time: 0:00:01
18:15:52 INFO: Installing JMeter plugins: jpgc-casutg,jpgc-dummy,jpgc-ffw,jpgc-fifo,jpgc-functions,jpgc-json,jpgc-perfmon,jpgc-prmctl,jpgc-tst,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
18:16:38 INFO: 1 obsolete CookieManagers are found and fixed
18:16:56 INFO: Installing ChromeDriver...
18:16:56 INFO: Will install ChromeDriver into /Users/alexm/.bzt/selenium-taurus/tools/chromedriver/80.0.3987.106
18:16:56 INFO: Downloading: https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_mac64.zip
100% [===========================================================] Time: 0:00:01
18:16:57 INFO: Unzipping /var/folders/4r/w8hkd4w51x787tw4ynb29v2w0000gn/T/tmpurpp_7tz.zip to /Users/alexm/.bzt/selenium-taurus/tools/chromedriver/80.0.3987.106
18:16:57 INFO: Installing GeckoDriver...
18:16:57 INFO: Will install GeckoDriver into /Users/alexm/.bzt/selenium-taurus/tools/geckodriver/0.23.0
18:16:57 INFO: Downloading: https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-macos.tar.gz
100% [===========================================================] Time: 0:00:02
18:17:00 INFO: Untaring /var/folders/4r/w8hkd4w51x787tw4ynb29v2w0000gn/T/tmpiurqzzt4.zip to /Users/alexm/.bzt/selenium-taurus/tools/geckodriver/0.23.0
18:17:00 WARNING: You are using Python 3, make sure that your scripts are able to run in Python 3
18:17:00 INFO: Starting...
18:17:00 INFO: Waiting for results...
18:17:00 INFO: Waiting for finish...
18:17:00 ERROR: Console screen failure: ord() expected string of length 1, but int found
18:25:22 WARNING: Please wait for graceful shutdown...
18:25:22 INFO: Shutting down...
18:25:22 INFO: Starting shell command: python util/jmeter_post_check.py
18:25:22 INFO: Starting shell command: python util/jtl_convertor/jtls-to-csv.py kpi.jtl selenium.jtl
18:25:59 INFO: Post-processing...
18:25:59 INFO: Test duration: 0:08:22
18:25:59 INFO: Samples count: 3272, 0.06% failures
18:25:59 INFO: Average times: total 0.595, latency 0.000, connect 0.000
18:25:59 INFO: Percentiles:
┌───────────────┬───────────────┐
│ Percentile, % │ Resp. Time, s │
└───────────────┴───────────────┘
18:25:59 INFO: Request label stats:
┌───────────────────────────────────────┬────────┬─────────┬────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ label                                 │ status │    succ │ avg_rt │ error                                                                                                                                           │
├───────────────────────────────────────┼────────┼─────────┼────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ jmeter_browse_boards                  │   OK   │ 100.00% │  0.186 │                                                                                                                                                 │
│ jmeter_browse_projects                │   OK   │ 100.00% │  0.149 │                                                                                                                                                 │
│ jmeter_create_issue                   │   OK   │ 100.00% │  0.135 │                                                                                                                                                 │
│ jmeter_login_and_view_dashboard       │   OK   │ 100.00% │  0.497 │                                                                                                                                                 │
│ jmeter_open_comment                   │   OK   │ 100.00% │  0.210 │                                                                                                                                                 │
│ jmeter_open_editor                    │   OK   │ 100.00% │  0.287 │                                                                                                                                                 │
│ jmeter_open_quick_create              │   OK   │ 100.00% │  0.063 │                                                                                                                                                 │
│ jmeter_save_comment                   │   OK   │ 100.00% │  0.521 │                                                                                                                                                 │
│ jmeter_save_edit                      │   OK   │ 100.00% │  0.900 │                                                                                                                                                 │
│ jmeter_search_jql                     │   OK   │ 100.00% │  0.610 │                                                                                                                                                 │
│ jmeter_view_backlog                   │   OK   │ 100.00% │  0.387 │                                                                                                                                                 │
│ jmeter_view_dashboard                 │   OK   │ 100.00% │  0.267 │                                                                                                                                                 │
│ jmeter_view_issue                     │   OK   │ 100.00% │  0.593 │                                                                                                                                                 │
│ jmeter_view_kanban_board              │   OK   │ 100.00% │  0.344 │                                                                                                                                                 │
│ jmeter_view_project_summary           │   OK   │ 100.00% │  0.611 │                                                                                                                                                 │
│ jmeter_view_scrum_board               │   OK   │ 100.00% │  0.347 │                                                                                                                                                 │
│ selenium_a_login                      │   OK   │ 100.00% │ 28.460 │                                                                                                                                                 │
│ selenium_browse_boards_list           │   OK   │ 100.00% │  9.871 │                                                                                                                                                 │
│ selenium_browse_projects_list         │   OK   │ 100.00% │  6.376 │                                                                                                                                                 │
│ selenium_create_issue                 │   OK   │ 100.00% │  5.143 │                                                                                                                                                 │
│ selenium_edit_issue                   │   OK   │ 100.00% │ 16.305 │                                                                                                                                                 │
│ selenium_save_comment                 │   OK   │ 100.00% │ 19.909 │                                                                                                                                                 │
│ selenium_search_jql                   │   OK   │ 100.00% │ 32.249 │                                                                                                                                  │
│ selenium_view_backlog_for_scrum_board │   OK   │ 100.00% │ 14.223 │                                                                                                                                                 │
│ selenium_view_dashboard               │   OK   │ 100.00% │ 13.805 │                                                                                                                                                 │
│ selenium_view_issue                   │   OK   │ 100.00% │ 12.332 │                                                                                                                                                 │
│ selenium_view_kanban_board            │   OK   │ 100.00% │ 14.675 │                                                                                                                                                 │
│ selenium_view_project_summary         │   OK   │ 100.00% │ 12.710 │                                                                                                                                                 │
│ selenium_view_scrum_board             │   OK   │ 100.00% │ 14.893 │                                                                                                                                                 │
│ selenium_z_log_out                    │   OK   │ 100.00% │ 14.889 │                                                                                                                                                 │
└───────────────────────────────────────┴────────┴─────────┴────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
18:26:00 INFO: Writing JUnit XML report into: /Users/alexm/PycharmProjects/easymigration/dc-app-performance-toolkit/app/results/jira/2020-05-02_18-15-24/xunit.xml
18:26:00 INFO: Starting shell command: python util/analytics.py jira
18:26:06 INFO: Starting shell command: python util/cleanup_results_dir.py
18:26:06 INFO: Artifacts dir: /Users/alexm/PycharmProjects/easymigration/dc-app-performance-toolkit/app/results/jira/2020-05-02_18-15-24
18:26:06 INFO: Done performing with code: 0

Pode ser visto na saída do script que o Taurus lançou o arquivo prepare-data.py e criou os seguintes arquivos csv:

issues.csv

KAN-1,10023,KAN
KAN-2,10024,KAN
KAN-3,10025,KAN
KAN-4,10026,KAN
KAN-5,10027,KAN
...........


jqls.csv

text ~ "vqz*" order by key
text ~ "fpl*" order by key
text ~ "zjs*" order by key
text ~ "wph*" order by key
text ~ "xhx*" order by key
text ~ "pxt*" order by key
text ~ "deh*" order by key
text ~ "iri*" order by key
text ~ "jbr*" order by key
text ~ "snt*" order by key
...........

kanban-boards.csv

2

project_keys.csv

KAN
SCRUM

scrum-boards.csv

1

users.csv

performance_kqgdayqwfj,password
performance_zyqnwihaxr,password
performance_onfxfovior,password
performance_rrujzwrxlt,password
performance_agjbcxxeqy,password

Em seguida, o Taurus instalou o JMeter e o driver da web do Chrome, executou os testes e imprimiu o resultado.

Agora, vejamos o arquivo prepare-data.py para Confluence e Bitbucket.

Confluência


Considere o arquivo  prepare-data.py  para o Confluence.

Aqui está o método principal:

def __create_data_set(rest_client, rpc_client):
    dataset = dict()
    dataset[USERS] = __get_users(rest_client, rpc_client, CONFLUENCE_SETTINGS.concurrency)
    dataset[PAGES] = __get_pages(rest_client, 5000)
    dataset[BLOGS] = __get_blogs(rest_client, 5000)
    return dataset

 dataset[USERS] = __get_users(rest_client, rpc_client, CONFLUENCE_SETTINGS.concurrency)

Selecionamos ou criamos usuários para teste de carga de acordo com a mesma lógica que no caso do Jira.

dataset[PAGES] = __get_pages(rest_client, 5000)

Selecionamos as páginas do Confluence usando o seguinte cql: “type = page e title! ~ JMeter e title! ~ Selenium e title! ~ Home”.

dataset[BLOGS] = __get_blogs(rest_client, 5000)

Selecionamos blogs do Confluence pelo seguinte cql: “type = blogpost e title! ~ Performance”.

Portanto, para iniciar o teste do Confluence, você precisa ter páginas e blogs em sua cópia.

Bitbucket


Agora veja o arquivo  prepare-data.py  do Bitbucket.

Aqui está a principal função:

def __create_data_set(bitbucket_api):
    dataset = dict()
    dataset[USERS] = __get_users(bitbucket_api)
    dataset[PROJECTS] = __get_projects(bitbucket_api)
    dataset[REPOS] = __get_repos(bitbucket_api)
    dataset[PULL_REQUESTS] = __get_prs(bitbucket_api)
    return dataset

dataset[USERS] = __get_users(bitbucket_api)

Selecionamos ou criamos usuários de acordo com a mesma lógica do Jira, mas dessa vez os usuários devem ter o prefixo “dcapt-perf-user”. E ao criar o usuário, a senha é igual ao nome de usuário.

dataset[PROJECTS] = __get_projects(bitbucket_api)

Selecionamos projetos.

dataset[REPOS] = __get_repos(bitbucket_api)

Nós selecionamos repositórios.

dataset[PULL_REQUESTS] = __get_prs(bitbucket_api)

Selecionamos o pool de solicitações. O número de conjuntos de solicitações não deve ser menor que o parâmetro de simultaneidade no arquivo  bitbucket.yml .

Portanto, para executar testes para o Bitbucket, você precisa ter em sua instância projetos, repositórios e um conjunto de requets em uma quantidade não inferior ao parâmetro de simultaneidade no arquivo bitbucket.yml.

Portanto, vimos como preparar dados para testes de carga usando backups preparados pela Atlassian e como executar testes de carga em nossos dados. Na próxima parte, falaremos sobre quais artefatos são criados após o teste de estresse, quais informações eles fornecem e que tipo de gráfico podemos gerar a partir da caixa.

All Articles