大家好!我想分享使用Atlassian dc-app-performance-toolkit进行Atlassian Jira,Confluence和Bitbucket压力测试的经验。这是一系列文章,在这里我不会谈论负载测试的方法,而只会谈论使用该工具进行负载测试的技术方面。如果您想了解有关Atlassian产品的负载测试方法的更多信息,那么我在Highload 2018上谈到了这一点。因此,让我们继续使用dc-app-performance-toolkit。该工具允许您加载测试Atlassian应用程序,例如Jira,Confluence和Bitbucket。当我需要在数据中心上测试Atlassian Jira插件以进行认证时,我就了解了该工具,然后立即喜欢上了该工具,因为我不必花费数小时来设置它。一切开箱即用。该工具使用Taurus,jmeter和Selenium。您可以将此工具用于以下目的:- 您正在为Atlassian Marketplace开发插件。在这种情况下,您可以使用此工具来认证您的Data Center插件。
- 您可以根据自己的需要使用Atlassian Jira,Confluence和Bitbucket,并使用标准工具,脚本,插件或任何其他方式修改这些产品,并且希望了解配置如何承受负载。在这种情况下,您也可以使用此工具。此外,请务必注意,您可以对自己的数据进行压力测试。为此,您不必重做工具中的任何内容。该工具的文档说它仅支持Atlassian产品的某些版本,但是如果您没有Atlassian产品的完全旧的版本,则该工具很可能无需其他修改即可工作。无论如何,在本系列文章中,我将告诉您如何修改该工具。
在大多数情况下,测试Atlassian Jira,Confluence和Bitbucket所需执行的步骤是相同的,因此,我将在Atlassian Jira上进行所有工作。如果产品有任何特定步骤,我将提及。安装
首先要做的是使用github获得一个工具:git clone https://github.com/atlassian/dc-app-performance-toolkit.git
并转到创建的文件夹:cd dc-app-performance-toolkit
接下来,您需要安装所有依赖项才能使用该工具。您可以在path_to_dc_app_performance_toolkit / README.md中阅读如何执行此操作。配置文件
在使用该工具之前,请阅读path_to_dc_app_performance_toolkit / doc文件夹中该工具的文档。这是此文件夹内容的简要说明:- 3 md ( Jira, Confluence Bitbucket). , Data Center.
- : jira, confluence bitbucket , .
jira.yml
在开始负载测试之前,您需要对path.to_dc_app_performance_toolkit / app文件夹中 的jira.yml, confluence.yml 或 bitbucket.yml文件进行更改,具体取决于要测试的产品。这些是Taurus配置文件。您可以在这里阅读有关金牛座的信息。
我将在jira.yml上发表评论。其他产品的文件是基于相同原理构建的。settings:
设置是Taurus配置文件的一部分。它包含金牛座的顶级选项。您可以在此处找到有关此部分的更多信息 。 artifacts-dir: results/jira/%Y-%m-%d_%H-%M-%S
artifacts-dir-将用于存储负载测试工件的路径模板。这是工件的部分列表:bzt.log
-bzt命令的日志。此命令开始负载测试。error_artifacts
-一个文件夹,用于存储Selenium的屏幕截图和html测试,但以错误结尾。jmeter.err
-JMeter日志。kpi.jtl
-JMeter测试数据。pytest.out
-Selenum测试执行日志。selenium.jtl
-硒测试数据。results.csv
-汇总测试结果。jira.yml
-jira.yml,用于测试。
aggregator: consolidator
聚合器-用于收集测试结果并将结果传输到报告模块的聚合器。您可以在此处阅读有关聚合器的更多信息。 verbose: false
verbose-用于在调试模式下启动Taurus的参数。在我们的情况下,我们关闭此模式。 env:
env允许您设置环境变量。您可以在这里阅读更多内容 。 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
上面的参数包含有关要测试的实例的信息。我为计算机上的Jira实例指定了参数。这些参数将在JMeter,Selenium和脚本中使用。 concurrency: 200
test_duration: 45m
这些参数将传递到执行部分。在讨论本节时,我将解释这些参数的含义。 WEBDRIVER_VISIBLE: false
WEBDRIVER_VISIBLE设置执行Selenium测试期间Chrome浏览器的可见性。我们正在隐藏Chrome。 JMETER_VERSION: 5.2.1
JMETER_VERSION是我们将用于测试的JMeter版本。 allow_analytics: Yes # , Atlassian. Atlassian , , , .
services:
services-Taurus配置文件的部分。在此处指示有关在开始测试之前,之后和期间需要运行哪些脚本的信息。您可以在此处阅读有关此部分的更多信息。 - module: shellexec
Shell executor用于执行脚本。 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
准备,关闭和后期处理是金牛座生命周期的各个阶段。您可以在此处阅读有关Taurus生命周期的更多信息。在每个阶段,都会运行脚本。这些脚本是:- util / environment_checker.py-检查Python的版本,如果版本不同则停止测试。
- util / data_preparation / jira / prepare-data.py-准备测试数据。我们将在下一部分中详细讨论该脚本。
- 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:
执行-Taurus配置文件的部分。包含将在测试期间执行的脚本。您可以在此处找到更多信息。 - scenario: jmeter
concurrency: ${concurrency}
hold-for: ${test_duration}
ramp-up: 3m
这些是JMeter的脚本执行选项。您可以在此处找到更多信息 。并发是虚拟用户数。该参数表示JMeter将模拟多少个并发用户。在我们的案例中,我们模拟了200个同时工作的用户。加速-测试超频时间。我们将逐步达到200个同时工作的用户。在我们的案例中,我们将在3分钟内达到200个同时工作的用户。保持-在并发参数中达到给定数量的并发用户后的测试持续时间。 - scenario: selenium
executor: selenium
runner: pytest
hold-for: ${test_duration}
硒测试执行选项。您可以在此处找到更多信息 。执行者-硒。Runner-测试将使用pytest进行。保留-测试时间。scenarios:
方案-Taurus配置文件的部分。这是执行部分中每个脚本的配置。 selenium:
script: selenium_ui/jira_ui.py
脚本-硒测试的路径。 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
脚本-JMeter项目的路径,将在测试期间执行。total_actions_per_hr一小时内将执行的操作数。一种措施是执行一项测试。可以从perc_参数中了解将要运行的测试。perc_参数-每个测试的完成百分比。所有perc_参数的总和必须等于100%。modules:
consolidator:
rtimes-len: 0 # CONFSRVDEV-7631 reduce sampling
percentiles: [] # CONFSRVDEV-7631 disable all percentiles due to Taurus's excessive memory usage
modules-Taurus配置文件的部分。本节包含测试期间将使用的所有模块的说明。 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-JMeter模块的参数。您可以在此处阅读有关Jmeter模块的信息。detect-plugins-JMeter插件管理器允许您自动安装JMeter插件。我们将此参数设置为yes,以便Taurus告诉Jmeter自动安装所有必需的插件。插件-编写测试时使用的JMeter插件列表。系统属性-JMeter的附加参数。 selenium:
# version of the chrome driver
chromedriver:
version: "80.0.3987.106" # Supports Chrome version 80. You can refer to http:
硒-硒的参数。chromedriver是我们将用于测试的Chrome驱动程序的版本。reporting:
- data-source: sample-labels
module: junit-xml
报告-Taurus配置文件的部分。在这里,您可以设置分析和报告模块的设置。我们使用JUnit xml报告模块。您可以在此处找到有关此模块的更多信息。让我们总结一下。jira.xml文件中有6个部分:设置-顶级设置和参数。您需要在此部分中更改以下参数: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
您可能还需要更改以下参数:concurrency: 5
test_duration: 5m
我将这些参数更改为较小的值,以便快速进行测试。如果您更改了test_duration和并发性,请确保在执行部分中检查斜升参数。您可能也需要更改它。服务-将在Taurus测试生命周期的各个阶段执行的脚本。执行-测试脚本的执行参数。首先,运行JMeter,然后运行Selenium。方案-测试脚本参数。也许您想更改每小时的操作次数和测试百分比。我将在以下部分之一中讨论如何添加或删除测试。模块-用于测试的模块。我们使用合并器,JMeter和Selenium。Taurus在测试过程中为我们提供了这些模块的可用性。报表-报表模块的参数。好。我们已经更改了配置文件,并准备运行测试。运行测试
首先,激活Python虚拟环境(您可以在README.md文件中找到有关此信息),转到app文件夹并运行测试:bzt jira.yml
就我而言,测试失败并显示以下错误:17:03:26 WARNING: Errors for python util/data_preparation/jira/prepare-data.py:
There are no software projects in Jira
一切正确。我的吉拉副本是空的。有必要用测试数据填充它。在第2部分中,我将告诉您如何执行此操作。