负载测试Atlassian Jira,Confluence,Bitbucket第2部分

这里,您可以阅读本文的第1部分。
在第2部分中,我们将讨论如何使用dc-app-performance-toolkit工具准备用于压力测试的数据 

准备测试数据


有两种方法可以准备测试数据:

  • 使用Atlassian提供的备份。例如,如果您正在编写自己的插件,而该插件可以处理哪些数据则无关紧要。
  • 使用您自己的数据。如果您拥有自己的Jira,Confluence或Bitbucket副本,则可以使用标准功能,脚本,插件以及其他可能的方式对其进行修改,该选项将非常有用。

备份Atlassian


Atlassian为Jira,Confluence和Bitbucket提供了备份,可用于负载测试。

为了安装这些备份,如果要测试Jira,则需要转到app-dc-performance-toolkit / app / util / jira文件夹,如果要  测试Confluence  ,则需要转到app-dc-performance-toolkit / app / util / confluence。app-dc-performance-toolkit / app / util / bitbucket(如果要测试Bitbucket)。

这些文件夹包含安装Atlassian备份所需的文件。以下是这些文件的描述:

  • 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-此脚本下载附件并将这些附件复制到数据目录。
  • index-snapshot.sh(仅Confluence)-此脚本检查索引快照的生成是否完成。

以上所有脚本都必须在要安装实例的同一虚拟机上运行。由于这些脚本是从同一虚拟机运行的,因此它们将独立确定实例的版本,并下载该版本的数据库转储和附件。

好吧,如果您不想使用Postgres怎么办?毕竟,populate_db.sh仅适用于Postgres数据库。

在这种情况下,仅对于Jira,您可以下载xml备份并使用标准Jira功能将其还原。这是此备份的链接:https : //centaurus-datasets.s3.amazonaws.com/jira/$ {Jira_Verson} /large/xml_backup.zip-Jira 8.0.3、7.13.6、8.5.0的受支持版本。

Atlassian没有为Confluence和Bitbucket准备xml备份。您需要使用脚本populate_db.sh或自己准备数据,我将在后面的“使用我们自己的数据”部分中讨论该脚本。

我们使用自己的数据。


如果您想根据自己的数据测试实例,那么这也是可能的。您需要做的就是确保dc-app-performance-toolkit工具可以使用您的数据。

当dc-app-performance-toolkit开始测试时,Taurus运行prepare-data.py脚本,该脚本从实例中选择要从中进行测试的数据。结果,将创建包含您实例数据的多个csv文件。

如果prepare-data.py无法选择必要的数据,则测试将失败。因此,您需要确保副本中包含必要的数据。

要了解什么是数据,您需要研究要测试的产品的prepare-data.py文件。

让我们检查这些文件。

吉拉


 Jira prepare-data.py文件  位于  dc-app-performance-toolkit / blob / master / app / util / data_preparation / jira /文件夹中

该脚本从Jira选择数据并创建以下文件:

  • issues.csv-ish列表。
  • jqls.csv-jql查询列表。
  • kanban-boards.scv-看板面板列表。
  • project-keys.csv-项目密钥列表。
  • scrum-boards.csv- Scrum面板列表。
  • users.scv-用户列表。

我们不会完全研究prepare-data.py文件,我们只需要查看以下方法即可:

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

如您所见,选择了测试期间需要的所有数据:

dataset[USERS] = __get_users(jira_api)

我们从Jira实例中选择用户。用户名必须以“ performance_”开头。我们必须在jira.yml文件的concurrency参数中选择与并发用户一样多的用户如果找不到此类用户或他们的数量不足,则将创建用户。用户将使用前缀“ performance_”和密码password。

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

我们选择软件类型的项目密钥。

__get_issues(jira_api, software_project_keys)

我们从处于关闭状态的软件项目中选择不超过8000个软件。

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

我们选择的面板不超过250个。

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

我们选择的看板不超过250个。

dataset[JQLS] = __generate_jqls(count=150)

我们生成具有以下内容的jql查询:'text〜“ abc *””。

因此,为了使测试能够正确运行,您需要确保带有ish,scrum和看板的软件项目的可用性。如果您的实例中已经有这些对象,则无需执行任何操作(无需任何更改即可成功进行测试),如果没有,则需要创建丢失的对象。

由于我的Jira实例为空,因此我创建了Scrum Software Development和Kanban Software Development项目,并再次运行了负载测试:

bzt jira.yml

这次脚本已正确完成。这是脚本输出:

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

从脚本输出中可以看出,Taurus启动了prepare-data.py文件并创建了以下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
...........

看板板

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

然后Taurus安装了JMeter和Chrome网络驱动程序,运行了测试并打印了结果。

现在,让我们看一下Confluence和Bitbucket的prepare-data.py文件。

合流


考虑 Confluence prepare-data.py文件 

这是主要方法:

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)

我们根据与Jira相同的逻辑选择或创建用户进行负载测试。

dataset[PAGES] = __get_pages(rest_client, 5000)

我们使用以下cql从Confluence中选择页面:“ type =页面和标题!〜JMeter和标题!〜Selenium和标题!〜Home”。

dataset[BLOGS] = __get_blogs(rest_client, 5000)

我们通过以下cql从Confluence中选择博客:“类型=博客文章和标题!〜性能”。

因此,为了开始测试Confluence,您需要在副本中包含页面和博客。

比特桶


现在查看 Bitbucket prepare-data.py文件 

这是主要功能:

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)

我们根据与Jira相同的逻辑选择或创建用户,但是这次用户应使用“ dcapt-perf-user”前缀。创建用户时,密码等于用户名。

dataset[PROJECTS] = __get_projects(bitbucket_api)

我们选择项目。

dataset[REPOS] = __get_repos(bitbucket_api)

我们选择存储库。

dataset[PULL_REQUESTS] = __get_prs(bitbucket_api)

我们选择请求池。请求池的数量必须不少于bitbucket.yml文件中的concurrency参数 

因此,为了运行Bitbucket的测试,您需要在您的实例项目中拥有不少于bitbucket.yml文件中的并发参数的项目,存储库和记录池。

因此,我们研究了如何使用Atlassian准备的备份为负载测试准备数据,以及如何对数据进行负载测试。在下一部分中,我们将讨论在压力测试后会创建哪些工件,它们提供了哪些信息以及我们可以从包装盒中生成什么样的图形。

All Articles