Last updated Dec 21, 2022

Rate this page:

Data Center App Performance Toolkit User Guide For Confluence

This document walks you through the process of testing your app on Confluence using the Data Center App Performance Toolkit. These instructions focus on producing the required performance and scale benchmarks for your Data Center app.

In this document, we cover the use of the Data Center App Performance Toolkit on two types of environments:

Development environment: Confluence Data Center environment for a test run of Data Center App Performance Toolkit and development of app-specific actions. We recommend you use the AWS Quick Start for Confluence Data Center with the parameters prescribed here.

  1. Set up a development environment Confluence Data Center on AWS.
  2. Run toolkit on the development environment locally.
  3. Develop and test app-specific actions locally.

Enterprise-scale environment: Confluence Data Center environment used to generate Data Center App Performance Toolkit test results for the Marketplace approval process. Preferably, use the AWS Quick Start for Confluence Data Center with the parameters prescribed below. These parameters provision larger, more powerful infrastructure for your Confluence Data Center.

  1. Set up an enterprise-scale environment Confluence Data Center on AWS.
  2. Set up an execution environment for the toolkit.
  3. Running the test scenarios from execution environment against enterprise-scale Confluence Data Center.

Development environment

Running the tests in a development environment helps familiarize you with the toolkit. It'll also provide you with a lightweight and less expensive environment for developing app-specific actions. Once you're ready to generate test results for the Marketplace Data Center Apps Approval process, run the toolkit in an enterprise-scale environment.


In case you are in the middle of Confluence DC app performance testing with the CloudFormation deployment option, the process can be continued after switching to the 6.3.0 DCAPT version.


1. Setting up Confluence Data Center development environment

We recommend that you use the official documentation how to deploy a Confluence Data Center environment and AWS on k8s.

AWS cost estimation for the development environment

To reduce costs, we recommend you to keep your deployment up and running only during the performance runs. AWS Confluence Data Center development environment infrastructure costs about 20 - 40$ per working week depending on such factors like region, instance type, deployment type of DB, and other.

Setup Confluence Data Center development environment on k8s.

Confluence Data Center development environment is good for app-specific actions development. But not powerful enough for performance testing at scale. See Set up an enterprise-scale environment Confluence Data Center on AWS for more details.

Below process describes how to install low-tier Confluence DC with "small" dataset included:

  1. Read requirements section of the official documentation.

  2. Set up environment.

  3. Set up AWS security credentials.

  4. Clone the project repo:

    1
    2
    git clone -b 2.2.3 https://github.com/atlassian-labs/data-center-terraform.git && cd data-center-terraform
    
  5. Copy dcapt-small.tfvars file to the data-center-terraform folder.

    1
    2
    wget https://raw.githubusercontent.com/atlassian/dc-app-performance-toolkit/master/app/util/k8s/dcapt-small.tfvars
    
  6. Set required variables in dcapt-small.tfvars file:

    • environment_name - any name for you environment, e.g. dcapt-confluence-small
    • products - confluence
    • confluence_license - one-liner of valid confluence license without spaces and new line symbols
    • region - AWS region for deployment. Do not change default region (us-east-2). If specific region is required, contact support.
  7. Optional variables to override:

  8. Start the installation (~20 min):

    1
    2
    ./install.sh -c dcapt-small.tfvars
    
  9. Copy product URL from the console output. Product url should look like http://a1234-54321.us-east-2.elb.amazonaws.com/confluence.

All the datasets use the standard admin/admin credentials.


2. Run toolkit on the development environment locally

Make sure English language is selected as a default language on the cog icon > General configuration > Languages page. Other languages are not supported by the toolkit.

Make sure Remote API is enabled on the cog icon > General configuration > Further Configuration page.

  1. Clone Data Center App Performance Toolkit locally.

  2. Follow the README.md instructions to set up toolkit locally.

  3. Navigate to dc-app-performance-toolkit/app folder.

  4. Open the confluence.yml file and fill in the following variables:

  5. Run bzt.

    1
    2
    bzt confluence.yml
    
  6. Review the resulting table in the console log. All JMeter/Locust and Selenium actions should have 95+% success rate.
    In case some actions does not have 95+% success rate refer to the following logs in dc-app-performance-toolkit/app/results/confluence/YY-MM-DD-hh-mm-ss folder:

    • results_summary.log: detailed run summary
    • results.csv: aggregated .csv file with all actions and timings
    • bzt.log: logs of the Taurus tool execution
    • jmeter.*: logs of the JMeter tool execution
    • locust.*: logs of the Locust tool execution (in case you use Locust as load_executor in confluence.yml)
    • pytest.*: logs of Pytest-Selenium execution

Do not proceed with the next step until you have all actions 95+% success rate. Ask support if above logs analysis did not help.


3. Develop and test app-specific actions locally

Data Center App Performance Toolkit has its own set of default test actions for Confluence Data Center: JMeter/Locust and Selenium for load and UI tests respectively.

App-specific action - action (performance test) you have to develop to cover main use cases of your application. Performance test should focus on the common usage of your application and not to cover all possible functionality of your app. For example, application setup screen or other one-time use cases are out of scope of performance testing.

  1. Define main use case of your app. Usually it is one or two main app use cases.
  2. Your app adds new UI elements in Confluence Data Center - Selenium app-specific action has to be developed.
  3. Your app introduces new endpoint or extensively calls existing Confluence Data Center API - JMeter/Locust app-specific actions has to be developed.
    JMeter and Locust actions are interchangeable, so you could select the tool you prefer:

We strongly recommend developing your app-specific actions on the development environment to reduce AWS infrastructure costs.

Custom dataset

You can filter your own app-specific pages/blog posts for your app-specific actions.

  1. Create app-specific pages/blog posts that have specific anchor in title, e.g. AppPage anchor and pages titles like AppPage1, AppPage2, AppPage3.
  2. Go to the search page of your Confluence Data Center - CONFLUENCE_URL/dosearchsite.action?queryString= (Confluence versions 6.X and below) or just click to search field in UI (Confluence versions 7.X and higher).
  3. Write CQL that filter just your pages or blog posts from step 1, e.g. title ~ 'AppPage*'.
  4. Edit Confluence configuration file dc-app-performance-toolkit/app/confluence.yml:
    • custom_dataset_query: CQL from step 3.

Next time when you run toolkit, custom dataset pages will be stored to the dc-app-performance-toolkit/app/datasets/confluence/custom_pages.csv with columns: page_id, space_key.

Example of app-specific Selenium action development with custom dataset

You develop an app that adds additional UI elements to Confluence pages or blog posts. In this case, you should develop Selenium app-specific action:

  1. Create app-specific Confluence pages with AppPagee anchor in title: AppPage1, AppPage2, *AppPage3, etc.
  2. Go to the search page of your Confluence Data Center - CONFLUENCE_URL/dosearchsite.action?queryString= (Confluence versions 6.X and below) or just click to search field in UI (Confluence versions 7.X and higher) and check if CQL is correct: title ~ 'AppPage*'.
  3. Edit dc-app-performance-toolkit/app/confluence.yml configuration file and set custom_dataset_query: "title ~ 'AppPage*'".
  4. Extend example of app-specific action in dc-app-performance-toolkit/app/extension/confluence/extension_ui.py.
    Code example. So, our test has to open page or blog post with app-specific UI element and measure time to load of this app-specific page or blog post.
  5. If you need to run app_speicifc_action as specific user uncomment app_specific_user_login function in code example. Note, that in this case test_1_selenium_custom_action should follow just before test_2_selenium_z_log_out action.
  6. In dc-app-performance-toolkit/app/selenium_ui/confluence_ui.py, review and uncomment the following block of code to make newly created app-specific actions executed:
1
2
# def test_1_selenium_custom_action(confluence_webdriver, confluence_datasets, confluence_screen_shots):
#     extension_ui.app_specific_action(confluence_webdriver, confluence_datasets)
  1. Run toolkit with bzt confluence.yml command to ensure that all Selenium actions including app_specific_action are successful.

Example of app-specific Locust/JMeter action development

You develop an app that introduces new GET and POST endpoints in Confluence Data Center. In this case, you should develop Locust or JMeter app-specific action.

Locust app-specific action development example

  1. Extend example of app-specific action in dc-app-performance-toolkit/app/extension/confluence/extension_locust.py, so that test will call the endpoint with GET request, parse response use these data to call another endpoint with POST request and measure response time.
    Code example.
  2. In dc-app-performance-toolkit/app/confluence.yml set load_executor: locust to make locust as load executor.
  3. Set desired execution percentage for standalone_extension. Default value is 0, which means that standalone_extension action will not be executed. Locust uses actions percentage as relative weights, so if some_action: 10 and standalone_extension: 20 that means that standalone_extension will be called twice more.
    Set standalone_extension weight in accordance with the expected frequency of your app use case compared with other base actions.
  4. App-specific tests could be run (if needed) as a specific user. Use @run_as_specific_user(username='specific_user_username', password='specific_user_password') decorator for that.
  5. Run toolkit with bzt confluence.yml command to ensure that all Locust actions including app_specific_action are successful.

JMeter app-specific action development example

  1. Check that confluence.yml file has correct settings of application_hostname, application_protocol, application_port, application_postfix, etc.

  2. Set desired execution percentage for standalone_extension. Default value is 0, which means that standalone_extension action will not be executed. For example, for app-specific action development you could set percentage of standalone_extension to 100 and for all other actions to 0 - this way only login_and_view_dashboard and standalone_extension actions would be executed.

  3. Navigate to dc-app-performance-toolkit/app folder and run from virtualenv(as described in dc-app-performance-toolkit/README.md):

    python util/jmeter/start_jmeter_ui.py --app confluence

  4. Open Confluence thread group > actions per login and navigate to standalone_extension Confluence JMeter standalone extension

  5. Add GET HTTP Request: right-click to standalone_extension > Add > Sampler HTTP Request, chose method GET and set endpoint in Path. Confluence JMeter standalone GET

  6. Add Regular Expression Extractor: right-click to to newly created HTTP Request > Add > Post processor > Regular Expression Extractor Confluence JMeter standalone regexp

  7. Add Response Assertion: right-click to newly created HTTP Request > Add > Assertions > Response Assertion and add assertion with Contains, Matches, Equals, etc types. Confluence JMeter standalone assertions

  8. Add POST HTTP Request: right-click to standalone_extension > Add > Sampler HTTP Request, chose method POST, set endpoint in Path and add Parameters or Body Data if needed.

  9. Right-click on View Results Tree and enable this controller.

  10. Click Start button and make sure that login_and_view_dashboard and standalone_extension are successful.

  11. Right-click on View Results Tree and disable this controller. It is important to disable View Results Tree controller before full-scale results generation.

  12. Click Save button.

  13. To make standalone_extension executable during toolkit run edit dc-app-performance-toolkit/app/confluence.yml and set execution percentage of standalone_extension accordingly to your use case frequency.

  14. App-specific tests could be run (if needed) as a specific user. In the standalone_extension uncomment login_as_specific_user controller. Navigate to the username:password config element and update values for app_specific_username and app_specific_password names with your specific user credentials. Also make sure that you located your app-specific tests between login_as_specific_user and login_as_default_user_if_specific_user_was_loggedin controllers.

  15. Run toolkit to ensure that all JMeter actions including standalone_extension are successful.

Using JMeter variables from the base script

Use or access the following variables of the extension script from the base script. They can also be inherited.

  • ${blog_id} - blog post id being viewed or modified (e.g. 23766699)
  • ${blog_space_key} - blog space key (e.g. PFSEK)
  • ${page_id} - page if being viewed or modified (e.g. 360451)
  • ${space_key} - page space key (e.g. TEST)
  • ${file_path} - path of file to upload (e.g. datasets/confluence/static-content/upload/test5.jpg)
  • ${file_type} - type of the file (e.g. image/jpeg)
  • ${file_name} - name of the file (e.g. test5.jpg)
  • ${username} - the logged in username (e.g. admin)

App-specific actions are required. Do not proceed with the next step until you have completed app-specific actions development and got successful results from toolkit run.


Enterprise-scale environment

After adding your custom app-specific actions, you should now be ready to run the required tests for the Marketplace Data Center Apps Approval process. To do this, you'll need an enterprise-scale environment.

4. Setting up Confluence Data Center enterprise-scale environment with "large" dataset

We recommend that you use the official documentation how to deploy a Confluence Data Center environment and AWS on k8s.

AWS cost estimation

AWS Pricing Calculator provides an estimate of usage charges for AWS services based on certain information you provide. Monthly charges will be based on your actual usage of AWS services, and may vary from the estimates the Calculator has provided.

*The prices below are approximate and may vary depending on factors such as (region, instance type, deployment type of DB, etc.)

ClusterEstimated hourly cost ($)
One pod Confluence DC0.8 - 1.0
Two pods Confluence DC1.2 - 1.5
Four pods Confluence DC2.0 - 3.0

Setup Confluence Data Center enterprise-scale environment on k8s.

Data dimensions and values for an enterprise-scale dataset are listed and described in the following table.

Data dimensionsValue for an enterprise-scale dataset
Pages~900 000
Blogposts~100 000
Attachments~2 300 000
Comments~6 000 000
Spaces~5 000
Users~5 000

Below process describes how to install enterprise-scale Confluence DC with "large" dataset included:

  1. Read requirements section of the official documentation.

  2. Set up environment.

  3. Set up AWS security credentials.

  4. Clone the project repo:

    1
    2
    git clone -b 2.2.3 https://github.com/atlassian-labs/data-center-terraform.git && cd data-center-terraform
    
  5. Copy dcapt.tfvars file to the data-center-terraform folder.

    1
    2
    wget https://raw.githubusercontent.com/atlassian/dc-app-performance-toolkit/master/app/util/k8s/dcapt.tfvars
    
  6. Set required variables in dcapt.tfvars file:

    • environment_name - any name for you environment, e.g. dcapt-confluence-large
    • products - confluence
    • confluence_license - one-liner of valid confluence license without spaces and new line symbols
    • region - AWS region for deployment. Do not change default region (us-east-2). If specific region is required, contact support.
  7. Optional variables to override:

  8. Start the installation (~40min):

    1
    2
    ./install.sh -c dcapt.tfvars
    
  9. Copy product URL from the console output. Product url should look like http://a1234-54321.us-east-2.elb.amazonaws.com/confluence.

All the datasets use the standard admin/admin credentials. It's recommended to change default password from UI account page for security reasons.

Terminate cluster when it is not used for performance results generation.


5. Setting up an execution environment

For generating performance results suitable for Marketplace approval process use dedicated execution environment. This is a separate AWS EC2 instance to run the toolkit from. Running the toolkit from a dedicated instance but not from a local machine eliminates network fluctuations and guarantees stable CPU and memory performance.

  1. Go to GitHub and create a fork of dc-app-performance-toolkit.
  2. Clone the fork locally, then edit the confluence.yml configuration file. Set enterprise-scale Confluence Data Center parameters:

Do not push to the fork real application_hostname, admin_login and admin_password values for security reasons. Instead, set those values directly in .yml file on execution environment instance.

1
2
    application_hostname: test_confluence_instance.atlassian.com   # Confluence DC hostname without protocol and port e.g. test-confluence.atlassian.com or localhost
    application_protocol: http        # http or https
    application_port: 80              # 80, 443, 8080, 2990, etc
    secure: True                      # Set False to allow insecure connections, e.g. when using self-signed SSL certificate
    application_postfix: /confluence  # e.g. /confluence for TerraForm deployment url like `http://a1234-54321.us-east-2.elb.amazonaws.com/confluence`
    admin_login: admin
    admin_password: admin
    load_executor: jmeter             # jmeter and locust are supported. jmeter by default.
    concurrency: 200                  # number of concurrent virtual users for jmeter or locust scenario
    test_duration: 45m
    ramp-up: 5m                       # time to spin all concurrent users
    total_actions_per_hour: 20000     # number of total JMeter/Locust actions per hour.
  1. Push your changes to the forked repository.

  2. Launch AWS EC2 instance.

  3. Connect to the instance using SSH or the AWS Systems Manager Sessions Manager.

    1
    2
    ssh -i path_to_pem_file ubuntu@INSTANCE_PUBLIC_IP
    
  4. Install Docker. Setup manage Docker as a non-root user.

  5. Clone forked repository.

At this stage app-specific actions are not needed yet. Use code from master branch with your confluence.yml changes.

You'll need to run the toolkit for each test scenario in the next section.


6. Running the test scenarios from execution environment against enterprise-scale Confluence Data Center

Using the Data Center App Performance Toolkit for Performance and scale testing your Data Center app involves two test scenarios:

Each scenario will involve multiple test runs. The following subsections explain both in greater detail.

Scenario 1: Performance regression

This scenario helps to identify basic performance issues without a need to spin up a multi-node Confluence DC. Make sure the app does not have any performance impact when it is not exercised.

Run 1 (~50 min)

To receive performance baseline results without an app installed:

  1. Use SSH to connect to execution environment.

  2. Run toolkit with docker from the execution environment instance:

    1
    2
    cd dc-app-performance-toolkit
    docker pull atlassian/dcapt
    docker run --shm-size=4g -v "$PWD:/dc-app-performance-toolkit" atlassian/dcapt confluence.yml
    
  3. View the following main results of the run in the dc-app-performance-toolkit/app/results/confluence/YY-MM-DD-hh-mm-ss folder:

    • results_summary.log: detailed run summary
    • results.csv: aggregated .csv file with all actions and timings
    • bzt.log: logs of the Taurus tool execution
    • jmeter.*: logs of the JMeter tool execution
    • pytest.*: logs of Pytest-Selenium execution

Review results_summary.log file under artifacts dir location. Make sure that overall status is OK before moving to the next steps. For an enterprise-scale environment run, the acceptable success rate for actions is 95% and above.

Run 2 (~50 min)

To receive performance results with an app installed:

  1. Install the app you want to test.

  2. Setup app license.

  3. Run toolkit with docker from the execution environment instance:

    1
    2
    cd dc-app-performance-toolkit
    docker pull atlassian/dcapt
    docker run --shm-size=4g -v "$PWD:/dc-app-performance-toolkit" atlassian/dcapt confluence.yml
    

Review results_summary.log file under artifacts dir location. Make sure that overall status is OK before moving to the next steps. For an enterprise-scale environment run, the acceptable success rate for actions is 95% and above.

Generating a performance regression report

To generate a performance regression report:

  1. Use SSH to connect to execution environment.
  2. Install and activate the virtualenv as described in dc-app-performance-toolkit/README.md
  3. Allow current user (for execution environment default user is ubuntu) to access Docker generated reports:
    1
    2
    sudo chown -R ubuntu:ubuntu /home/ubuntu/dc-app-performance-toolkit/app/results
    
  4. Navigate to the dc-app-performance-toolkit/app/reports_generation folder.
  5. Edit the performance_profile.yml file:
    • Under runName: "without app", in the fullPath key, insert the full path to results directory of Run 1.
    • Under runName: "with app", in the fullPath key, insert the full path to results directory of Run 2.
  6. Run the following command:
    1
    2
    python csv_chart_generator.py performance_profile.yml
    
  7. In the dc-app-performance-toolkit/app/results/reports/YY-MM-DD-hh-mm-ss folder, view the .csv file (with consolidated scenario results), the .png chart file and performance scenario summary report.

Analyzing report

Use scp command to copy report artifacts from execution env to local drive:

  1. From local machine terminal (Git bash terminal for Windows) run command:
    1
    2
    export EXEC_ENV_PUBLIC_IP=execution_environment_ec2_instance_public_ip
    scp -r -i path_to_exec_env_pem ubuntu@$EXEC_ENV_PUBLIC_IP:/home/ubuntu/dc-app-performance-toolkit/app/results/reports ./reports
    
  2. Once completed, in the ./reports folder you will be able to review the action timings with and without your app to see its impact on the performance of the instance. If you see an impact (>20%) on any action timing, we recommend taking a look into the app implementation to understand the root cause of this delta.

Scenario 2: Scalability testing

The purpose of scalability testing is to reflect the impact on the customer experience when operating across multiple nodes. For this, you have to run scale testing on your app.

For many apps and extensions to Atlassian products, there should not be a significant performance difference between operating on a single node or across many nodes in Confluence DC deployment. To demonstrate performance impacts of operating your app at scale, we recommend testing your Confluence DC app in a cluster.

Run 3 (~50 min)

To receive scalability benchmark results for one-node Confluence DC with app-specific actions:

  1. Apply app-specific code changes to a new branch of forked repo.

  2. Use SSH to connect to execution environment.

  3. Pull cloned fork repo branch with app-specific actions.

  4. Run toolkit with docker from the execution environment instance:

    1
    2
    cd dc-app-performance-toolkit
    docker pull atlassian/dcapt
    docker run --shm-size=4g -v "$PWD:/dc-app-performance-toolkit" atlassian/dcapt confluence.yml
    

Review results_summary.log file under artifacts dir location. Make sure that overall status is OK before moving to the next steps. For an enterprise-scale environment run, the acceptable success rate for actions is 95% and above.

Run 4 (~50 min)

To receive scalability benchmark results for two-node Confluence DC with app-specific actions:

  1. Navigate to data-center-terraform folder.
  2. Open dcapt.tfvars file and set confluence_replica_count value to 2.
  3. Start scaling (~20 min):
    1
    2
    ./install.sh -c dcapt.tfvars
    
  4. Use SSH to connect to execution environment.
  5. Run toolkit with docker from the execution environment instance:
    1
    2
    cd dc-app-performance-toolkit
    docker pull atlassian/dcapt
    docker run --shm-size=4g -v "$PWD:/dc-app-performance-toolkit" atlassian/dcapt confluence.yml
    

Review results_summary.log file under artifacts dir location. Make sure that overall status is OK before moving to the next steps. For an enterprise-scale environment run, the acceptable success rate for actions is 95% and above.

Run 5 (~50 min)

To receive scalability benchmark results for four-node Confluence DC with app-specific actions:

  1. Scale your Confluence Data Center deployment to 4 nodes as described in Run 4.

  2. Run toolkit with docker from the execution environment instance:

    1
    2
    cd dc-app-performance-toolkit
    docker pull atlassian/dcapt
    docker run --shm-size=4g -v "$PWD:/dc-app-performance-toolkit" atlassian/dcapt confluence.yml
    

Review results_summary.log file under artifacts dir location. Make sure that overall status is OK before moving to the next steps. For an enterprise-scale environment run, the acceptable success rate for actions is 95% and above.

Generating a report for scalability scenario

To generate a scalability report:

  1. Use SSH to connect to execution environment.
  2. Allow current user (for execution environment default user is ubuntu) to access Docker generated reports:
    1
    2
    sudo chown -R ubuntu:ubuntu /home/ubuntu/dc-app-performance-toolkit/app/results
    
  3. Navigate to the dc-app-performance-toolkit/app/reports_generation folder.
  4. Edit the scale_profile.yml file:
    • For runName: "1 Node", in the fullPath key, insert the full path to results directory of Run 3.
    • For runName: "2 Nodes", in the fullPath key, insert the full path to results directory of Run 4.
    • For runName: "4 Nodes", in the fullPath key, insert the full path to results directory of Run 5.
  5. Run the following command from the virtualenv (as described in dc-app-performance-toolkit/README.md):
    1
    2
    python csv_chart_generator.py scale_profile.yml
    
  6. In the dc-app-performance-toolkit/app/results/reports/YY-MM-DD-hh-mm-ss folder, view the .csv file (with consolidated scenario results), the .png chart file and summary report.

Analyzing report

Use scp command to copy report artifacts from execution env to local drive:

  1. From local terminal (Git bash terminal for Windows) run command:
    1
    2
    export EXEC_ENV_PUBLIC_IP=execution_environment_ec2_instance_public_ip
    scp -r -i path_to_exec_env_pem ubuntu@$EXEC_ENV_PUBLIC_IP:/home/ubuntu/dc-app-performance-toolkit/app/results/reports ./reports
    
  2. Once completed, in the ./reports folder, you will be able to review action timings on Confluence Data Center with different numbers of nodes. If you see a significant variation in any action timings between configurations, we recommend taking a look into the app implementation to understand the root cause of this delta.

Attaching testing results to ECOHELP ticket

Do not forget to attach performance testing results to your ECOHELP ticket.

  1. Make sure you have two reports folders: one with performance profile and second with scale profile results. Each folder should have profile.csv, profile.png, profile_summary.log and profile run result archives. Archives should contain all raw data created during the run: bzt.log, selenium/jmeter/locust logs, .csv and .yml files, etc.
  2. Attach two reports folders to your ECOHELP ticket.

Support

See Troubleshooting tips page for Terraform related questions. In case of technical questions, issues or problems with DC Apps Performance Toolkit, contact us for support in the community Slack #data-center-app-performance-toolkit channel.

Rate this page: