脚本专栏 发布日期:2025/10/31 浏览次数:1
mock 的意思是模拟,也就是模拟接口返回的信息,用已有的信息替换它需要返回的信息,从实现对所依赖的模块的测试。
一般有两种场景:
前端mock可以通过一些工具来完成:
后端的 Mock 则是从接口的角度,如果一个接口A返回的数据需要依赖于另一个接口B,当敏捷开发中B接口还未开发完全时候这里会需要用到 Mock。
对于测试人员,对接口测试的时候,部分接口尚未开发完成,在约定了接口定义之后,也可以使用 Mock 来模拟。
在 python3.X 中 Mock 模块已经被集成到unittest里面。
class Mock(spec=None,side_effect=None,return_value=DEFAULT,name=None)
from unittest import mock def add(num1,num2): return num1 + num2 # pass add = mock.Mock(return_value=200) # 创建mock对象 print( add(10,20) )
你会发现无论输入的参数是什么,输出结果都是200。等于方法被 Mock 拦截处理了。
正常情况:
import requests
def request_scm():
 # res = requests.get('http://www.mysx-scm.com')
 res = requests.get('http://baidu.com')
 return res.status_code
import unittest
from unittest import mock
class TestScmApi(unittest.TestCase):
 
 def testUrl(self):
  # request_scm = mock.Mock(return_value=200)
  self.assertEqual(request_scm(), 200, msg='testUrl 出现错误')
if __name__ == '__main__':
 unittest.main()
可以分别把两个 # 注释移到下一句试试。
import requests
class scmapi():
 def request_scm():
  res = requests.get('http://www.mysx-scm.com')
  # res = requests.get('http://baidu.com')
  return res.status_code
 def pay_alipay():
  '''
  待实现
  return 200
  '''
  return 0
 
import unittest
from unittest import mock
class TestScmApi(unittest.TestCase):
 
 needmock = True
 def setUpClass():
  print("setUpClass():所有方法之前执行")
 def tearDownClass():
  print("tearDownClass():所有方法之后执行")
  
 def setUp(self):
  self.scmapi = scmapi()
  print("setUp():每个方法之前执行")
 def tearDown(self):
  print("teardown():每个方法之后执行")
 
 def test_request_scm(self):
  if self.needmock:
   scmapi.request_scm = mock.Mock(return_value=200)
  self.assertEqual(scmapi.request_scm(), 200, msg='test_request_scm 出现错误')
 def test_pay_alipay(self):
  if self.needmock:
   scmapi.pay_alipay = mock.Mock(return_value=200)
  self.assertEqual(scmapi.pay_alipay(), 200, msg='test_pay_alipay 出现错误')
if __name__ == '__main__':
 unittest.main()
基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。
  
    
      序号 
      断言方法 
      断言描述 
    
  
  
    
      1
      assertEqual(arg1, arg2, msg=None)
      验证arg1=arg2,不等则fail
    
    
      2
      assertNotEqual(arg1, arg2, msg=None)
      验证arg1 != arg2, 相等则fail
    
    
      3
      assertTrue(expr, msg=None)
      验证expr是true,如果为false,则fail
    
    
      4
      assertFalse(expr,msg=None)
      验证expr是false,如果为true,则fail
    
    
      5
      assertIs(arg1, arg2, msg=None)
      验证arg1、arg2是同一个对象,不是则fail
    
    
      6
      assertIsNot(arg1, arg2, msg=None)
      验证arg1、arg2不是同一个对象,是则fail
    
    
      7
      assertIsNone(expr, msg=None)
      验证expr是None,不是则fail
    
    
      8
      assertIsNotNone(expr, msg=None)
      验证expr不是None,是则fail
    
    
      9
      assertIn(arg1, arg2, msg=None)
      验证arg1是arg2的子串,不是则fail
    
    
      10
      assertNotIn(arg1, arg2, msg=None)
      验证arg1不是arg2的子串,是则fail
    
    
      11
      assertIsInstance(obj, cls, msg=None)
      验证obj是cls的实例,不是则fail
    
    
      12
      assertNotIsInstance(obj, cls, msg=None)
      验证obj不是cls的实例,是则fail
    
  
以上就是python 如何在测试中使用 Mock的详细内容,更多关于python 测试中使用Mock的资料请关注其它相关文章!