From 5380c68c70755c96a3fc5a79594242305e1dcdfc Mon Sep 17 00:00:00 2001 From: UjjawalShakya Date: Thu, 27 Feb 2025 20:23:53 +0530 Subject: [PATCH 1/3] Added custom fixture to fix session merge issue --- conftest.py | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/sample-test.py | 3 ++- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..d966e4e --- /dev/null +++ b/conftest.py @@ -0,0 +1,42 @@ +import threading +import urllib +import uuid +#import threading +from multiprocessing import Process, Lock +import pytest +from browserstack.local import Local +import os, json +from jsonmerge import merge +from dotenv import load_dotenv +import time + +from playwright.sync_api import Playwright +from playwright.sync_api import Page + +lock = Lock() +threaded_count = 0 + +load_dotenv() + +TASK_ID = int(os.environ['TASK_ID']) if 'TASK_ID' in os.environ else 0 + + +BROWSERSTACK_USERNAME = os.environ['BROWSERSTACK_USERNAME'] +BROWSERSTACK_ACCESS_KEY = os.environ['BROWSERSTACK_ACCESS_KEY'] + +if os.environ.get('REMOTE', 'true') == "true": + @pytest.fixture(scope='function') + def session_capabilities(playwright: Playwright): + global timenow + global lock + test_name = os.environ.get('PYTEST_CURRENT_TEST').split(' ')[0].split('::')[1] + capabilities = {} + stringifiedCaps = urllib.parse.quote(json.dumps(capabilities)) + caps = 'wss://cdp.browserstack.com/playwright?caps=' + stringifiedCaps + browser = playwright.chromium.launch() + context = browser.new_context() + page = context.new_page() + + yield page + context.close() + browser.close() diff --git a/tests/sample-test.py b/tests/sample-test.py index 59410ea..bd94c2f 100644 --- a/tests/sample-test.py +++ b/tests/sample-test.py @@ -2,7 +2,8 @@ from playwright.sync_api import expect -def test_bstack_sample(page) -> None: +def test_bstack_sample(session_capabilities) -> None: + page = session_capabilities try: # Navigate to the base url page.goto("https://bstackdemo.com/", timeout=0) From a50bb451a36b8221da0e4dfbdb153323ffdd9b22 Mon Sep 17 00:00:00 2001 From: UjjawalShakya Date: Fri, 28 Feb 2025 16:56:59 +0530 Subject: [PATCH 2/3] Fixed session name issue --- conftest.py | 18 ++++++++++++++++++ tests/sample-test.py | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/conftest.py b/conftest.py index d966e4e..f736f5c 100644 --- a/conftest.py +++ b/conftest.py @@ -24,6 +24,22 @@ BROWSERSTACK_USERNAME = os.environ['BROWSERSTACK_USERNAME'] BROWSERSTACK_ACCESS_KEY = os.environ['BROWSERSTACK_ACCESS_KEY'] + +def update_session_name(page, session_name=''): + if not (page and session_name): + return + + command = { + "action": "setSessionName", + "arguments": { + "name": session_name + } + } + + browser_stack_command = f"browserstack_executor: {json.dumps(command)}" + result = page.evaluate("() => {}", browser_stack_command) + return json.loads(result) + if os.environ.get('REMOTE', 'true') == "true": @pytest.fixture(scope='function') def session_capabilities(playwright: Playwright): @@ -36,6 +52,8 @@ def session_capabilities(playwright: Playwright): browser = playwright.chromium.launch() context = browser.new_context() page = context.new_page() + print(f'Test name is {test_name}') + update_session_name(page,test_name) yield page context.close() diff --git a/tests/sample-test.py b/tests/sample-test.py index bd94c2f..6631fc5 100644 --- a/tests/sample-test.py +++ b/tests/sample-test.py @@ -2,7 +2,7 @@ from playwright.sync_api import expect -def test_bstack_sample(session_capabilities) -> None: +def test_sample(session_capabilities) -> None: page = session_capabilities try: # Navigate to the base url From 3ba6462c74afe634a5cff40d22920e84225a3f58 Mon Sep 17 00:00:00 2001 From: UjjawalShakya Date: Tue, 4 Mar 2025 12:50:34 +0530 Subject: [PATCH 3/3] Implemented changes for local test --- conftest.py | 33 ++++++++++++++++----------------- tests/sample-local-test.py | 3 ++- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/conftest.py b/conftest.py index f736f5c..56b5592 100644 --- a/conftest.py +++ b/conftest.py @@ -40,21 +40,20 @@ def update_session_name(page, session_name=''): result = page.evaluate("() => {}", browser_stack_command) return json.loads(result) -if os.environ.get('REMOTE', 'true') == "true": - @pytest.fixture(scope='function') - def session_capabilities(playwright: Playwright): - global timenow - global lock - test_name = os.environ.get('PYTEST_CURRENT_TEST').split(' ')[0].split('::')[1] - capabilities = {} - stringifiedCaps = urllib.parse.quote(json.dumps(capabilities)) - caps = 'wss://cdp.browserstack.com/playwright?caps=' + stringifiedCaps - browser = playwright.chromium.launch() - context = browser.new_context() - page = context.new_page() - print(f'Test name is {test_name}') - update_session_name(page,test_name) +@pytest.fixture(scope='function') +def session_capabilities(playwright: Playwright): + global timenow + global lock + test_name = os.environ.get('PYTEST_CURRENT_TEST').split(' ')[0].split('::')[1] + capabilities = {} + stringifiedCaps = urllib.parse.quote(json.dumps(capabilities)) + caps = 'wss://cdp.browserstack.com/playwright?caps=' + stringifiedCaps + browser = playwright.chromium.launch() + context = browser.new_context() + page = context.new_page() + update_session_name(page,test_name) - yield page - context.close() - browser.close() + yield page + context.close() + browser.close() + diff --git a/tests/sample-local-test.py b/tests/sample-local-test.py index 7ab2514..88b3bc8 100644 --- a/tests/sample-local-test.py +++ b/tests/sample-local-test.py @@ -3,7 +3,8 @@ import pytest from playwright.sync_api import expect -def test_bstack_local_sample(page) -> None: +def test_bstack_local_sample(session_capabilities) -> None: + page = session_capabilities try: #Navigate to the base url page.goto("http://bs-local.com:45454", timeout=0)