Асинхронно запускайте модульные тесты python с веб-сервером aiohttp

#python #unit-testing #python-asyncio #aiohttp

Вопрос:

Я хочу запустить несколько модульных тестов в своем проекте, которые включали подключение к локальному веб-серверу. Я подумал, что мне это пригодится aiohttp . Я хочу запускать модульные тесты с помощью встроенного unittest модуля.

Я настроил маршруты aiohttp и определил пару тестов. Например, один из тестов подключается к http://localhost:8080/helloworld

Мой код выглядит так:

 async def run_tests():  if __name__ == '__main__':  await unittest.main()  async def main():  app = web.Application()  app.add_routes(routes)  runner = web.AppRunner(app)  await runner.setup()  await web.TCPSite(runner, port=50000).start()   await run_tests()  asyncio.run(main())  

Но когда я запускаю сценарий, модульные тесты не запускаются, а веб-сервер не отвечает (хотя и запускается).

Замена run_tests() на другую функцию работает. например, следующий код считает до 60, а затем останавливается:

 async def do_nothing():  for i in range(60):  print(i)  await asyncio.sleep(1)  async def main():  app = web.Application()  app.add_routes(routes)  runner = web.AppRunner(app)  await runner.setup()  await web.TCPSite(runner, port=50000).start()  await do_nothing()  asyncio.run(main())