Pytest + асинхронный драматург: выполнение тестов зависает навсегда после прохождения первого тестаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pytest + асинхронный драматург: выполнение тестов зависает навсегда после прохождения первого теста

Сообщение Anonymous »

Я использую async_playwright в Python. Когда я хочу добавить модульные тесты, мне нужно создать общий браузер и страницу для каждого тестового примера. Я использую pytest_asyncio для создания приспособлений для этого.
Это мой файл conftest.py:

Код: Выделить всё

import pytest_asyncio
import asyncio
from playwright.async_api import async_playwright

from src.page_object.factory.playwright import PWPageOjectFactory

@pytest_asyncio.fixture(scope="session")
def event_loop(request):
"""Create an instance of the default event loop for each test case."""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()

@pytest_asyncio.fixture(scope="module")
async def browser():
async with async_playwright() as p:
browser = await p.chromium.launch()
yield browser
await browser.close()

@pytest_asyncio.fixture(scope="module")
async def page(browser):
factory = PWPageOjectFactory("https://www.google.com", browser)
print(factory.url)
page = await factory.create_page_object()
print(page)
return page
А это мой тестовый файл:

Код: Выделить всё

import pytest

from src.page_object.element.playwright import PWElement
from src.page_object.page.playwright import PWPageObject

pytest_plugins = ("pytest_asyncio",)

@pytest.mark.asyncio
async def test_po_factory(page):
assert page is not None
assert isinstance(page, PWPageObject)

@pytest.mark.asyncio
async def test_get_active_element(page):
element = await page.get_active_element()
assert element is not None
assert isinstance(element, PWElement)

@pytest.mark.asyncio
async def test_navigate(page):
element = await page.get_active_element()
await page.navigate_forward()
new_element = await page.get_active_element()
assert element.get_attribute("id") != new_element.get_attribute("id")
await page.navigate_backward()
new_element = await page.get_active_element()
assert element.get_attribute("id") == new_element.get_attribute("id")
Когда я выполняю тесты pytest (гдеtests — это папка, содержащая предыдущие файлы), первый тестовый пример проходит успешно, а затем выполнение зависает навсегда.
Чего мне здесь не хватает?
Что я пробовал:
  • Раньше у меня были фикстуры в области модуля в тестовом файле, и поведение было таким же. Я понимаю, что это ничего не меняет.
  • Я удалил фикстуру event_loop из файла conftest.py и получил тот же результат.
  • Я искал способы запуска всех своих тестов без использования плагина Playwright для pytest, так как считаю, что должен быть способ запускать тесты без него.
  • Я нашел здесь аналогичный вопрос, но на него нет ответа, поэтому я спрашиваю о моем конкретном случае, который также касается драматурга.
Обновление (2024- 04-25)
Это результат pytest -vvv -s:

Код: Выделить всё

(example) C:\Users\MyUser\Desktop\projects\example>pytest -vvv -s
================================================= test session starts =================================================
platform win32 -- Python 3.12.2, pytest-8.1.1, pluggy-1.4.0 -- C:\Users\MyUser\miniconda3\envs\example\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\MyUser\Desktop\projects\example
plugins: asyncio-0.23.6
asyncio: mode=Mode.STRICT
collected 5 items

tests/test_pageobject.py::test_po_factory https://www.google.com

PASSED
tests/test_pageobject.py::test_get_active_element
Процесс застревает навсегда :(
Возможно, есть и другие детали, которые я не упомянул:
  • Я занимаюсь разработкой в ​​среде conda
  • Я использую компьютер под управлением Windows


Подробнее здесь: https://stackoverflow.com/questions/783 ... est-passes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»