在使用httpx AsyncClient进行测试时,如何在快速api上禁用服务器异常



我们有一个FastApi应用程序,并使用httpx AsyncClient进行测试。我们遇到了一个问题,单元测试在本地运行良好,但在CI服务器上失败(Github Actions)。

在进一步的研究之后,我们通过将raise_server_exceptions=False设置为False来获得这个所提出的解决方案。

client = TestClient(app, raise_server_exceptions=False)

但是,这是针对同步客户端的。我们正在使用异步客户端。

@pytest.fixture
async def client(test_app):
async with AsyncClient(app=test_app, base_url="http://testserver") as client:
yield client

AsyncClient不支持raise_app_exceptions=False选项。

有人有这方面的经验吗?感谢

对于httpxv0.14.0+,您需要使用httpx.ASGITransport。官方文件摘录:

对于一些更复杂的情况,您可能需要自定义ASGI传输。这允许您:

  • 通过设置raise_app_exceptions=False,检查500个错误响应,而不是引发异常
  • 通过设置root_path在子路径上装载ASGI应用程序
  • 通过设置客户端,为请求使用给定的客户端地址

例如:

# Instantiate a client that makes ASGI requests with a client IP of "1.2.3.4",
# on port 123.
transport = httpx.ASGITransport(app=app, raise_app_exceptions=False,
client=("1.2.3.4", 123))
async with httpx.AsyncClient(transport=transport, base_url="http://testserver") as client:
...

问题是由FastApi版本引起的。您可以使用fastapi==0.65.0,甚至在不使用ASGITransport对象和raise_app_exceptions=False标志的情况下使用,您将能够运行检查自定义异常引发的测试。

此外,fastapi版本应该冻结在需求文件中。

你可以在这里阅读更多

最新更新