Python 如何对请求进行单元测试/模拟;它的反应

Python 如何对请求进行单元测试/模拟;它的反应,python,unit-testing,python-2.7,mocking,Python,Unit Testing,Python 2.7,Mocking,我在单元测试使用Kenneth Reitz库的函数时遇到问题: 以下功能需进行单元测试: def getPage(url): r = requests.get(url) r.raise_for_status() # raises HTTPError if necessary dom = fromstring(r.text) dom.make_links_absolute(url) return dom 目前我的单元测试如下。(尽管这显然不起作用。)

我在单元测试使用Kenneth Reitz库的函数时遇到问题:

以下功能需进行单元测试:

def getPage(url):
    r = requests.get(url)
    r.raise_for_status()    # raises HTTPError if necessary
    dom = fromstring(r.text)
    dom.make_links_absolute(url)
    return dom
目前我的单元测试如下。(尽管这显然不起作用。)

由此产生的回溯是:

Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "C:\Anaconda\lib\site-packages\mock.py", line 1201, in patched
    return func(*args, **keywargs)
  File "C:\...\test_myfile.py", line 79, in test_getPage
    dom = getPage('http://www.test.com')
  File "C:\...\myfile.py", line 67, in getPage
    r.raise_for_status()    # raises HTTPError if necessary
TypeError: unbound method raise_for_status() must be called with Response instance as first argument (got nothing instead)

一个单元如何使用模拟而不是临时Web服务器来测试这样的函数?我尝试对响应进行pickle处理,并将其设置为requests.get()的返回值,但无法对其进行pickle处理。

很晚了,但我非常喜欢httprety库来解决这个问题:


文档缺少有关如何检查代码发出的请求的信息。从我到目前为止收集的信息来看,您只能访问最后发出的请求,这在测试发出多个请求的函数/方法时是不够的。否则,这是一个相当好的项目此外,我过去也使用过,但对于简单的外部服务调用来说,这有点过分了。
Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "C:\Anaconda\lib\site-packages\mock.py", line 1201, in patched
    return func(*args, **keywargs)
  File "C:\...\test_myfile.py", line 79, in test_getPage
    dom = getPage('http://www.test.com')
  File "C:\...\myfile.py", line 67, in getPage
    r.raise_for_status()    # raises HTTPError if necessary
TypeError: unbound method raise_for_status() must be called with Response instance as first argument (got nothing instead)