Skip to content

Commit

Permalink
feat: added reporting to e2e tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nekhvoya authored and supakeen committed Dec 15, 2023
1 parent 7868b4b commit d8dc609
Show file tree
Hide file tree
Showing 7 changed files with 984 additions and 639 deletions.
9 changes: 8 additions & 1 deletion .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,11 @@ jobs:
run: sudo apt-get install xclip

- name: Run e2e tests
run: xvfb-run pytest --e2e test/e2e
run: xvfb-run pytest --e2e test/e2e --html=test/e2e/report/index.html --self-contained-html

- name: Publish test results
uses: actions/upload-artifact@v3
if: always()
with:
name: test-report
path: test/e2e/report/
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,6 @@ dmypy.json
.pdm-python

.idea


test/e2e/report/
812 changes: 494 additions & 318 deletions pdm.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ dev = [
"pyperclip>=1.8.2",
"gitpython>=3.1.34",
"urllib3>=2.0.7",
"pytest-html>=4.1.1"
]
[build-system]
requires = ["pdm-pep517>=1.0"]
Expand Down
733 changes: 427 additions & 306 deletions requirements.txt

Large diffs are not rendered by default.

31 changes: 31 additions & 0 deletions test/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import re
from pathlib import Path

import pytest
from slugify import slugify


def pytest_addoption(parser):
Expand All @@ -20,3 +24,30 @@ def pytest_runtest_setup(item):

def pytest_configure(config):
config.addinivalue_line("markers", "e2e: mark browser tests")


screenshot_dir = Path("test/e2e/report/screenshots")
screenshot_dir.mkdir(exist_ok=True, parents=True)


@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
pytest_html = item.config.pluginmanager.getplugin("html")
outcome = yield
screen_file = str(screenshot_dir / f"{slugify(item.nodeid)}.png")
report = outcome.get_result()
extra = getattr(report, "extra", [])
if report.when == "call":
if report.failed:
if "page" in item.funcargs:
page = item.funcargs["page"]
make_screenshot(item, page)
xfail = hasattr(report, "wasxfail")
if (report.skipped and xfail) or (report.failed and not xfail):
extra.append(pytest_html.extras.png(re.sub("test\W*e2e\W*report\W*", "", screen_file)))
report.extra = extra


def make_screenshot(item, page):
screen_file = str(screenshot_dir / f"{slugify(item.nodeid)}.png")
page.screenshot(path=screen_file, full_page=True)
34 changes: 20 additions & 14 deletions test/e2e/testscenarios/test_copy_paste.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
import pytest
from playwright.sync_api import Page, Playwright
from playwright.sync_api import Playwright

from test.conftest import make_screenshot
from test.e2e.pageobjects.create_paste_page import CreatePastePage
from test.e2e.pageobjects.view_paste_page import ViewPastePage
from test.e2e.utils.clipboard_utils import verify_clipboard_contents
from test.e2e.playwright.browser_manager import BrowserManager


@pytest.mark.e2e
def test_copy_paste(playwright: Playwright):
def test_copy_paste(playwright: Playwright, request):
# This test needs to be run in a headed mode for the clipboard to work correctly
page = BrowserManager(playwright).create_new_context(headless=False)
create_paste_page = CreatePastePage(page)
create_paste_page.open()
first_pasted_text = create_paste_page.paste_random_text(paste_number=0)
create_paste_page.click_add_another_file_button()
second_pasted_text = create_paste_page.paste_random_text(paste_number=1)
create_paste_page.click_submit()
try:
create_paste_page = CreatePastePage(page)
create_paste_page.open()
first_pasted_text = create_paste_page.paste_random_text(paste_number=0)
create_paste_page.click_add_another_file_button()
second_pasted_text = create_paste_page.paste_random_text(paste_number=1)
create_paste_page.click_submit()

view_paste_page = ViewPastePage(page)
view_paste_page.should_be_opened()
view_paste_page = ViewPastePage(page)
view_paste_page.should_be_opened()

view_paste_page.click_copy_button(related_paste_number=0)
verify_clipboard_contents(first_pasted_text)
view_paste_page.click_copy_button(related_paste_number=0)
verify_clipboard_contents(first_pasted_text)

view_paste_page.click_copy_button(related_paste_number=1)
verify_clipboard_contents(second_pasted_text)
view_paste_page.click_copy_button(related_paste_number=1)
verify_clipboard_contents(second_pasted_text)
except Exception:
make_screenshot(request.node, page)
raise

0 comments on commit d8dc609

Please sign in to comment.