跳转到主要内容

pytest fixtures用于管理Cockroach DB、Vault或Redis等外部服务

项目描述

managed-service-fixtures

managed-service-fixtures 是一个pytest fixtures集合,用于在运行集成测试时管理数据库、redis、vault等外部进程。

测试依赖于数据库、redis服务器或将数据存储在Amazon S3等外部服务的Python应用程序可能很困难。一种解决方案是单元测试:模拟任何类型的网络IO,并隔离测试到您的应用程序逻辑。对于较大的应用程序,您可能会发现自己陷入“模拟地狱”,或者发现您错过了现实世界中的错误。

managed-service-fixtures 是一款帮助您编写需要外部服务激活的集成测试的工具。在最简单的情况下,如果使用 pytest 单独运行并管理服务的启动和停止,那么 managed-service-fixtures 就是一个围绕优秀的 mirakuru.py 库的包装,并使用一些 Pydantic 模型来处理服务连接细节。此库还解决了两种常见的非简单用例。

第一个非简单用例是使用 pytest-xdist 并行运行测试。一个简单的 fixture 会使用 mirakuru 启动和停止服务,即使是在会话中,也会为每个工作进程创建一个服务。为了解决这个问题,managed-service-fixtures 使用 FileLock 和一个状态文件,每个工作进程都会在文件中注册自己。只有一个工作进程会成为管理者,负责启动服务,然后在所有其他工作进程注销(完成测试)后关闭服务。

第二个非简单用例是在 pytest fixture 之外管理服务。您可能希望将测试指向远程集群上的服务。您还可能希望测试完成后不停止数据库,以便您可以检查和调试其中的内容。在这些手动启动和停止服务的情况下,您可以设置环境变量指向包含服务连接细节的文件,然后 managed-service-fixtures 的 fixture 不会尝试自行处理生命周期管理。

示例

更多用法示例请参阅 tests/ 目录。

# tests/conftest.py
# https://pytest.cn/en/7.1.x/how-to/fixtures.html#using-fixtures-from-other-projects

pytest_plugins = 'managed_service_fixtures'
# tests/test_vault.py
import hvac
from managed_service_fixtures import VaultDetails


def test_vault_connection(managed_vault: VaultDetails):
    client = hvac.Client(url=managed_vault.url, token=managed_vault.token)
    assert client.is_authenticated()
    assert client.sys.is_initialized()
    assert not client.sys.is_sealed()

Fixture

您可能需要根据要使用 mirakuru / managed-service-fixtures 管理的服务安装系统库或 CLI。

ASGI 应用

managed-service-fixtures 支持使用 uvicorn 运行 ASGI 应用(如 FastAPIStarlette 应用)作为托管服务。如果您需要使用此功能,以下是几个场景:

  • 您使用 httpx.AsyncClient 进行异步测试,并需要测试 WebSocket 端点
  • 您有一个 websockets 应用程序/库,并需要启动一个服务器来测试请求/响应

在外部进程中运行 ASGI 应用程序的一个缺点是,您将失去测试中的断点和调试支持。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。

源分发

managed_service_fixtures-0.3.1.tar.gz (12.9 kB 查看散列值)

上传时间 源代码

构建的发行版

managed_service_fixtures-0.3.1-py3-none-any.whl (16.2 kB 查看散列值)

上传时间 Python 3

支持者