Skip to content


This section provides tips for troubleshooting and resolving common development mistakes and error situations.

API tests return an unexpected 307 Redirected

Summary: Requests require a trailing / in the request URL.

If you write a test that does not include a trailing / when making a request to a specific endpoint:

async def test_example(client):
    response = await"/my_route")
    assert response.status_code == 201

You'll see a failure like:

E       assert 307 == 201
E        +  where 307 = <Response [307 Temporary Redirect]>.status_code

To resolve this, include the trailing /:

async def test_example(client):
    response = await"/my_route/")
    assert response.status_code == 201

Note: requests to nested URLs may exhibit the opposite behavior and require no trailing slash:

async def test_nested_example(client):
    response = await"/my_route/filter/")
    assert response.status_code == 307

    response = await"/my_route/filter")
    assert response.status_code == 200

Reference: "HTTPX disabled redirect following by default" in 0.22.0.

pytest.PytestUnraisableExceptionWarning or ResourceWarning

As you're working with one of the FlowRunner implementations, you may get a surprising error like:

E               pytest.PytestUnraisableExceptionWarning: Exception ignored in: <ssl.SSLSocket fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
E               Traceback (most recent call last):
E                 File ".../pytest_asyncio/", line 306, in setup
E                   res = await func(**_add_kwargs(func, kwargs, event_loop, request))
E               ResourceWarning: unclosed <ssl.SSLSocket fd=10, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('', 60605), raddr=('', 6443)>

.../_pytest/ PytestUnraisableExceptionWarning

This is saying that your test suite (or the prefect library code) opened a connection to something (like a Docker daemon or a Kubernetes cluster) and didn't close it.

It may help to re-run the specific test with PYTHONTRACEMALLOC=25 pytest ... so that Python can display more of the stack trace where the connection was opened.