pytest-sentry icon indicating copy to clipboard operation
pytest-sentry copied to clipboard

Pytest plugin `pytest-sentry` not sending issue events because it is killed

Open antonpirker opened this issue 11 months ago • 3 comments

How do you use Sentry?

Sentry Saas (sentry.io)

Version

all

Steps to Reproduce

See this example project: https://github.com/antonpirker/testing-sentry/tree/main/test-pytest-sentry

We run a flaky test multiples times using the pytest-sentry plugin for pytest (which can be found here: https://github.com/getsentry/pytest-sentry)

Expected Result

Issues representing the failed tests runs showing up in Sentry.

Actual Result

The envelopes never reach Sentry. It seems that pytest kills the process right in the middle of sending the envelope: https://github.com/getsentry/sentry-python/blob/2.23.1/sentry_sdk/transport.py#L349-L354

The line after self._request() is never reached.

antonpirker avatar Mar 17 '25 14:03 antonpirker

This may (or may not) be a workaround, below. The idea is to ensure that client.flush() is called before the main thread exits.

import pytest_sentry import hookwrapper

@hookwrapper(itemgetter=lambda session: session)
def pytest_sessionfinish(session):
    del session
    yield
    Scope.get_client().flush(timeout=2.0)

To do this in a generic way requires a bit more code. For an example, see https://github.com/getsentry/sentry/blob/1785768/src/sentry/testutils/pytest/json_report_reruns.py

HOWEVER, it's a mystery why this isn't already handled by the AtExit integration. Its purpose is exactly this, and I double-checked that it's active and enabled, so why/how isn't it doing its job?

bukzor avatar Mar 17 '25 20:03 bukzor

@antonpirker, why is this a bug in Sentry SDK and not in the pytest-sentry plugin?

szokeasaurusrex avatar Mar 18 '25 11:03 szokeasaurusrex

Because no one ever looks at issues in pytest-sentry. This way we do not forget about this.

antonpirker avatar Mar 18 '25 13:03 antonpirker