mock的定义和使用场景
Python自动化中使用mock的示例
在Python自动化测试中,mock 用于模拟对象、函数或方法的行为,以便在隔离的环境中测试代码。以下是一个简单的示例:
假设你有一个 user.py 模块,其中包含一个 get_user_info 函数,用于从数据库获取用户信息:
 # user.py
 import requests
def get_user_info(user_id):
     url = f"https://example.com/api/users/{user_id}"
     response = requests.get(url)
     if response.status_code == 200:
         return response.json()
     else:
         return None
 现在,你要测试 get_user_info 函数,但不想在测试中真的发送网络请求到实际的数据库。这时可以使用 mock 来模拟 requests.get 函数的行为。测试代码如下:
 import unittest
 from unittest.mock import patch
 from user import get_user_info
class TestGetUserInfo(unittest.TestCase):
    @patch('user.requests.get')
     def test_get_user_info_success(self, mock_get):
         # 模拟请求成功的情况
         mock_response = {
             'status_code': 200,
             'json': lambda: {'id': 1, 'name': 'John Doe'}
         }
         mock_get.return_value = mock_response
result = get_user_info(1)
self.assertEqual(result, {'id': 1, 'name': 'John Doe'})
    @patch('user.requests.get')
     def test_get_user_info_failure(self, mock_get):
         # 模拟请求失败的情况
         mock_response = {
             'status_code': 404,
             'json': lambda: {}
         }
         mock_get.return_value = mock_response
result = get_user_info(2)
self.assertIsNone(result)
if __name__ == '__main__':
     unittest.main()
 在上述代码中,使用 @patch('user.requests.get') 装饰器来模拟 user 模块中的 requests.get 函数。在每个测试方法中,通过设置 mock_get.return_value 来模拟不同的响应情况,然后调用 get_user_info 函数进行测试,并使用断言来验证结果是否符合预期。

 
 
