Python 如何编写单元测试以确保代码遵循HTTP重定向?
我正在使用模块在模块内部进行HTTP调用 我明白:Python 如何编写单元测试以确保代码遵循HTTP重定向?,python,unit-testing,python-requests,http-redirect,Python,Unit Testing,Python Requests,Http Redirect,我正在使用模块在模块内部进行HTTP调用 我明白: r = requests.post('http://github.com', allow_redirects=True) 将遵循HTTP重定向 当然,我从自己的模块API中多次调用请求,我想编写一个单元测试,确保请求始终遵循重定向。我该怎么做 乍一看,我的想法是在测试中启动一个简单的HTTP服务器来模拟HTTP调用。我不确定如何模拟整个依赖于网络通信的请求方法调用。如果要求代码始终遵循重定向,那么我会在接口函数中显式编码。然后坚持所有对req
r = requests.post('http://github.com', allow_redirects=True)
将遵循HTTP重定向
当然,我从自己的模块API中多次调用请求
,我想编写一个单元测试,确保请求始终遵循重定向。我该怎么做
乍一看,我的想法是在测试中启动一个简单的HTTP服务器来模拟HTTP调用。我不确定如何模拟整个依赖于网络通信的请求
方法调用。如果要求代码始终遵循重定向,那么我会在接口函数中显式编码。然后坚持所有对requests.post的调用都是通过您的函数进行的。在其最简单的形式中,这只是一个包装器方法:
def my_post(*args, **kwargs):
return requests.post(*args, allow_redirects=True, **kwargs)
如果您想保留现有的API,只需重写其行为,您可以使用monkeypatch和
您应该避免测试库本身是否执行重定向。这应该在其他地方进行测试,并且您可能信任该库。您需要测试的只是正确调用库函数。这是一般原则
这使您的测试变得简单:只需模拟对请求的调用。post
,并确认要传递的参数,包括allow\u redirects=True
。除非动词是HEAD,否则请求将始终跟随重定向。此处的请求测试: