python Mock使用

一、什么是mock?

  • mock翻译过来有模拟的意思。主要功能是使用mock对象替代掉指定的python对象,以达到模拟对象的行为的目的。
  • 在python里面mock是辅助单元测试的一个模块,在2.x版本里面属于单独的模块,在python3以后已经集成到了unittest模块当中。

二、使用场景

  • 解决依赖:当测试某个接口或者功能模块时,如果被测接口所依赖的其他接口并没有开发完成,这个时候我们就可以使用mock来模拟依赖接口的返回,进行提前测试。
  • 模拟复杂业务接口:如果测试的某个功能,涉及其他系统,而其他系统测试数据构造相对复杂,该系统并不在本次迭代范围以内。此时可以使用mock来模拟这个复杂系统来降低测试成本提高测试效率。
  • 外部接口联调:当测试过程中需要与第三方公司联调,但是测试环境并没有打通的时候,此时可以根据第三方公司的接口文档来mock各种场景,提前进行我方系统的测试。

三、简单使用

  • 导入模块

from unittest import mock

  • 使用mock模拟函数返回
    from unittest import mock
    def test01():
        """
        test01函数并未实现,通过mock来模拟该函数的返回
        :return:
        """
        pass
    
    test01 = mock.Mock(return_value=100) 创建Mock对象, 作为Test01的实例方法
    print(test01()) 当调用test01方法时, 会返回定义Mock对象时指定的return_value值
    输出:100
    
  • 跟据不同传参返回不同的值
    from unittest import mock
    def test01():
        """
        根据传参模拟不同返回值
        :return:
        """
        pass
    
    def test02(data):
        mock_data={
            "demo01":"支付中",
            "demo02":"支付成功",
            "demo03":"支付失败"
        }
        return mock_data[data]
    test01 = mock.Mock(side_effect=test02)
    print(test01("demo02"))
    输出:支付成功
    
  • 函数传参个数检查
    from unittest import mock
    def test01(x,y,z):
        pass
    传参符合规范返回success,否则报错
    test01=mock.create_autospec(test01,return_value="success")
    print(test01(1,2,3))
    输出:success
    
  • @path.object()装饰器使用
    新建mymock.py
    def test01():
        print("啥也不干")
    
    
    新建demo01.py文件
    from unittest.mock import patch
    import mymock
    
    @patch.object(target=mymock,attribute="test01")
    def test02(mock_fun):
        """
        函数内调用模拟方法并返回模拟值
        demo01:类名称/模块名称
        "test01":被模拟的方法
        mock_fun:接收被模拟的函数
        """
        mock_fun.return_value={'status_code':'200'} 为mock对象设置返回值
        result = mymock.test01() 调用函数就相当于调用mock对象
        print(result)
    test02()
    输出:{'status_code':'200'}
    
  • 总结
    • mock还有很多自带方法,而且功能非常强大,但是对于我们测试工程师而言,掌握这几个mock方法,平时工作中就足够了。本篇文章仅介绍mock的常用方法,其他方法感兴趣的同学可以去看官方文档。
    • 官方文档地址:https://docs.python.org/3/library/unittest.mock.html
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值