test(django): Remove @pytest.mark.forked dependency from Django integration tests
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 52/100
- Issue-Typ
- Refactoring
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Ruhig
- Bereich
- backend, testing-qa
Rechercherichtung
Beginne mit der sentry_init-Fixture und DjangoIntegration.setup_once und prüfe anschließend tests/integrations/django/test_basic.py, test_cache_module.py, test_db_query_data.py, test_db_transactions.py und test_data_scrubbing.py. Entferne die forked-Marker eine Datei nach der anderen, füge eine explizite Isolation von Django und dem Integrationszustand hinzu und führe die betroffenen Tests nach jeder Migration aus. Fertig ist die Arbeit, wenn alle aufgeführten Tests ohne pytest-forked bestehen und zwischen den Tests keine Zustandslecks auftreten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Background
The Django integration test suite uses @pytest.mark.forked (via pytest-forked) on 52 tests across 5 files to isolate global state. This dates back to #522 ("Less boxed testing") and was a pragmatic substitute for proper teardown.
Problem
pytest-forked is actively harmful in some scenarios:
- Python 3.12 + asyncio + GitHub Actions: Forking a multi-threaded process and then running an asyncio loop in the child causes silent hangs (the loop inherits dead threads). This consumed the full 30-minute CI budget on the Django ASGI tests until #6410 dropped
forkedfrom those 10 tests. - Slow: Fork-per-test multiplies suite runtime.
- Hides real isolation bugs: Tests pass under fork but would fail under proper sequential execution, masking integration setup that isn't idempotent.
Goal
Remove @pytest.mark.forked from every test under tests/integrations/django/ and replace it with explicit isolation.
Proposed approach
- Extend (or autouse-wrap) the
sentry_initfixture so the non-forked path also resets:sentry_sdk.integrations._processed_integrationssentry_sdk.integrations._installed_integrations
- Add a
reset_django_statefixture that snapshots and restores:settings.MIDDLEWARE- Django signal receivers (
request_started,request_finished, etc.) - Anything else
DjangoIntegration.setup_onceconnects
- Audit
DjangoIntegration.setup_once(and submodule patches undersentry_sdk/integrations/django/) for non-idempotent module-level patching. - Migrate test files one at a time: drop the marker, run, fix the resulting leaks, repeat.
Current state
Files still using @pytest.mark.forked under tests/integrations/django/ (count via grep -rc):
test_basic.py(13)test_cache_module.py(14)test_db_query_data.py(10)test_db_transactions.py(12)test_data_scrubbing.py(3)
The ASGI subset (tests/integrations/django/asgi/test_asgi.py) was removed in #6410.
- Vorherrschende Sprache
- Python
- Sterne
- 2.2k
- Forks
- 680
- Ø Merge
- 1 T. 3 Std.
- Gemergte PRs (30 T.)
- 264
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus getsentry/sentry-python
-
Improvement Python Spans
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
getsentry/sentry-python#7876 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Bug Python
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
getsentry/sentry-python#7870 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Include `send_default_pii` migration in migration docsEvtl. vergeben @ericapisani hat das vor 1 Tag übernommen. OffenDocs Python
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 85/100
getsentry/sentry-python#7568 · 2 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
Python
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
getsentry/sentry-python#6992 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Improvement Python
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
getsentry/sentry-python#6970 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in getsentry/sentry-python
Ähnliche Issues
-
Link Checker ReportOffenautomated issue report
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 85/100
RapidAI/RapidOCRDocs#119 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
btclib-org/btclib-node#1833 ·
Maintainer antworten meist innerhalb von 1 Tag
-
IRIS reader: no-data velocity bins (DB_VEL, DB_VELC) returned as 0.0 m/s instead of NaNEvtl. vergeben @syedhamidali hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 80/100
elodin-sys/elodin#890 ·
Maintainer antworten meist innerhalb von 1 Tag