googleapis / googleapis/google-cloud-python

Properly configure async tests

Abierto
#17,311 0 comentarios 0 reacciones 0 asignados Ver en GitHub
priority: p2 type: process
Lenguaje dominante
Python
Estrellas
5.4k
Forks
1.8k
Merge medio
3 d 4 h
PR fusionados (30 d)
122

Descripción

A recent release of `pytest-asyncio` ([v1.4.0](https://pypi.org/project/pytest-asyncio/1.4.0/)) caused several tests to fail with `RuntimeError: There is no current event loop in thread 'MainThread'` (see [comment here](https://github.com/googleapis/google-cloud-python/pull/17275#issuecomment-4558294736)).

As a quick workaround, [PR #17260](https://github.com/googleapis/google-cloud-python/pull/17260) introduced a temporary autouse fixture to manually manage the event loop:

```
@pytest.fixture(autouse=True)
def set_event_loop():
try:
asyncio.get_running_loop()
yield
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
yield
finally:
loop.close()
asyncio.set_event_loop(None)
```

**The Correct Long-Term Fix**

This workaround is a stopgap. The root cause is that tests containing asynchronous code are missing the proper `async def` declaration and the `@pytest.mark.asyncio` marker.

The correct long-term solution is to properly decorate and define these tests. For example, [PR #17308](https://github.com/googleapis/google-cloud-python/pull/17308) resolved this error ([CI run logs](https://github.com/googleapis/google-cloud-python/actions/runs/26642937390/job/78520665070)) by properly updating the test definitions (see [commit diff](https://github.com/googleapis/google-cloud-python/pull/17308/changes/4a9db423f8426ce19aeec016be80e0fd99791cd4)).

**Next Steps**

Please keep this issue open until the temporary `set_event_loop` fixture is entirely removed from the codebase and all affected tests are properly refactored with `async def` and `@pytest.mark.asyncio`.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.