【问题标题】:Mocking requests.post [duplicate]模拟 requests.post [重复]
【发布时间】:2020-11-10 10:31:55
【问题描述】:

这是我第一次编写单元测试,尽管我尽了最大努力,但对于不可避免地出现的烦恼表示歉意。我正在尝试模拟requests.post,但我的测试功能没有达到预期的效果,以诱导404 状态代码,以便我可以测试错误处理。

mymodule.py

def scrape(data):
    logger.debug(f'\nBeginning scrape function')
    result = {}
    exceptions = {}
    for id, receipts in data.items():
        logger.debug(f'Looking up Id # {id} and receipts: \n{receipts}')
        dispositions = []
        for receipt in receipts:
            logger.debug(f'The length of receipts is:' + str(len(receipts)))
            attempts = 1
            while attempts < 6:
                logger.debug(
                    f'This is attempt number {attempts} to search for {receipt}')
                payload = {'receipt': 'receipt',
                           'button': 'CHECK+STATUS', }
                try:
                    NOW = datetime.today().strftime('%c')
                    logger.debug(NOW)
                    logger.debug(f'Making post request for: {receipt}')
                    response = requests.post(URL, data=payload, headers=HEADERS, timeout=10)
                except Exception as e:
                    logger.debug(f'There was an exception: {e}')
                    exceptions[id] = receipt + f': {e}'
                    time.sleep(3)
                    attempts += 1
                else:
                    logger.debug(f'It worked {response.status_code}')
                    attempts = 6
                    disp = parse(response)
                    dispositions.append(f'{receipt}: {disp}')
        result[id] = dispositions
        logger.debug(f'Here is the result: {result}')
        return result

test_mymodule.py

def test_scrape(self):
    print(f'\ntest_scrape running')

    # mock a 404 in scrape() here
    with patch("mymodule.requests") as patched_post:

        # mock a request response
        patched_post.return_value.status_code = 404
        print('404 mocked')

        # verify the function returns nothing due to 404
        result = scrape(test_data)
        print(f'\n{result}')
        mock_requests.post.assert_called_once()
        self.assertEqual(result, {})

【问题讨论】:

    标签: python python-requests mocking patch monkeypatching


    【解决方案1】:

    def test_scrape(self): print(f'\ntest_scrape running')

    # mock a 404 in scrape() here
    with patch("mymodule.requests") as patched_post:
    
        # mock a request response
        patched_post.return_value.status_code = 404
        print('404 mocked')
    
        # verify the function returns nothing due to 404
        result = scrape(test_data)
        print(f'\n{result}')
        mock_requests.post.assert_called_once()
        self.assertEqual(result, {})
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2016-01-29
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2017-09-19
      • 2018-12-08
      相关资源
      最近更新 更多