Skip to content

Commit 005af3f

Browse files
committed
reusable session fixture across tests for speed and consistency
1 parent 0a3ad83 commit 005af3f

File tree

2 files changed

+35
-22
lines changed

2 files changed

+35
-22
lines changed

tests/conftest.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import contextlib
2-
import os
2+
from collections.abc import Generator
33
from typing import TYPE_CHECKING, cast
44

55
import pytest
@@ -11,8 +11,10 @@
1111
if TYPE_CHECKING:
1212
from requestium.requestium_mixin import DriverMixin
1313

14+
# ruff: noqa FBT003
1415

15-
@pytest.fixture
16+
17+
@pytest.fixture(scope="module")
1618
def example_html() -> str:
1719
return """
1820
<html>
@@ -34,29 +36,30 @@ def example_html() -> str:
3436
"chrome-headless",
3537
"chrome",
3638
"firefox-headless",
37-
pytest.param("firefox", marks=pytest.mark.skipif(os.getenv("CI") == "true", reason="Non-headless Firefox unreliable in CI")),
38-
]
39+
"firefox",
40+
],
41+
scope="module",
3942
)
40-
def session(request): # noqa: ANN001, ANN201
43+
def session(request) -> Generator[requestium.Session]: # noqa: ANN001
4144
driver_type = request.param
4245

43-
if driver_type == "chrome-headless":
44-
options = webdriver.ChromeOptions()
45-
options.add_argument("--headless=new")
46-
options.add_argument("--no-sandbox") # Helps when running on Github Actions
47-
options.add_argument("--disable-dev-shm-usage") # Helps when running on Github Actions
48-
driver = webdriver.Chrome(options=options)
49-
elif driver_type == "chrome":
50-
options = webdriver.ChromeOptions()
51-
options.add_argument("--no-sandbox") # Helps when running on Github Actions
52-
options.add_argument("--disable-dev-shm-usage") # Helps when running on Github Actions
53-
driver = webdriver.Chrome(options=options)
54-
elif driver_type == "firefox-headless":
55-
options = webdriver.FirefoxOptions()
56-
options.add_argument("--headless")
57-
driver = webdriver.Firefox(options=options)
58-
elif driver_type == "firefox":
59-
driver = webdriver.Firefox()
46+
driver: webdriver.Chrome | webdriver.Firefox
47+
if "chrome" in driver_type:
48+
chrome_options: webdriver.ChromeOptions = webdriver.ChromeOptions()
49+
chrome_options.add_argument("--no-sandbox") # Helps when running on Github Actions
50+
chrome_options.add_argument("--disable-dev-shm-usage") # Helps when running on Github Actions
51+
if driver_type == "chrome-headless":
52+
chrome_options.add_argument("--headless=new")
53+
driver = webdriver.Chrome(options=chrome_options)
54+
elif "firefox" in driver_type:
55+
firefox_options: webdriver.FirefoxOptions = webdriver.FirefoxOptions()
56+
firefox_options.set_preference("browser.cache.disk.enable", False)
57+
firefox_options.set_preference("browser.cache.memory.enable", False)
58+
firefox_options.set_preference("browser.cache.offline.enable", False)
59+
firefox_options.set_preference("network.http.use-cache", False)
60+
if driver_type == "firefox-headless":
61+
firefox_options.add_argument("--headless")
62+
driver = webdriver.Firefox(options=firefox_options)
6063
else:
6164
msg = f"Unknown driver type: {driver_type}"
6265
raise ValueError(msg)

tests/test_cookies.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,29 @@
1010
{"name": "user_token", "value": "xyz789", "domain": "example.com", "path": "/"},
1111
],
1212
ids=["session_id", "user_token"],
13+
scope="module",
1314
)
1415
def cookie_data(request) -> dict[str, str]: # noqa: ANN001
1516
return request.param
1617

1718

1819
def test_transfer_driver_cookies_to_session(session: requestium.Session, cookie_data: dict[str, str]) -> None:
1920
session.driver.get(f"https://{cookie_data['domain']}")
21+
session.driver.delete_all_cookies()
2022
session.driver.add_cookie(cookie_data)
2123

24+
session.cookies.clear()
2225
assert session.cookies.keys() == []
2326
session.transfer_driver_cookies_to_session()
2427
assert session.cookies.keys() == [cookie_data["name"]]
2528

2629

2730
def test_transfer_session_cookies_to_driver(session: requestium.Session, cookie_data: dict[str, str]) -> None:
2831
session.get(f"http://{cookie_data['domain']}")
32+
session.cookies.clear()
2933
session.cookies.set(name=cookie_data["name"], value=cookie_data["value"], domain=cookie_data["domain"], path=cookie_data["path"])
3034

35+
session.driver.delete_all_cookies()
3136
assert session.driver.get_cookies() == []
3237
session.transfer_session_cookies_to_driver()
3338
driver_cookies = session.driver.get_cookies()
@@ -40,9 +45,11 @@ def test_transfer_session_cookies_to_driver(session: requestium.Session, cookie_
4045

4146
def test_transfer_session_cookies_to_driver_domain_filter(session: requestium.Session, cookie_data: dict[str, str]) -> None:
4247
session.get(f"http://{cookie_data['domain']}")
48+
session.cookies.clear()
4349
session.cookies.set(name="junk_cookie", value="sfkjn782", domain="google.com", path=cookie_data["path"])
4450
session.cookies.set(name=cookie_data["name"], value=cookie_data["value"], domain=cookie_data["domain"], path=cookie_data["path"])
4551

52+
session.driver.delete_all_cookies()
4653
assert session.driver.get_cookies() == []
4754
session.transfer_session_cookies_to_driver(domain=cookie_data["domain"])
4855
driver_cookies = session.driver.get_cookies()
@@ -54,6 +61,9 @@ def test_transfer_session_cookies_to_driver_domain_filter(session: requestium.Se
5461

5562

5663
def test_transfer_session_cookies_to_driver_no_domain_error(session: requestium.Session) -> None:
64+
session.cookies.clear()
65+
session.driver.delete_all_cookies()
66+
session._last_requests_url = None
5767
with (
5868
pytest.raises(
5969
InvalidCookieDomainException,

0 commit comments

Comments
 (0)