用途:在 Python 测试中录制并回放 HTTP 交互,使依赖外部 API 的测试可离线、确定性地运行。
主要能力:通过 pytest 标记 @pytest.mark.vcr() 录制请求与响应;以 cassette(YAML)保存交互并重放;支持 httpx 异步客户端与异步测试;可配置录制模式(once、new_episodes、none、all);可过滤请求头、查询参数与请求体中的敏感数据(如 authorization、x-api-key、api_key、token、password);支持自定义匹配器用于忽略动态字段(request_id、timestamp);面向 LLM API 测试提供匹配方案以减少真实调用。
使用方式:在 conftest.py 中以 vcr_config fixture 配置 cassette_library_dir、record_mode、match_on、filter_headers、filter_query_parameters 等;测试函数加 @pytest.mark.vcr() 即可,或用 @pytest.mark.vcr("custom_cassette.yaml") 指定文件。异步场景使用 @pytest.mark.asyncio 配合 httpx.AsyncClient。CI 中常见做法是设置 record_mode 为 none,仅重放不录制。
适用场景:测试调用外部 HTTP API 的 Python 代码、需要重放真实响应的集成测试、异步 API 集成测试、LLM 接口测试。
限制与注意:不要把含真实 API 密钥的 cassette 提交到仓库;不要在 CI 使用 all 模式(会发起真实请求);需过滤敏感数据;cassette 文件应纳入版本控制。资料未提供安装命令、付费信息与具体性能指标。