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。
managed_cockroach
启动一个内存中的 CockroachDB 实例,请参阅 安装说明 来设置cockroach
CLImanaged_moto
启动一个 Moto - 模拟 AWS 服务,使用pip install moto
来启用 CLImanaged_redis
启动一个 Redis 服务器,请参阅 安装说明 来启用redis-server
CLImanaged_vault
启动一个 Vault 服务器,请参阅 安装说明 来启用vault
CLI
ASGI 应用
managed-service-fixtures
支持使用 uvicorn
运行 ASGI 应用(如 FastAPI 或 Starlette 应用)作为托管服务。如果您需要使用此功能,以下是几个场景:
- 您使用
httpx.AsyncClient
进行异步测试,并需要测试 WebSocket 端点 - 您有一个
websockets
应用程序/库,并需要启动一个服务器来测试请求/响应
在外部进程中运行 ASGI 应用程序的一个缺点是,您将失去测试中的断点和调试支持。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。
源分发
构建的发行版
managed_service_fixtures-0.3.1.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 211530bd643cc9b31fa1e1c3ba6dff75f023cd3719188c0f5177647f9a98e664 |
|
MD5 | 6cf87266a9fd2ebe86bbf37f2240e486 |
|
BLAKE2b-256 | 62dee35c9dae4a3f5ec21e326815a504ab6bada40af44892c38873ff7b8c79ce |
managed_service_fixtures-0.3.1-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 912a1702aa3aff0f1e396f6580bb4515f7b1c0f8025b9b65ed1f64864f6d9f45 |
|
MD5 | 06cb888ceac784c5c06e9819f70049db |
|
BLAKE2b-256 | 03f74853d043dc42cb7b24c871a771ed1fb083cf920cd9f235f76307a255ed14 |