簡體   English   中英

如何在此代碼中獲取並測試request.head的狀態?

[英]How do I get and test the state of requests.head in this code?

我有以下代碼:

   def verify_pseudo_streaming(self, publishedName, path, start):
        cname = self.get_cname(publishedName)
        params = {'start': start}
        url = 'http://{}{}'.format(cname, path)
        origin_size = int(requests.head(url).headers['Content-Length'])
        start_headers = requests.head(url, params=params).headers
        start_size = int(start_headers['Content-Length'])
        msg = "Start size is not lower than origin size"
        assert start_size < origin_size, msg

在我的測試我都嘲笑requests.head在我的單元測試,我怎么得到的值headers運行時,第一和第二時間requests.head沒有真正運行呢?

我終於結束了下面的工作...

class MockHeaders(object):
    def __init__(self):
        pass
    def streaming_headers(self, *args, **kwargs):
        start = kwargs.get('params', {})
        self.headers['Content-Length'] = start.get('start', 10)
        stuff = Mock()
        stuff.headers = self.headers
        return stuff

<snip> ... </snip>

    @patch("FrontEnd.requests.head")
    @patch("FrontEnd.FrontEnd.get_cname")
    def test_verify_pseudo_streaming(self, mock_get_cname,mock_head):
        mock_get_cname.return_value = 'hulahoop'
        mock_header = MockHeaders()
        mock_head.side_effect = mock_header.streaming_headers
        mock_head.return_value = mock_header
        try:
            self.fe.verify_pseudo_streaming('publishedName', 'path', 5)
        except AssertionError:
            self.fail("Unexpected Assertion Error")

我只是保持開放態度,看看其他人是否還有其他更優雅的想法。

您可以模擬\\ Monkeypatch僅此方法

requests.sessions.Session.send

這就是請求用於發送請求的方式,因此,如果將其更改為不執行任何操作,它將不會發送請求

def x(*args, **kwarg):
    pass
requests.sessions.Session.send = x

我會模擬這樣的請求:

class FakeHeaders(object):
  def __init__(self):
    self.headers = {'Content-Length': 1}

  def inc_headers():
    self.headers['Content-Length'] += 1

def testVerifyPsuedoStreaming(self):
  fake_header = FakeHeader()
  with mock.patch.object(
      request, 'head', side_effect=fake_header.inc_headers,
      return_value=fake_header) as mock_head:
    ... 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM