googleapis / googleapis/google-cloud-python

Properly configure async tests

オープン
#17,311 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
priority: p2 type: process
主要言語
Python
スター
5.4k
フォーク
1.8k
平均マージ
3日 4時間
マージ済み PR(30日)
122

説明

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

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。