Skip to content

Commit a09f051

Browse files
committed
DAPT-26 : ignore browser metric resolution time
1 parent 5641e03 commit a09f051

File tree

3 files changed

+83
-38
lines changed

3 files changed

+83
-38
lines changed

app/selenium_ui/base_page.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -188,14 +188,6 @@ def delete_all_cookies(self):
188188
def scroll_down_till_bottom(self):
189189
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
190190

191-
def click_page_body(self):
192-
try:
193-
body_element = self.driver.find_element(By.TAG_NAME, "body")
194-
body_element.click()
195-
print("Successfully clicked on page body")
196-
except Exception as e:
197-
print(f"Failed to click on page body: {e}")
198-
199191

200192
class AnyEc:
201193
""" Use with WebDriverWait to combine expected_conditions

app/selenium_ui/confluence/modules.py

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import random
2-
from selenium_ui.conftest import print_timing, measure_browser_navi_metrics, measure_dom_requests
2+
from selenium_ui.conftest import print_timing, measure_timing, measure_browser_navi_metrics, measure_dom_requests, measure_with_browser_metrics
33

44
from selenium_ui.confluence.pages.pages import Login, AllUpdates, PopupManager, Page, Dashboard, TopNavPanel, Editor, \
55
Logout
@@ -84,7 +84,6 @@ def sub_measure():
8484
if login_page.is_first_login():
8585
login_page.first_user_setup()
8686
all_updates_page.wait_for_page_loaded()
87-
all_updates_page.click_page_body()
8887
measure_dom_requests(webdriver, interaction="selenium_login:login_and_view_dashboard")
8988
if CONFLUENCE_SETTINGS.extended_metrics:
9089
measure_browser_navi_metrics(webdriver, datasets, expected_metrics=browser_metrics['selenium_login'])
@@ -108,16 +107,17 @@ def view_page(webdriver, datasets):
108107
datasets['current_session']['view_page_cache'] = random_page
109108
page = Page(webdriver, page_id=page_id)
110109

111-
@print_timing("selenium_view_page")
112110
def measure():
113111
page.go_to()
114112
page.wait_for_page_loaded()
115-
page.click_page_body()
116113
measure_dom_requests(webdriver, interaction=f"selenium_view_page", description=page_description)
117-
if CONFLUENCE_SETTINGS.extended_metrics:
118-
measure_browser_navi_metrics(webdriver, datasets, expected_metrics=browser_metrics['selenium_view_page'])
119114

120-
measure()
115+
measure_with_browser_metrics(
116+
"selenium_view_page",
117+
webdriver,
118+
datasets,
119+
measure
120+
)
121121

122122

123123
def view_page_from_cache(webdriver, datasets):
@@ -128,18 +128,17 @@ def view_page_from_cache(webdriver, datasets):
128128

129129
page = Page(webdriver, page_id=page_id)
130130

131-
@print_timing("selenium_view_page_from_cache")
132131
def measure():
133132
page.go_to()
134133
page.wait_for_page_loaded()
135-
page.click_page_body()
136134
measure_dom_requests(webdriver, interaction=f"selenium_view_page_from_cache", description=page_description)
137-
if CONFLUENCE_SETTINGS.extended_metrics:
138-
measure_browser_navi_metrics(webdriver, datasets,
139-
expected_metrics=browser_metrics['selenium_view_page_from_cache'])
140-
141-
measure()
142135

136+
measure_with_browser_metrics(
137+
"selenium_view_page_from_cache",
138+
webdriver,
139+
datasets,
140+
measure
141+
)
143142

144143
def view_blog(webdriver, datasets):
145144
random_blog = random.choice(datasets[BLOGS])
@@ -148,33 +147,33 @@ def view_blog(webdriver, datasets):
148147
blog = Page(webdriver, page_id=blog_id)
149148
datasets['current_session']['view_blog'] = random_blog
150149

151-
@print_timing("selenium_view_blog")
152150
def measure():
153151
blog.go_to()
154152
blog.wait_for_page_loaded()
155-
blog.click_page_body()
156153
measure_dom_requests(webdriver, interaction=f"selenium_view_blog", description=blog_description)
157-
if CONFLUENCE_SETTINGS.extended_metrics:
158-
measure_browser_navi_metrics(webdriver, datasets, expected_metrics=browser_metrics['selenium_view_blog'])
159154

160-
measure()
155+
measure_with_browser_metrics(
156+
"selenium_view_blog",
157+
webdriver,
158+
datasets,
159+
measure
160+
)
161161

162162

163163
def view_dashboard(webdriver, datasets):
164164
dashboard_page = Dashboard(webdriver)
165165

166-
@print_timing("selenium_view_dashboard")
167166
def measure():
168167
dashboard_page.go_to()
169168
dashboard_page.wait_for_page_loaded()
170-
dashboard_page.click_page_body()
171169
measure_dom_requests(webdriver, interaction="selenium_view_dashboard")
172-
if CONFLUENCE_SETTINGS.extended_metrics:
173-
measure_browser_navi_metrics(webdriver, datasets,
174-
expected_metrics=browser_metrics['selenium_view_dashboard'])
175-
176-
measure()
177170

171+
measure_with_browser_metrics(
172+
"selenium_view_dashboard",
173+
webdriver,
174+
datasets,
175+
measure
176+
)
178177

179178
def create_confluence_page(webdriver, datasets):
180179
nav_panel = TopNavPanel(webdriver)
@@ -187,7 +186,6 @@ def sub_measure():
187186
nav_panel.click_create()
188187
PopupManager(webdriver).dismiss_default_popup()
189188
create_page.wait_for_create_page_open()
190-
create_page.click_page_body()
191189
measure_dom_requests(webdriver, interaction="selenium_create_page:open_create_page_editor")
192190
if CONFLUENCE_SETTINGS.extended_metrics:
193191
measure_browser_navi_metrics(webdriver, datasets,
@@ -223,7 +221,6 @@ def measure():
223221
def sub_measure():
224222
edit_page.go_to()
225223
edit_page.wait_for_page_loaded()
226-
edit_page.click_page_body()
227224
measure_dom_requests(webdriver, interaction=f"selenium_edit_page_by_url:open_create_page_editor",
228225
description=page_description)
229226
if CONFLUENCE_SETTINGS.extended_metrics:
@@ -260,7 +257,6 @@ def sub_measure():
260257
PopupManager(webdriver).dismiss_default_popup()
261258
page.click_edit()
262259
edit_page.wait_for_page_loaded()
263-
edit_page.click_page_body()
264260
measure_dom_requests(webdriver, interaction=f"selenium_quick_edit_page_click:open_create_page_editor",
265261
description=page_description)
266262
if CONFLUENCE_SETTINGS.extended_metrics:

app/selenium_ui/conftest.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
from util.common_util import webdriver_pretty_debug
2020
from util.conf import CONFLUENCE_SETTINGS, JIRA_SETTINGS, BITBUCKET_SETTINGS, JSM_SETTINGS, BAMBOO_SETTINGS
21+
from util.confluence.browser_metrics import browser_metrics
2122
from util.exceptions import WebDriverExceptionPostpone
2223
from util.project_paths import JIRA_DATASET_ISSUES, JIRA_DATASET_JQLS, JIRA_DATASET_KANBAN_BOARDS, \
2324
JIRA_DATASET_PROJECTS, JIRA_DATASET_SCRUM_BOARDS, JIRA_DATASET_USERS, JIRA_DATASET_CUSTOM_ISSUES, BITBUCKET_USERS, \
@@ -139,6 +140,46 @@ def is_docker():
139140
)
140141

141142

143+
def measure_timing(func):
144+
@functools.wraps(func)
145+
def wrapper(*args, **kwargs):
146+
start = time()
147+
func(*args, **kwargs)
148+
end = time()
149+
return end - start
150+
return wrapper
151+
152+
153+
def measure_with_browser_metrics(interaction_name, webdriver, datasets, measure_func):
154+
"""
155+
Helper function that combines measure_timing + ready_for_user_timing.
156+
"""
157+
# Step 1: Measure core operations
158+
@measure_timing
159+
def measure1():
160+
measure_func()
161+
162+
timing = measure1()
163+
164+
# Step 2: Measure browser metrics AFTER core operations (not included in core timing)
165+
ready_for_user_timing = None
166+
if CONFLUENCE_SETTINGS.extended_metrics:
167+
ready_for_user_timing = measure_browser_navi_metrics(
168+
webdriver, datasets, expected_metrics=browser_metrics[interaction_name]
169+
)
170+
171+
# Step 3: Calculate combined timing
172+
if ready_for_user_timing is not None:
173+
timing = timing + (int(ready_for_user_timing) / 1000)
174+
175+
# Step 4: Record combined timing using print_timing with explicit_timing
176+
@print_timing(interaction_name, explicit_timing=timing)
177+
def record_result():
178+
pass
179+
180+
record_result()
181+
182+
142183
def print_timing(interaction=None, explicit_timing=None):
143184
assert interaction is not None, "Interaction name is not passed to print_timing decorator"
144185

@@ -295,11 +336,22 @@ def get_requests_by_url(requests, url_path):
295336
return filtered_requests
296337

297338

339+
def click_page_body(webdriver):
340+
try:
341+
body_element = webdriver.find_element("tag name", "body")
342+
body_element.click()
343+
print("Successfully clicked on page body")
344+
except Exception as e:
345+
print(f"Failed to click on page body: {e}")
346+
347+
298348
def get_wait_browser_metrics(webdriver, expected_metrics):
299349
attempts = 15
300350
sleep_time = 0.5
301351
data = {}
302352

353+
click_page_body(webdriver) #this resolves browser metric
354+
303355
for i in range(attempts):
304356
requests = get_performance_logs(webdriver)
305357
requests_bulk = get_requests_by_url(requests, 'bulk')
@@ -398,8 +450,11 @@ def measure_browser_navi_metrics(webdriver, dataset, expected_metrics):
398450
lockfile = f'{selenium_results_file}.lock'
399451
error_msg = 'Success'
400452
success = True
453+
ready_for_user_timing = None
454+
401455
if not metrics:
402-
return
456+
return ready_for_user_timing
457+
403458
with filelock.SoftFileLock(lockfile):
404459
with open(selenium_results_file, "a+") as jtl_file:
405460
for metric in metrics:
@@ -411,6 +466,8 @@ def measure_browser_navi_metrics(webdriver, dataset, expected_metrics):
411466
f"{timestamp},{ready_for_user_timing},{interaction},,{error_msg},,{success},0,0,0,0,{node_ip},0\n")
412467
print(
413468
f"{timestamp},{ready_for_user_timing},{interaction},{error_msg},{success},{node_ip}")
469+
470+
return ready_for_user_timing
414471

415472

416473
@pytest.fixture(scope="module")

0 commit comments

Comments
 (0)