我使用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会同时进行测试。在
有人知道我做错了什么吗?在
找到了httmock,交换出去了发送会话()使用伪方法,该方法尝试为上下文管理器定义的各种处理程序。在
我的代码在呼叫请求。请求(),它将创建一个新会话,调用会话.请求(),调用会话.发送(),并且模拟没有拦截send()调用。在
我的猜测是,如果使用requests.*API,requests会为每次调用启动一个新的会话。发现我的产品代码可以创建一个请求会话,然后对每个调用使用相同的会话(并使用会话的request()方法而不是请求。请求()方法)。在
一旦完成,现在可以在完整的tox运行中运行,BTW使用多个线程来运行测试方法(方法级别的线程)。在
相关问题 更多 >
编程相关推荐