Test de charge Atlassian Jira, Confluence, Bitbucket Part 2

Ici , vous pouvez lire la partie 1 de cet article.
Dans la partie 2, nous expliquerons comment préparer les données pour les tests de résistance à l'aide de l'outil  dc-app-performance-toolkit .

Préparation des données de test


Il existe deux façons de préparer les données de test:

  • Utilisez les sauvegardes fournies par Atlassian. Vous pouvez utiliser cette option si, par exemple, vous écrivez votre propre plugin et peu importe pour vous les données sur lesquelles ce plugin fonctionnera.
  • Utilisez vos propres données. Cette option vous sera utile si vous avez votre propre copie de Jira, Confluence ou Bitbucket, que vous modifiez à l'aide de fonctionnalités standard, de scripts, de plugins et d'autres méthodes possibles.

Sauvegardes Atlassian


Atlassian fournit des sauvegardes pour Jira, Confluence et Bitbucket, qui peuvent être utilisées pour les tests de charge.

Pour installer ces sauvegardes, vous devez accéder au dossier app-dc-performance-toolkit / app / util / jira si vous testez Jira,  app-dc-performance-toolkit / app / util / confluence si vous testez Confluence ou  app-dc-performance-toolkit / app / util / bitbucket si vous testez Bitbucket.

Ces dossiers contiennent les fichiers que vous devez exécuter pour installer les sauvegardes Atlassian. Voici les descriptions de ces fichiers:

  • 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) – , .

Tous les scripts ci-dessus doivent être exécutés sur la même machine virtuelle sur laquelle l'instance que vous êtes sur le point de tester est installée. Étant donné que ces scripts sont exécutés à partir de la même machine virtuelle, ils détermineront indépendamment la version de votre instance et téléchargeront le vidage de la base de données et les pièces jointes pour votre version.

Et si vous ne souhaitez pas utiliser Postgres? Après tout, populate_db.sh ne fonctionne que pour la base de données Postgres.

Dans ce cas, uniquement pour Jira, vous pouvez télécharger la sauvegarde xml et la restaurer à l'aide de la fonctionnalité Jira standard . Voici un lien vers cette sauvegarde: https://centaurus-datasets.s3.amazonaws.com/jira/$ {Jira_Verson} /large/xml_backup.zip - versions prises en charge de Jira 8.0.3, 7.13.6, 8.5.0.

Atlassian n'a pas préparé de sauvegardes xml pour Confluence et Bitbucket. Vous devez utiliser le script populate_db.sh ou préparer vous-même les données, dont je parlerai plus loin dans la section «Utilisation de nos propres données».

Nous utilisons nos propres données.


Si vous souhaitez tester votre instance sur vos propres données, cela est également possible. Il vous suffit de vous assurer que vos données peuvent être utilisées par l'outil dc-app-performance-toolkit.

Lorsque dc-app-performance-toolkit commence les tests, Taurus exécute le script prepare-data.py, qui sélectionne les données de votre instance à tester. Par conséquent, plusieurs fichiers csv contenant des données de votre instance sont créés.

Si prepare-data.py ne peut pas sélectionner les données nécessaires, le test échouera. Par conséquent, vous devez vous assurer que les données nécessaires se trouvent dans votre copie.

Pour comprendre quelles données doivent être, vous devez étudier le fichier prepare-data.py du produit que vous allez tester.

Examinons ces fichiers.

Jira


Le fichier prepare-data.py  pour Jira se trouve dans le  dossier  dc-app-performance-toolkit / blob / master / app / util / data_preparation / jira / .

Ce script sélectionne les données de Jira et crée les fichiers suivants:

  • issues.csv - une liste de ish.
  • jqls.csv - liste des requêtes jql.
  • kanban-boards.scv - liste des panneaux kanban.
  • project-keys.csv - liste des clés de projet.
  • scrum-boards.csv- liste des panneaux de mêlée.
  • users.scv - liste des utilisateurs.

Nous n'étudierons pas complètement le fichier prepare-data.py, il suffit de regarder cette méthode:

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

Comme vous pouvez le voir dans cette méthode, toutes les données nécessaires lors des tests sont sélectionnées:

dataset[USERS] = __get_users(jira_api)

Nous sélectionnons les utilisateurs de notre instance Jira. Le nom d'utilisateur doit commencer par «performance_». Nous devons sélectionner autant d'utilisateurs que nous avons défini comme utilisateurs simultanés dans le paramètre de concurrence dans le fichier jira.yml . Si aucun utilisateur de ce type n'est trouvé ou que son nombre est insuffisant, des utilisateurs seront créés. Les utilisateurs auront le préfixe «performance_» et le mot de passe password.

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

Nous sélectionnons des clés de projet de type Logiciel.

__get_issues(jira_api, software_project_keys)

Nous ne sélectionnons pas plus de 8 000 logiciels parmi les projets logiciels qui ne sont pas en statut Fermé.

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

Nous ne sélectionnons pas plus de 250 panneaux de pan.

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

Nous ne sélectionnons pas plus de 250 panneaux kanban.

dataset[JQLS] = __generate_jqls(count=150)

Nous générons des requêtes jql avec le contenu suivant: 'text ~ “abc *” ”.

Ainsi, pour que les tests s'exécutent sans erreur, vous devez vous assurer de la disponibilité des projets logiciels avec des tableaux ish et scrum et kanban. Si vous avez déjà ces objets dans votre instance, vous n'avez rien à faire (le test réussira sans aucune modification), sinon, vous devez créer les objets manquants.

Étant donné que mon instance Jira est vide, j'ai créé les projets Scrum Software Development et Kanban Software Development et j'ai recommencé les tests de charge:

bzt jira.yml

Cette fois, le script s'est terminé sans erreur. Voici la sortie du 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

Il ressort de la sortie du script que Taurus a lancé le fichier prepare-data.py et créé les fichiers csv suivants:

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

Ensuite, Taurus a installé JMeter et le pilote Web Chrome, a exécuté les tests et imprimé le résultat.

Examinons maintenant le fichier prepare-data.py pour Confluence et Bitbucket.

Confluence


Considérez le fichier  prepare-data.py  pour Confluence.

Voici la méthode principale:

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)

Nous sélectionnons ou créons des utilisateurs pour les tests de charge selon la même logique que pour Jira.

dataset[PAGES] = __get_pages(rest_client, 5000)

Nous sélectionnons les pages de Confluence en utilisant le cql suivant: "type = page et titre! ~ JMètre et titre! ~ Sélénium et titre! ~ Accueil".

dataset[BLOGS] = __get_blogs(rest_client, 5000)

Nous sélectionnons les blogs de Confluence par le cql suivant: "type = blogpost and title! ~ Performance".

Ainsi, pour commencer à tester Confluence, vous devez avoir des pages et des blogs dans votre copie.

Bitbucket


Maintenant , regardez le prepare-data.py fichier   pour Bitbucket.

Voici la fonction principale:

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)

Nous sélectionnons ou créons des utilisateurs selon la même logique que pour Jira, mais cette fois, les utilisateurs doivent avoir le préfixe «dcapt-perf-user». Et lors de la création de l'utilisateur, le mot de passe est égal au nom d'utilisateur.

dataset[PROJECTS] = __get_projects(bitbucket_api)

Nous sélectionnons des projets.

dataset[REPOS] = __get_repos(bitbucket_api)

Nous sélectionnons les référentiels.

dataset[PULL_REQUESTS] = __get_prs(bitbucket_api)

Nous sélectionnons le pool de demandes. Le nombre de pools de demandes ne doit pas être inférieur au paramètre de concurrence dans le fichier  bitbucket.yml .

Ainsi, afin d'exécuter des tests pour Bitbucket, vous devez avoir dans vos projets d'instance, des référentiels et un pool de requvet d'un montant non inférieur au paramètre de concurrence dans le fichier bitbucket.yml.

Nous avons donc examiné comment préparer les données pour les tests de charge à l'aide de sauvegardes préparées par Atlassian et comment exécuter les tests de charge sur nos données. Dans la partie suivante, nous parlerons des artefacts créés après les tests de résistance, des informations qu'ils fournissent et du type de graphiques que nous pouvons générer à partir de la boîte.

All Articles