googleapis / googleapis/google-cloud-python
Properly configure async tests
- Vorherrschende Sprache
- Python
- Sterne
- 5.4k
- Forks
- 1.8k
- Ø Merge
- 3 T. 4 Std.
- Gemergte PRs (30 T.)
- 122
Beschreibung
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`.
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.