• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python 如何在测试中使用 Mock

    Mock概念

    mock 的意思是模拟,也就是模拟接口返回的信息,用已有的信息替换它需要返回的信息,从实现对所依赖的模块的测试。

    一般有两种场景:

    前端mock可以通过一些工具来完成:

    后端的 Mock 则是从接口的角度,如果一个接口A返回的数据需要依赖于另一个接口B,当敏捷开发中B接口还未开发完全时候这里会需要用到 Mock。

    对于测试人员,对接口测试的时候,部分接口尚未开发完成,在约定了接口定义之后,也可以使用 Mock 来模拟。

    在 python3.X 中 Mock 模块已经被集成到unittest里面。

    Mock类

    class Mock(spec=None,side_effect=None,return_value=DEFAULT,name=None)

    简单的例子体验下 Mock 的功能特点

    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 拦截处理了。

    一个相对正式的 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的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • python测试框架unittest和pytest区别
    • python使用pytest接口自动化测试的使用
    • python 如何用 Hypothesis 来自动化单元测试
    • python 基于DDT实现数据驱动测试
    • Python自动化测试基础必备知识点总结
    • Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
    • 基于Python的接口自动化unittest测试框架和ddt数据驱动详解
    • Appium+Python实现简单的自动化登录测试的实现
    • python如何进行基准测试
    上一篇:python装饰器代码深入讲解
    下一篇:python实现控制台输出颜色
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python 如何在测试中使用 Mock python,如,何在,测试,中,使用,