-
-
Notifications
You must be signed in to change notification settings - Fork 813
Test fail when run under something - ChannelsLiveServerTestCase #2149
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Hi @enzofrnt. There's not much info here... "Start failing" — How? What does that mean? (Relevant parts of a stack trace maybe?) Some folks have reported issues with the way pytest handles the event loop... (but no-one pinned that down for me yet, so 🤷). Pytest-asyncio has a warning about unittest subclasses not being supported, so maybe you're hitting that? https://pypi.org/project/pytest-asyncio/ Difficult to say too much with more details to go on. |
Hi @carltongibson I will try to give you the most trace possible later. |
Re @carltongibson here some trace of my test : tox config : [tox]
envlist = py{310,3.11,3.12,3.13}
isolated_build = true
minversion = 3.0.0
[testenv]
allowlist_externals = pytest
commands =
pytest ./tests/test_stream.py::RedisListenerTest::test_stream_from_inside
setenv =
DJANGO_SETTINGS_MODULE = tests.settings
PYTHONPATH = {toxinidir} With this test fail probably because not run as main process in the tests. Événements parsés: [Event(channel='test', type='stream-open', data={}, id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_0'}
Événements parsés: [Event(channel='test', type='test', data='test_0', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_1'}
Événements parsés: [Event(channel='test', type='test', data='test_1', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_2'}
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_3'}
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_4'}
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_5'}
Événements parsés: [Event(channel='test', type='test', data='test_5', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_6'}
Événements parsés: [Event(channel='test', type='test', data='test_6', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_7'}
Événements parsés: [Event(channel='test', type='test', data='test_7', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_8'}
Événements parsés: [Event(channel='test', type='test', data='test_8', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_9'}
Événements parsés: [Event(channel='test', type='test', data='test_9', id=None)] There is event send and event parsed and here, we can see that some event disappear. Something that not happening when test run as the main one (note thta it also work when doing (django-eventstream) Book • ➜ ~/Git/django-eventstream git:(default-cross-process-send_event) ✗ pytest ./tests/test_stream.py::RedisListenerTest::test_stream_from_inside
============================================================= test session starts ==============================================================
platform darwin -- Python 3.13.2, pytest-8.3.5, pluggy-1.5.0
rootdir: /Users/enzofournet/Git/django-eventstream
configfile: pytest.ini
plugins: asyncio-0.26.0
asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=session, asyncio_default_test_loop_scope=function
collected 1 item
tests/test_stream.py use default
use default
Début du test
URL de test: http://localhost:50265/events/
RedisListener init
Réponse reçue: 200
Thread d'envoi interne démarré
Thread d'écoute démarré
Départ simultané !
Début de la réception des événements
Début de la lecture des événements
Événements parsés: []
Événements parsés: [Event(channel='test', type='stream-open', data={}, id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_0'}
Événements parsés: [Event(channel='test', type='test', data='test_0', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_1'}
Événements parsés: [Event(channel='test', type='test', data='test_1', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_2'}
Événements parsés: [Event(channel='test', type='test', data='test_2', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_3'}
Événements parsés: [Event(channel='test', type='test', data='test_3', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_4'}
Événements parsés: [Event(channel='test', type='test', data='test_4', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_5'}
Événements parsés: [Event(channel='test', type='test', data='test_5', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_6'}
Événements parsés: [Event(channel='test', type='test', data='test_6', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_7'}
Événements parsés: [Event(channel='test', type='test', data='test_7', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_8'}
Événements parsés: [Event(channel='test', type='test', data='test_8', id=None)]
Envoi de l'événement interne: {'channel': 'test', 'event_type': 'test', 'data': 'test_9'}
Événements parsés: [Event(channel='test', type='test', data='test_9', id=None)]
Tous les événements reçus: 11
send_thread.join()
listen_thread.join()
Événements reçus (11):
- Type: stream-open, Channel: test, Data: {}, Timestamp: 1744460777.592619
- Type: test, Channel: test, Data: test_0, Timestamp: 1744460779.59808
- Type: test, Channel: test, Data: test_1, Timestamp: 1744460779.7091541
- Type: test, Channel: test, Data: test_2, Timestamp: 1744460779.822887
- Type: test, Channel: test, Data: test_3, Timestamp: 1744460779.932273
- Type: test, Channel: test, Data: test_4, Timestamp: 1744460780.0417972
- Type: test, Channel: test, Data: test_5, Timestamp: 1744460780.156214
- Type: test, Channel: test, Data: test_6, Timestamp: 1744460780.266751
- Type: test, Channel: test, Data: test_7, Timestamp: 1744460780.378268
- Type: test, Channel: test, Data: test_8, Timestamp: 1744460780.488517
- Type: test, Channel: test, Data: test_9, Timestamp: 1744460780.603433
.
============================================================== 1 passed in 3.69s ===============================================================
(django-eventstream) Book • ➜ ~/Git/django-eventstream git:(default-cross-process-send_event) ✗ Then in the test here : this async loop that in a thread seams to have an issue when run not as the main process : |
Hi,
I know the issue title might sound a bit strange, but I’m not sure how to better describe what’s going on.
I'm currently working on test cases to improve django-eventstream.
Here are the related tests:
tests/test_stream.py
When I run them individually using:
everything works fine. But when I run them with:
or through:
they start failing. It seems like when the tests are executed along with others, or maybe under different process contexts, something changes — perhaps the test priority or isolation — and some of the parsing logic in the code fails to retrieve all the events that were sent.
Is there a way to make sure my tests remain stable and work even when executed with others or through
tox
?Thanks in advance!
The text was updated successfully, but these errors were encountered: