diff --git a/tests/tracing/test_deprecated.py b/tests/tracing/test_deprecated.py new file mode 100644 index 0000000000..0ce9096b6e --- /dev/null +++ b/tests/tracing/test_deprecated.py @@ -0,0 +1,20 @@ +from sentry_sdk import start_span + +from sentry_sdk.tracing import Span + + +def test_start_span_to_start_transaction(sentry_init, capture_events): + # XXX: this only exists for backwards compatibility with code before + # Transaction / start_transaction were introduced. + sentry_init(traces_sample_rate=1.0) + events = capture_events() + + with start_span(transaction="/1/"): + pass + + with start_span(Span(transaction="/2/")): + pass + + assert len(events) == 2 + assert events[0]["transaction"] == "/1/" + assert events[1]["transaction"] == "/2/" diff --git a/tests/test_tracing.py b/tests/tracing/test_integration_tests.py similarity index 55% rename from tests/test_tracing.py rename to tests/tracing/test_integration_tests.py index 683f051c36..7423e4bd1e 100644 --- a/tests/test_tracing.py +++ b/tests/tracing/test_integration_tests.py @@ -10,7 +10,7 @@ start_span, start_transaction, ) -from sentry_sdk.tracing import Span, Transaction +from sentry_sdk.tracing import Transaction @pytest.mark.parametrize("sample_rate", [0.0, 1.0]) @@ -46,23 +46,6 @@ def test_basic(sentry_init, capture_events, sample_rate): assert not events -def test_start_span_to_start_transaction(sentry_init, capture_events): - # XXX: this only exists for backwards compatibility with code before - # Transaction / start_transaction were introduced. - sentry_init(traces_sample_rate=1.0) - events = capture_events() - - with start_span(transaction="/1/"): - pass - - with start_span(Span(transaction="/2/")): - pass - - assert len(events) == 2 - assert events[0]["transaction"] == "/1/" - assert events[1]["transaction"] == "/2/" - - @pytest.mark.parametrize("sampled", [True, False, None]) def test_continue_from_headers(sentry_init, capture_events, sampled): sentry_init(traces_sample_rate=1.0) @@ -114,19 +97,6 @@ def test_continue_from_headers(sentry_init, capture_events, sampled): assert message["message"] == "hello" -def test_sampling_decided_only_for_transactions(sentry_init, capture_events): - sentry_init(traces_sample_rate=0.5) - - with start_transaction(name="hi") as transaction: - assert transaction.sampled is not None - - with start_span() as span: - assert span.sampled == transaction.sampled - - with start_span() as span: - assert span.sampled is None - - @pytest.mark.parametrize( "args,expected_refcount", [({"traces_sample_rate": 1.0}, 100), ({"traces_sample_rate": 0.0}, 0)], @@ -156,67 +126,6 @@ def foo(): assert len(references) == expected_refcount -def test_span_trimming(sentry_init, capture_events): - sentry_init(traces_sample_rate=1.0, _experiments={"max_spans": 3}) - events = capture_events() - - with start_transaction(name="hi"): - for i in range(10): - with start_span(op="foo{}".format(i)): - pass - - (event,) = events - span1, span2 = event["spans"] - assert span1["op"] == "foo0" - assert span2["op"] == "foo1" - - -def test_nested_transaction_sampling_override(): - with start_transaction(name="outer", sampled=True) as outer_transaction: - assert outer_transaction.sampled is True - with start_transaction(name="inner", sampled=False) as inner_transaction: - assert inner_transaction.sampled is False - assert outer_transaction.sampled is True - - -def test_transaction_method_signature(sentry_init, capture_events): - sentry_init(traces_sample_rate=1.0) - events = capture_events() - - with pytest.raises(TypeError): - start_span(name="foo") - assert len(events) == 0 - - with start_transaction() as transaction: - pass - assert transaction.name == "" - assert len(events) == 1 - - with start_transaction() as transaction: - transaction.name = "name-known-after-transaction-started" - assert len(events) == 2 - - with start_transaction(name="a"): - pass - assert len(events) == 3 - - with start_transaction(Transaction(name="c")): - pass - assert len(events) == 4 - - -def test_no_double_sampling(sentry_init, capture_events): - # Transactions should not be subject to the global/error sample rate. - # Only the traces_sample_rate should apply. - sentry_init(traces_sample_rate=1.0, sample_rate=0.0) - events = capture_events() - - with start_transaction(name="/"): - pass - - assert len(events) == 1 - - def test_transactions_do_not_go_through_before_send(sentry_init, capture_events): def before_send(event, hint): raise RuntimeError("should not be called") @@ -228,17 +137,3 @@ def before_send(event, hint): pass assert len(events) == 1 - - -def test_get_transaction_from_scope(sentry_init, capture_events): - sentry_init(traces_sample_rate=1.0) - events = capture_events() - - with start_transaction(name="/"): - with start_span(op="child-span"): - with start_span(op="child-child-span"): - scope = Hub.current.scope - assert scope.span.op == "child-child-span" - assert scope.transaction.name == "/" - - assert len(events) == 1 diff --git a/tests/tracing/test_misc.py b/tests/tracing/test_misc.py new file mode 100644 index 0000000000..ce717437ea --- /dev/null +++ b/tests/tracing/test_misc.py @@ -0,0 +1,45 @@ +import pytest + +from sentry_sdk import start_span, start_transaction +from sentry_sdk.tracing import Transaction + + +def test_span_trimming(sentry_init, capture_events): + sentry_init(traces_sample_rate=1.0, _experiments={"max_spans": 3}) + events = capture_events() + + with start_transaction(name="hi"): + for i in range(10): + with start_span(op="foo{}".format(i)): + pass + + (event,) = events + span1, span2 = event["spans"] + assert span1["op"] == "foo0" + assert span2["op"] == "foo1" + + +def test_transaction_method_signature(sentry_init, capture_events): + sentry_init(traces_sample_rate=1.0) + events = capture_events() + + with pytest.raises(TypeError): + start_span(name="foo") + assert len(events) == 0 + + with start_transaction() as transaction: + pass + assert transaction.name == "" + assert len(events) == 1 + + with start_transaction() as transaction: + transaction.name = "name-known-after-transaction-started" + assert len(events) == 2 + + with start_transaction(name="a"): + pass + assert len(events) == 3 + + with start_transaction(Transaction(name="c")): + pass + assert len(events) == 4 diff --git a/tests/tracing/test_sampling.py b/tests/tracing/test_sampling.py new file mode 100644 index 0000000000..476d5e78c9 --- /dev/null +++ b/tests/tracing/test_sampling.py @@ -0,0 +1,34 @@ +from sentry_sdk import start_span, start_transaction + + +def test_sampling_decided_only_for_transactions(sentry_init, capture_events): + sentry_init(traces_sample_rate=0.5) + + with start_transaction(name="hi") as transaction: + assert transaction.sampled is not None + + with start_span() as span: + assert span.sampled == transaction.sampled + + with start_span() as span: + assert span.sampled is None + + +def test_nested_transaction_sampling_override(): + with start_transaction(name="outer", sampled=True) as outer_transaction: + assert outer_transaction.sampled is True + with start_transaction(name="inner", sampled=False) as inner_transaction: + assert inner_transaction.sampled is False + assert outer_transaction.sampled is True + + +def test_no_double_sampling(sentry_init, capture_events): + # Transactions should not be subject to the global/error sample rate. + # Only the traces_sample_rate should apply. + sentry_init(traces_sample_rate=1.0, sample_rate=0.0) + events = capture_events() + + with start_transaction(name="/"): + pass + + assert len(events) == 1