Verwenden von pytest-getesteten Funktionen mit PyTest-Asyncio-LeuchtenPython

Python-Programme
Guest
 Verwenden von pytest-getesteten Funktionen mit PyTest-Asyncio-Leuchten

Post by Guest »

Ich habe Code, der Twisted verwendet, also habe ich eine Testfunktion dafür geschrieben und ihn mit @pyTest_twisted.EnsuredEferred dekoriert. Die Funktion wartet auf einige Aufschiebungen. Dann muss ich eine AioHttp -Stoilding ausführen, daher habe ich eine Leuchte geschrieben, die die PyTest_aiohttp.plugin.Aiohttp_client Fixture verwendet, es mit @pytest_asyncio.fixture dekoriert und verwendet und es verwendet hat und es verwendet. in meiner Testfunktion. Das Ergebnis funktioniert nicht (wahrscheinlich weil ich verdrehte und aiohttp die gleiche Ereignisschleife oder ähnliches verwenden muss?). Insbesondere druckt es "Twisted/Internet/asyncioreactor.py: 50: Abschaltwarnung: Es gibt keine aktuelle Ereignisschleife" und stürzt dann mit der folgenden Ausnahme ab:

Code: Select all

.env/lib/python3.13/site-packages/pytest_twisted/__init__.py:343: in _run_inline_callbacks
_instances.reactor.callLater(0.0, in_reactor, d, f, *args)
.env/lib/python3.13/site-packages/twisted/internet/asyncioreactor.py:289: in callLater
self._reschedule()
.env/lib/python3.13/site-packages/twisted/internet/asyncioreactor.py:279: in _reschedule
self._timerHandle = self._asyncioEventloop.call_at(abs_time, self._onTimer)
/usr/lib/python3.13/asyncio/base_events.py:812: in call_at
self._check_closed()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = 

def _check_closed(self):
if self._closed:
>           raise RuntimeError('Event loop is closed')
E           RuntimeError: Event loop is closed

/usr/lib/python3.13/asyncio/base_events.py:556: RuntimeError
< /code>
Da die tatsächliche Testfunktion nicht einmal ausgeführt wird, scheint der Inhalt nicht wichtig zu sein, und für dies werden auch benutzerdefinierte Vorrichtungen erforderlich. Hier ist hier ein minimales, der die anzeigt Problem: < /p>
@ensureDeferred
async def test_minimal(aiohttp_client):
app = web.Application()
await aiohttp_client(app)
< /code>
Meine Einstellungen: < /p>
[tool.pytest.ini_options]
addopts = [
"--reactor=asyncio",
]
asyncio_mode = "strict"
asyncio_default_fixture_loop_scope = "function"
(nicht 100% sicher, aber ich denke, ich wechsle zu asyncio_mode = "auto" und ersetzt @pyTest_asyncio.fixure durch @pyTest.fixure kann es nur noch schlimmer machen, und das Ändern des Spielsschleifsumfangs in "Modul" lässt den Läufer hängen, bevor Sie etwas tun).
Was ist die richtige Möglichkeit, solche Testfunktionen zu schreiben, vorausgesetzt, es existiert? "Schleifenumfang für alles ist tatsächlich" Sitzung ", da der Asyncio -Reaktor einmal ausgeführt wird und dieselbe Schleife für den gesamten Lauf verwendet, aber das Hauptproblem besteht darin, alle Teile dieselbe Schleife zu verwenden, und ich nicht. Ich weiß, ob das ist möglich, ohne einen der Plugins zu ändern.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post