我正在使用请求模拟在单元测试代码中模拟一个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中请求的文本。
我迷路了。据我所知,我正在按照文档指示完全使用它。有什么想法吗?
答案 0 :(得分:0)
因此,看来您不能以这种方式使用request_mocker。 必须是装饰器或上下文管理器。
答案 1 :(得分:0)
我的意思是上下文管理器/装饰器只是围绕普通代码的一种模式。我尚未测试过,但我认为您只需致电m.start()/m.stop()。
它通常用作上下文管理器或装饰器,因为如果您这样实例化它一次,则您的请求历史记录将包括所有单元测试中的所有请求,这很难进行断言。