You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django测试用例因Moesif报错,替换API密钥触发VCR异常

解决VCR与Moesif测试冲突的方案

1. 让VCR忽略Moesif请求

直接在@vcr.use_cassette装饰器中配置忽略Moesif的主机,避免VCR记录或校验该请求:

@vcr.use_cassette(ignore_hosts='api.moesif.net')
def test_user_with_invalid_code(
    self, client, use_invalid_code
):
    response = client.post(
        self.endpoint,
        content_type="application/json",
        data=json.dumps(use_invalid_code),
    )

    assert response.status_code == status.HTTP_400_BAD_REQUEST

如果需要保留其他请求的校验,也可以通过过滤认证头来匹配现有cassette:

@vcr.use_cassette(match_on=['uri', 'method'], filter_headers=['X-Moesif-Application-Id'])
def test_user_with_invalid_code(...):
    # 测试代码

2. 测试环境彻底禁用Moesif集成

检查项目配置,在测试环境下关闭Moesif的中间件或初始化逻辑:

  • Django项目:在settings.py中移除Moesif中间件
import sys
if 'test' in sys.argv:
    MIDDLEWARE = [mw for mw in MIDDLEWARE if 'moesif' not in mw]
  • Flask项目:跳过测试环境的Moesif初始化
if not app.config['TESTING']:
    moesif_flask = Moesif(app)

3. 重新生成VCR cassette(可选)

如果需要保留Moesif请求记录,先删除旧的cassette文件,临时将VCR的记录模式改为new_episodes或all,用测试密钥重新录制后改回once:

@vcr.use_cassette(record_mode='new_episodes')
def test_user_with_invalid_code(...):
    # 测试代码

4. Mock掉Moesif客户端

如果代码中存在隐式触发的Moesif调用(比如模块导入时自动初始化),直接mock客户端阻止真实请求:

from unittest.mock import patch

def test_user_with_invalid_code(self, client, use_invalid_code):
    with patch('moesifapi.MoesifAPIClient') as mock_client:
        mock_client.return_value.get_app_config.return_value = {}
        response = client.post(
            self.endpoint,
            content_type="application/json",
            data=json.dumps(use_invalid_code),
        )
        assert response.status_code == status.HTTP_400_BAD_REQUEST

内容的提问来源于stack exchange,提问作者Diganta Protic Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:16:15