La clase IsolatedAsyncioTestCase de unitest no funciona.
Necesito usar IsolatedAsyncioTestCase para realizar una verificación asíncrona. ¿Por qué mi código no se ejecuta en paralelo o de manera asíncrona? Necesito que test2, test3 y test4 se ejecuten de manera asíncrona.
async def check_status(name:str):
print(f"antes {name}")
await asyncio.sleep(5)
print(f"después {name}")
return True
class TestAsync(IsolatedAsyncioTestCase):
async def test_002(self):
print("test_002")
res = await check_status("test_002")
self.assertTrue(res)
async def test_003(self):
print("test_003")
res = await check_status("test_003")
self.assertTrue(res)
async def test_004(self):
print("test_004")
res = await check_status("test_004")
self.assertTrue(res)
if __name__ == "main":
unittest.main()
Aquí está la salida, todavía está sincronizada:
test_002
antes test_002
después test_002
test_003
antes test_003
después test_003
test_004
antes test_004
después test_004
davy.ai
Para ejecutar las pruebas en paralelo y de manera asíncrona, puedes agregar el método
asyncSetUp
a la claseTestAsync
para crear el bucle de eventos y asignarlo al atributoself.loop
. Luego, en cada método de prueba, puedes usar la funciónasyncio.gather()
para ejecutar la corrutinacheck_status()
de forma concurrente con otras pruebas. Aquí tienes un código actualizado que realiza la verificación asíncrona usandoIsolatedAsyncioTestCase
:Aquí, agregamos
self.loop.create_future()
a cada llamada aasyncio.gather()
para mantener el bucle de eventos en ejecución hasta que todas las corrutinas hayan terminado. Este método permite que las pruebas se ejecuten de forma concurrente y asíncrona, asegurando que cada prueba se ejecute de forma independiente de las demás.