В случае сбоя выполнения варианта использования мы надеемся просмотреть журнал и отследить каждый подробный процесс работы страницы.
Playwright Trace Viewer — это инструмент с графическим пользовательским интерфейсом, который позволяет вам просматривать записанные трассировки теста Playwright. Это означает, что вы можете перемещаться вперед и назад по каждой операции теста и визуально видеть, что происходило во время каждой операции. Трассировку можно регистрировать с помощью API-интерфейса Browser_context.tracing следующим образом:
browser = chromium.launch()
context = browser.new_context()
# Start tracing before creating / navigating a page.
context.tracing.start(screenshots=True, snapshots=True, sources=True)
page = context.new_page()
page.goto("https://playwright.dev")
# Stop tracing and export it into a zip archive.
context.tracing.stop(path = "trace.zip")
Существует два способа просмотра журналов трассировки.
Способ 1. Просмотр трассировки процесса операции через командную строку
>playwright show-trace trace.zip
Способ 2. Посетите https://trace.playwright.dev/ и выберите записанный файл трассировки.zip, чтобы открыть его.
Он может четко записывать каждый шаг кода.
Если вы хотите зарегистрировать несколько трассировок в одном и том же BrowserContext, используйте один раз метод трассировки.start(), а затем используйте трассировку.sart_chunk() и трассировку.stop_chuck() для создания нескольких фрагментов трассировки.
Пример использования
from playwright.sync_api import Playwright, sync_playwright, expect
# Шанхай Юю wx:283340479# blog:https://www.cnblogs.com/yoyoketang/
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Start tracing before creating / navigating a page.
# Начинается отслеживание конфигурации
context.tracing.start(screenshots=True, snapshots=True, sources=True)
# открыть страницу
page = context.new_page()
context.tracing.start_chunk()
page.goto('http://47.116.12.183/login.html')
context.tracing.stop_chunk(path='xx1.zip')
context.tracing.start_chunk()
page.get_by_label("использовать семья Имя:").fill("йойо")
page.get_by_label("плотный Код:").fill("123456")
page.locator("text=Войти сейчас").click()
context.tracing.stop_chunk(path='xx2.zip')
# context.tracing.stop(path="trace.zip") # Где прекратить отслеживание, добавьте tracing конечная конфигурация.
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
Это позволяет записывать журналы частями.
В плагине pytest-playwright изначально было предусмотрено ведение журнала. Я сам переписал некоторые функции и добавил их во вложение отчета allure.
Сначала запустите отслеживание журнала в контексте. Соответствующие изменения заключаются в следующем:
@pytest.fixture(scope="session")
def context(
browser: Browser,
browser_context_args: Dict,
pytestconfig: Any,
request: pytest.FixtureRequest,
) -> Generator[BrowserContext, None, None]:
# pages: List[Page] = []
context = browser.new_context(**browser_context_args)
# context.on("page", lambda page: pages.append(page))
# -------------- tracing См. этот раздел для связанных функций. start----------
tracing_option = pytestconfig.getoption("--tracing")
capture_trace = tracing_option in ["on", "retain-on-failure"]
if capture_trace:
context.tracing.start(
name=slugify(request.node.nodeid),
screenshots=True,
snapshots=True,
sources=True,
)
# -------------- tracing См. этот раздел для связанных функций. end----------
yield context
context.close()
Записывайте фрагменты на вкладках страниц. Каждая вкладка страницы представляет собой начало и конец выполнения варианта использования.
@pytest.fixture
def page(context: BrowserContext,
pytestconfig: Any,
request: pytest.FixtureRequest,
) -> Generator[Page, None, None]:
pages: List[Page] = []
context.on("page", lambda page: pages.append(page))
page = context.new_page()
# ---------- за вкладку присоединитьсябревно -------
tracing_option = pytestconfig.getoption("--tracing")
capture_trace = tracing_option in ["on",«сохранение при сбое»]
если capture_trace:
context.tracing.start_chunk()
страница доходности
# ---------- держатьбревно ---------
не удалось = request.node.rep_call.failed, если hasattr(request.node, "rep_call") else True
tracing_option = pytestconfig.getoption("--tracing")
capture_trace = tracing_option in ["on", "retain-on-failure"]
if capture_trace:
retain_trace = tracing_option == "on" or (
failed and tracing_option == "retain-on-failure"
)
if retain_trace:
# Извлекать только в случае неудачного варианта использования
trace_path = _build_artifact_test_folder(pytestconfig, request, "trace.zip")
context.tracing.stop_chunk(path=trace_path)
# Добавить вложение к отчету Allure
allure.attach.file(trace_path, name=f"{request.node.name}-trace", attachment_type='application/zip',
extension='.zip'
)
else:
context.tracing.stop_chunk()
Остальные логи не имеют никакого отношения к коду, поэтому выкладывать их не буду, посмотрю исходник сам.
--tracing=on
Настройте каждый вариант использования для сбора журналов
[pytest]
addopts = --headed
--tracing=on
--tracing=retain-on-failure
Сохраняйте журналы только в случае сбоя варианта использования.
[pytest]
addopts = --headed
--tracing=retain-on-failure
Выполнить вариант использования
pytest --alluredir ./report
Создать отчет об привлекательности
allure serve ./report
Просмотрите примеры использования отчетов об ошибках
Trace.zip также будет записан в каталоге результатов тестирования проекта.
Нажмите, чтобы загрузить на рабочий стол
Посетите https://trace.playwright.dev/.