googleapis / googleapis/google-cloud-python

Properly configure async tests

Open
#17,311 0 comments 0 reactions 0 assignees View on GitHub
priority: p2 type: process
Dominant language
Python
Stars
5.4k
Forks
1.8k
Avg merge
3d 4h
Merged PRs (30d)
122

Description

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`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.