Я пытался изучить 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