Skip to content

Commit 8651a33

Browse files
authored
Merge pull request atlassian#341 from atlassian/release/3.2.0
Release/3.2.0
2 parents 9865757 + 5812968 commit 8651a33

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2277
-2154
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ This repository contains Taurus scripts for performance testing of Atlassian Dat
55

66
## Supported versions
77
* Supported Jira versions:
8-
* Jira [Long Term Support release](https://confluence.atlassian.com/enterprise/atlassian-enterprise-releases-948227420.html): 7.13.15 and 8.5.6
8+
* Jira [Long Term Support release](https://confluence.atlassian.com/enterprise/atlassian-enterprise-releases-948227420.html): 7.13.15 and 8.5.8
99
* Jira Platform release: 8.0.3
1010

1111
* Supported Confluence versions:
12-
* Confluence [Long Term Support release](https://confluence.atlassian.com/enterprise/atlassian-enterprise-releases-948227420.html): 6.13.13
12+
* Confluence [Long Term Support release](https://confluence.atlassian.com/enterprise/atlassian-enterprise-releases-948227420.html): 6.13.13 and 7.4.4
1313
* Confluence Platform release: 7.0.5
1414

1515
* Supported Bitbucket Server versions:

app/bitbucket.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ settings:
77
application_hostname: test_bitbucket_instance.atlassian.com # Bitbucket DC hostname without protocol and port e.g. test-bitbucket.atlassian.com or localhost
88
application_protocol: http # http or https
99
application_port: 80 # 80, 443, 8080, 7990 etc
10+
secure: True # Set False to allow insecure connections, e.g. when using self-signed SSL certificate
1011
application_postfix: # e.g. /bitbucket in case of url like http://localhost:7990/bitbucket
1112
admin_login: admin
1213
admin_password: admin
@@ -17,6 +18,7 @@ settings:
1718
total_actions_per_hour: 32700
1819
WEBDRIVER_VISIBLE: False
1920
JMETER_VERSION: 5.2.1
21+
LANGUAGE: en_US.utf8
2022
allow_analytics: Yes # Allow sending basic run analytics to Atlassian. These analytics help us to understand how the tool is being used and help us to continue to invest in this tooling. For more details please see our README.
2123
services:
2224
- module: shellexec
@@ -83,7 +85,7 @@ modules:
8385
httpsampler.ignore_failed_embedded_resources: "true"
8486
selenium:
8587
chromedriver:
86-
version: "84.0.4147.30" # Supports Chrome version 84. You can refer to http://chromedriver.chromium.org/downloads
88+
version: "86.0.4240.22" # Supports Chrome version 86. You can refer to http://chromedriver.chromium.org/downloads
8789
reporting:
8890
- data-source: sample-labels
8991
module: junit-xml

app/confluence.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,20 @@ settings:
77
application_hostname: test_confluence_instance.atlassian.com # Confluence DC hostname without protocol and port e.g. test-confluence.atlassian.com or localhost
88
application_protocol: http # http or https
99
application_port: 80 # 80, 443, 8080, 1990, etc
10+
secure: True # Set False to allow insecure connections, e.g. when using self-signed SSL certificate
1011
application_postfix: # e.g. /confluence in case of url like http://localhost:1990/confluence
1112
admin_login: admin
1213
admin_password: admin
1314
load_executor: jmeter # jmeter and locust are supported. jmeter by default.
1415
concurrency: 200 # number of concurrent virtual users for jmeter or locust scenario
1516
test_duration: 45m
16-
ramp-up: 3m # time to spin all concurrent users
17+
ramp-up: 5m # time to spin all concurrent users
1718
total_actions_per_hour: 20000
1819
WEBDRIVER_VISIBLE: False
1920
JMETER_VERSION: 5.2.1
21+
LANGUAGE: en_US.utf8
2022
allow_analytics: Yes # Allow sending basic run analytics to Atlassian. These analytics help us to understand how the tool is being used and help us to continue to invest in this tooling. For more details please see our README.
21-
# Action percentage for Jmeter and Locust load executors
23+
# Action percentage for JMeter and Locust load executors
2224
view_page: 54
2325
view_dashboard: 6
2426
view_blog: 8
@@ -30,6 +32,8 @@ settings:
3032
upload_attachment: 5
3133
like_page: 3
3234
standalone_extension: 0 # By default disabled
35+
# Custom dataset section.
36+
custom_dataset_query: # Write CQL query to add CQL output to the app/datasets/confluence/custom_pages.csv, e.g. "title ~ 'AppPage*'"
3337
services:
3438
- module: shellexec
3539
prepare:
@@ -105,7 +109,7 @@ modules:
105109
httpsampler.ignore_failed_embedded_resources: "true"
106110
selenium:
107111
chromedriver:
108-
version: "84.0.4147.30" # Supports Chrome version 84. You can refer to http://chromedriver.chromium.org/downloads
112+
version: "86.0.4240.22" # Supports Chrome version 86. You can refer to http://chromedriver.chromium.org/downloads
109113
reporting:
110114
- data-source: sample-labels
111115
module: junit-xml

app/extension/bitbucket/extension_ui.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,17 @@
77

88
def app_specific_action(webdriver, datasets):
99
page = BasePage(webdriver)
10+
repo = datasets['repos']
11+
repo_slug = repo[0]
12+
project_key = repo[1]
1013

1114
@print_timing("selenium_app_custom_action")
1215
def measure():
1316

14-
@print_timing("selenium_app_custom_action:view_report")
17+
@print_timing("selenium_app_custom_action:view_repo_page")
1518
def sub_measure():
16-
page.go_to_url(f"{BITBUCKET_SETTINGS.server_url}/plugin/report")
17-
page.wait_until_visible((By.ID, 'report_app_element_id'))
18-
sub_measure()
19-
20-
@print_timing("selenium_app_custom_action:view_dashboard")
21-
def sub_measure():
22-
page.go_to_url(f"{BITBUCKET_SETTINGS.server_url}/plugin/dashboard")
23-
page.wait_until_visible((By.ID, 'dashboard_app_element_id'))
19+
page.go_to_url(f"{BITBUCKET_SETTINGS.server_url}/projects/{project_key}/repos/{repo_slug}/browse")
20+
page.wait_until_visible((By.CSS_SELECTOR, '.aui-navgroup-vertical>.aui-navgroup-inner')) # Wait for repo navigation panel is visible
21+
page.wait_until_visible((By.ID, 'ID_OF_YOUR_APP_SPECIFIC_UI_ELEMENT')) # Wait for you app-specific UI element by ID selector
2422
sub_measure()
2523
measure()

app/extension/confluence/extension.jmx

Lines changed: 0 additions & 90 deletions
This file was deleted.

app/extension/confluence/extension_locust.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@
66

77
@confluence_measure
88
def app_specific_action(locust):
9+
r = locust.get('/app/get_endpoint', catch_response=True) # call app-specific GET endpoint
10+
content = r.content.decode('utf-8') # decode response content
911

10-
r = locust.client.get('/plugin/report') # navigate to page
11-
12-
content = r.content.decode('utf-8') # parse page content
1312
token_pattern_example = '"token":"(.+?)"'
1413
id_pattern_example = '"id":"(.+?)"'
15-
token = re.findall(token_pattern_example, content) # parse variables from response using regexp
16-
id = re.findall(id_pattern_example, content)
17-
logger.locust_info(f'token: {token}, id: {id}') # logger for debug when verbose is true in confluence.yml file
14+
token = re.findall(token_pattern_example, content) # get TOKEN from response using regexp
15+
id = re.findall(id_pattern_example, content) # get ID from response using regexp
16+
17+
logger.locust_info(f'token: {token}, id: {id}') # log information for debug when verbose is true in jira.yml file
1818
if 'assertion string' not in content:
1919
logger.error(f"'assertion string' was not found in {content}")
20-
assert 'assertion string' in content # assertion after GET request
20+
assert 'assertion string' in content # assert specific string in response content
2121

22-
body = {"id": id, "token": token} # include parsed variables to POST body
22+
body = {"id": id, "token": token} # include parsed variables to POST request body
2323
headers = {'content-type': 'application/json'}
24-
r = locust.client.post('/plugin/post/endpoint', body, headers) # send some POST request
24+
r = locust.post('/app/post_endpoint', body, headers, catch_response=True) # call app-specific POST endpoint
2525
content = r.content.decode('utf-8')
26-
if 'assertion string after successful post request' not in content:
27-
logger.error(f"'assertion string after successful post request' was not found in {content}")
28-
assert 'assertion string after successful post request' in content # assertion after POST request
26+
if 'assertion string after successful POST request' not in content:
27+
logger.error(f"'assertion string after successful POST request' was not found in {content}")
28+
assert 'assertion string after successful POST request' in content # assertion after POST request

app/extension/confluence/extension_ui.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,17 @@
77

88
def app_specific_action(webdriver, datasets):
99
page = BasePage(webdriver)
10+
if datasets['custom_pages']:
11+
app_specific_page = datasets['custom_pages']
12+
app_specific_page_id = app_specific_page[0]
1013

1114
@print_timing("selenium_app_custom_action")
1215
def measure():
1316

14-
@print_timing("selenium_app_custom_action:view_report")
17+
@print_timing("selenium_app_custom_action:view_page")
1518
def sub_measure():
16-
page.go_to_url(f"{CONFLUENCE_SETTINGS.server_url}/plugin/report")
17-
page.wait_until_visible((By.ID, 'report_app_element_id'))
18-
sub_measure()
19-
20-
@print_timing("selenium_app_custom_action:view_dashboard")
21-
def sub_measure():
22-
page.go_to_url(f"{CONFLUENCE_SETTINGS.server_url}/plugin/dashboard")
23-
page.wait_until_visible((By.ID, 'dashboard_app_element_id'))
19+
page.go_to_url(f"{CONFLUENCE_SETTINGS.server_url}/pages/viewpage.action?pageId={app_specific_page_id}")
20+
page.wait_until_visible((By.ID, "title-text")) # Wait for title field visible
21+
page.wait_until_visible((By.ID, "ID_OF_YOUR_APP_SPECIFIC_UI_ELEMENT")) # Wait for you app-specific UI element by ID selector
2422
sub_measure()
2523
measure()

0 commit comments

Comments
 (0)