Python单元测试失败的请求

时间:2019-10-30 15:39:57

标签: python pytest

我正在尝试测试应该失败的http调用,但我想返回一个值。但是我没有通过测试:

    def callAPI(self, tokenURL:str):
    requestBuilder: RequestBuilder = RequestBuilder()

    try:
        response = requestBuilder.get(tokenURL)
        return response.json()
        # return "content"
    except Exception as err:
        Logger.error("An error occured while trying to call API "+ err)
        return None

这是我的测试功能:

@responses.activate
def testCallDemFails():
  responses.add(
    responses.GET, 'http://calldem.com/api', json="{'err'}", status=500)

  with pytest.raises(Exception):
    demConfig = DemConfig()
    resp = demConfig.callAPI('http://callAPI.com/api/1/foobar')
    print("testCallAPIFail", resp)
    assert resp == None

requestBuilder.get方法仅返回一个request.get函数。当我执行函数时,我什至不会使testAPI失败。你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

测试功能似乎没有将您正在使用的请求URL连接到期望的响应URL。 http://callAPI.com/api/1/foobarhttp://calldem.com/api不匹配,测试响应也未配置为正则表达式匹配,该匹配将启用示例代码所隐含的子路径匹配。我猜测错误配置的URL映射返回的响应是JSON可解析的(或无),因此永远不会引发异常。

如果您尝试使用以下测试代码,它可以工作吗?:

import re

@responses.activate
def testCallDemFails():
  responses.add(
    responses.GET, re.compile('http://callAPI.com/api/.*'), json="{'err'}", status=500)

  with pytest.raises(Exception):
    demConfig = DemConfig()
    resp = demConfig.callAPI('http://callAPI.com/api/1/foobar')
    print("testCallAPIFail", resp)
    assert resp == None