我正在使用requests
模块在我的模块内部进行 HTTP 调用。
我的理解是:
r = requests.post('http://github.com', allow_redirects=True)
将遵循 HTTP 重定向。
当然,我从自己的模块 API 多次调用 requests
,并且我想编写一个单元测试来确保请求始终遵循重定向。我该怎么办?
乍一看,我的想法是在测试中启动一个简单的 HTTP 服务器来模拟 HTTP 调用。我不确定如何模拟依赖网络通信的整个 requests
方法调用。
最佳答案
如果要求您的代码始终遵循重定向,那么我会在接口(interface)函数中显式对其进行编码。然后坚持所有对 requests.post
的调用都通过您的函数进行。在最简单的形式中,这只是一个包装方法:
def my_post(*args, **kwargs):
return requests.post(*args, allow_redirects=True, **kwargs)
如果您想保留现有的 API,并且只是覆盖其行为,您可以使用 Monkeypatch 和 decorate the third-party function at runtime .
您应该避免测试库本身执行重定向。这应该在其他地方进行测试,并且大概您信任该库。您需要测试的只是正确调用库函数。这是一个一般原则。
这使您的测试变得简单:只需模拟对 requests.post
的调用,并确认您想要的参数(包括 allow_redirects=True
)已传递。
关于python - 如何编写单元测试以确保我的代码遵循 HTTP 重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839924/