【问题标题】:Mocked request doing actual requests call, not mock模拟请求执行实际请求调用,而不是模拟
【发布时间】:2020-12-01 13:21:36
【问题描述】:

我正在使用 requests-mock 在我的 unittest 代码中模拟 get 请求,但是当我在测试期间运行代码时,它仍然会尝试访问实际 URL,而不是返回模拟数据。

这是我的代码:

    try:
        response = requests.get(api_url, auth=requests.auth.HTTPBasicAuth(username, password))
        response.raise_for_status()
    except requests.ConnectionError as e:
        raise dke.CLIError(f"Could not connect to Artifactory server to get NPM auth information: {str(e)}")

这是我的测试代码

class MyTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        m = requests_mock.Mocker()
        m.get('https://artifactory.apps.openshift-sandbox.example.com/artifactory/api/npm/auth',
              text=("_auth = base64string==\n"
                    "always-auth = true\n"
                    "email = shareduser@fake.com"))

我的代码中的api_url 与我传递给m.get() 的URL 相匹配。但是,当我运行测试时,我没有得到“文本”的值,而是得到一个 401 Client Error: Unauthorized 和来自服务器的响应,指示“错误的凭据”,这告诉我它实际上试图联系服务器而不是返回我在 Mock 中请求的文本。

我迷路了。据我所知,我完全按照文档指示使用它。有什么想法吗?

【问题讨论】:

    标签: requests-mock


    【解决方案1】:

    所以,您似乎不能那样使用 request_mocker。它必须是一个装饰器或上下文管理器。

    【讨论】:

      【解决方案2】:

      我的意思是上下文管理器/装饰器只是普通代码的一种模式。我还没有测试过,但我认为您只需致电m.start()/m.stop()

      它通常用作上下文管理器或装饰器,因为如果您像这样实例化它一次,那么您的请求历史记录将包括所有单元测试中的所有请求,这很难做出断言。

      【讨论】:

        猜你喜欢
        • 2018-08-06
        • 2023-03-14
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        • 2018-03-03
        相关资源
        最近更新 更多