httmock未拦截请求.发送()进行毒物检测时

2024-06-06 19:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyPI(https://pypi.python.org/pypi/httmock/)中的httmock捕捉REST请求并对其进行模拟。我将在我的单元测试代码中这样使用它:

with httmock.HTTMock(my_request.token, my_request.put):
    payload = {'host-name': 'TestHost'}
    content = client.put_request('global/host-name',
                                  payload=payload)

作为put_request()的一部分,客户机类将看到没有身份验证令牌,并将首先使用用户和密码向POST请求获取令牌,然后执行put请求。有一些断言可以检查过程的结果。在

我有大量的测试,当我使用tox进行测试时,这些测试工作得很好。然而,如果我运行完整的毒物测试套件,我有大约30个测试失败。他们都没有通过认证。在

我将调试添加到httmock.py文件和客户端代码中。我看到的是,在输入(),因为它需要请求.会话.发送并保存它,如预期的那样替换为一个要拦截的函数。但是,我从来没有看到在这些失败的情况下调用了\u fake_send()(没有看到日志消息)。结果,它没有返回任何内容(不是令牌),测试失败。在

我做了一些带注释的日志记录:

^{pr2}$

[1]显示用两个处理程序注册的。[2] 在dunder enter为上下文管理器和请求.会话.发送指向正常模块/函数。[4] 客户是在打电话之前吗请求。请求(). [5] 显示出请求.会话.发送已交换到httmock。我本来希望在[6]看到httmock尝试处理程序的日志,但是我看到的却是显示调用完成的客户端消息。在

我查看了请求库,request()创建了一个会话并调用会话.会话.发送()如预期。在

我不确定,但我认为在全套测试中,tox会同时进行测试。在

有人知道我做错了什么吗?在


Tags: 函数代码namepypitoxhost消息处理程序
1条回答
网友
1楼 · 发布于 2024-06-06 19:25:03

找到了httmock,交换出去了发送会话()使用伪方法,该方法尝试为上下文管理器定义的各种处理程序。在

我的代码在呼叫请求。请求(),它将创建一个新会话,调用会话.请求(),调用会话.发送(),并且模拟没有拦截send()调用。在

我的猜测是,如果使用requests.*API,requests会为每次调用启动一个新的会话。发现我的产品代码可以创建一个请求会话,然后对每个调用使用相同的会话(并使用会话的request()方法而不是请求。请求()方法)。在

一旦完成,现在可以在完整的tox运行中运行,BTW使用多个线程来运行测试方法(方法级别的线程)。在

相关问题 更多 >