Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何编写单元测试以确保代码遵循HTTP重定向?_Python_Unit Testing_Python Requests_Http Redirect - Fatal编程技术网

Python 如何编写单元测试以确保代码遵循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

我正在使用模块在模块内部进行HTTP调用

我明白:

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,否则请求将始终跟随重定向。此处的请求测试: