单元测试python请求?

时间:2013-05-31 19:50:40

标签: python unit-testing mocking python-requests

我有几个方法我想使用Python requests库进行单元测试。从本质上讲,他们正在做这样的事情:

def my_method_under_test(self):
    r = requests.get("https://ec2.amazonaws.com/", params={'Action': 'GetConsoleOutput',
            'InstanceId': 'i-123456'})
    # do other stuffs

我基本上希望能够测试

  1. 它实际上正在提出请求。
  2. 它正在使用GET方法。
  3. 使用正确的参数。
  4. 问题在于,我希望能够在不实际提出请求的情况下对此进行测试,因为它会花费太长时间并且某些操作可能具有破坏性。

    我如何快速轻松地模拟和测试?

1 个答案:

答案 0 :(得分:9)

一个简单的模拟怎么样:

from mock import patch

from mymodule import my_method_under_test

class MyTest(TestCase):

    def test_request_get(self):
        with patch('requests.get') as patched_get:
            my_method_under_test()
            # Ensure patched get was called, called only once and with exactly these params.
            patched_get.assert_called_once_with("https://ec2.amazonaws.com/", params={'Action': 'GetConsoleOutput', 'InstanceId': 'i-123456'})