Как написать приспособление pytest для потокового сервера asyncio? - PullRequest
1 голос
/ 26 мая 2020

Я пытался изучить asyncio, и я не могу найти никаких примеров создания приспособления pytest, которое я могу использовать для тестирования моего серверного кода. Как только сервер запускается, я думаю, он блокирует все остальное, поэтому тесты никогда не запускаются. Есть ли у pytest-asyncio способ запустить прибор в отдельном потоке или что-то в этом роде? Или мне нужно самому написать код потока? Или есть способ лучше? Ниже приведен код, с которым я возился. Это прямая копия и вставка с официального TCP эхо-сервера с использованием документации по потокам с установкой pytest и тестом в конце:

import asyncio
import pytest


async def handle_echo(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')

    print(f"Received {message!r} from {addr!r}")

    print(f"Send: {message!r}")
    writer.write(data)
    await writer.drain()

    print("Close the connection")
    writer.close()


async def main():
    server = await asyncio.start_server(
        handle_echo, '127.0.0.1', 8888)

    addr = server.sockets[0].getsockname()
    print(f'Serving on {addr}')

    async with server:
        await server.serve_forever()


@pytest.fixture(scope="session")
async def server():
    return await main()


@pytest.mark.asyncio
def test_something(server):
    assert False
...