python - 如何编写单元测试以确保我的代码遵循 HTTP 重定向?

标签 python unit-testing python-requests http-redirect

我正在使用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/

相关文章:

python - 保存麻烦的网页并导入回Python

python - 来自 StackOverflow 公司的网络抓取公司描述

python - 覆盖数据框值

python - 在 Python 中运行基本的 Selenium 脚本时为 "Firefox quit unexpectedly."

python - 如何将 POST 数据流式传输到 Python 请求中?

unit-testing - CakePHP/Jenkins/Phing-运行所有单元测试

c# - 我可以在数据驱动测试中使用动态生成的 XML 文件吗

python - 有没有办法编写一个包含返回列表列表的函数的模块?

python - 使用标量的 SymPy 替换不起作用?

unit-testing - 单元测试电子邮件内容