我如何对 Sentry 的 before_send 回调函数进行单元测试?

3
我想编写一个strip_sensitive_data函数,并将其传递给Sentry的before_send回调函数,就像他们自己文档中的示例一样。 https://docs.sentry.io/error-reporting/configuration/filtering/?platform=python
import sentry_sdk

def strip_sensitive_data(event, hint):
    # modify event here
    return event

sentry_sdk.init(
    before_send=strip_sensitive_data
)

我正在开发一个Django应用程序,并想找到一种使用Django TestCase来修补或模拟此回调的方法。是否有简单的方法可以实现这一点?

1个回答

2

我遇到了同样的问题,在我的情况下,我想将连接错误和HTTP错误与代码503分组,因为我对它们无能为力。这是我想出来的解决方法:

@pytest.fixture
def sentry_init():
    # set up sentry sdk here

@pytest.mark.parametrize(
    "exception, expected_fingerprint",
    [
        (ConnectionError, ["connection-error"]),
        (HTTPError("503 ..."), ["connection-error"]),
        (HTTPError("400 ..."), None), # In this case no fingerprint, I don't want any grouping
    ],
)
def test_sentry_before_send(
    monkeypatch, sentry_init, exception, expected_fingerprint  # pylint: disable=unused-argument
):
    sentry_client = sentry_sdk.Hub.current.client
    transport = MagicMock()
    monkeypatch.setattr(sentry_client, "transport", transport)

    sentry_sdk.capture_exception(exception)

    if expected_fingerprint is not None:
        assert transport.method_calls[0].args[0]["fingerprint"] == expected_fingerprint
    else:
        assert "fingerprint" not in transport.method_calls[0].args[0].keys()

传输用于将事件发送到Sentry。因此,通过模拟它,您可以测试在before_send和add_breadcrumbs等中进行的任何处理...。
我查看了sdk测试以找出答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接