设为首页 加入收藏

TOP

Python接口自动化之mock模块基本使用(一)
2019-09-03 03:39:39 】 浏览:35
Tags:Python 接口 自动化 mock 模块 基本 使用

mock简介


python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装


Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西


准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为


既然mock已经被整合到了unittest单元测试框架中,可想而知mock的目的就是为了让我们更好的进行测试


mock作用


1. 解决依赖问题:当我们测试一个接口或者功能模块的时候,如果这个接口或者功能模块依赖其他接口或其他模块,那么如果所依赖的接口或功能模块未开发完毕,那么我们就可以


使用mock模拟被依赖接口,完成目标接口的测试


2. 单元测试:如果某个功能未开发完成,我们又要进行测试用例的代码编写,我们也可以先模拟这个功能进行测试


3. 模拟复杂业务的接口:实际工作中如果我们在测试一个接口功能时,如果这个接口依赖一个非常复杂的接口业务,那么我们完全可以使用mock来模拟这个复杂的业务接口,其实


这个和解决接口依赖是一样的原理


4.前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,是不是你


就停止这部分工作呢?答案是否定的,你完全可以借助mock来模拟后台这个接口返回你想要的数据


mock安装


python 3 的mock模块已经被整合到了unittest框架中,所以你使用的时候只需要在文件开头from unittest import mock 导入即可


如果你使用的是python2 那么你需要执行pip install mock安装后再 import mock即可


mock实例


一个未开发完成的功能如何测试?


假如们现在有一个实现两个数相加的功能需要编写测试用例,但是由于开发进度缓慢,只搭两个简单的框架,并没有内部实现


 


"""
------------------------------------
@Time : 2019/6/26 14:09
@Auth : linux超
@File : ClassFunc.py
@IDE  : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import unittest
from unittest import mock



class SubClass(object):
    def add(self, a, b):
        """两个数相加"""
        pass


class TestSub(unittest.TestCase):
  """测试两个数相加用例"""
    def test_sub(self):
        sub = SubClass()  # 初始化被测函数类实例
        sub.add = mock.Mock(return_value=10)  # mock add方法 返回10
        result = sub.add(5, 5)  # 调用被测函数
        self.assertEqual(result, 10)  # 断言实际结果和预期结果



if __name__ == '__main__':
    unittest.main()


 


测试结果


 


.
----------------------------------------------------------------------
Ran 1 test in 0.000s


OK


Process finished with exit code


 


测试结果显示,测试用例执行已经通过


实际上mock模拟add方法的原理是 使用相同的对象方法接收mock的对象(使用sub.add接收),那么当mock对象被调用时(sub.add())就会返回return_value参数对应的数据


这样一来,表面看起来就是模拟了add方法(这里只是我个人理解,不对请忽略)


你可以做一个实验,把用例中的add改成别的名字也一样可以测试通过


ok,继续


我们用例编写完了,而且开发既然也把功能开发完了(要骂街吗?),既然真实的功能已经可以测试了,那么我们怎么在上面用例的基础上直接测试真实功能呢?


完整的功能如何测试?


我们把用例的代码稍做修改


 


"""
------------------------------------
@Time : 2019/6/26 14:09
@Auth : linux超
@File : ClassFunc.py
@IDE  : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import unittest
from unittest import mock



class SubClass(object):
    def add(self, a, b):
        """两个数相加"""
        return a + b


class TestSub(unittest.TestCase):
    """测试两个数相加"""
    def test_sub(self):
        sub = SubClass()  # 初始化被测函数类实例
        sub.add = mock.Mock(return_value=10, side_effect=sub.add)  # 传递side_effect关键字参数, 会覆盖return_value参数值, 使用真实的add方法测试
        result = sub.add(5, 11)  # 真正的调用被测函数
        self.assertEqua
Python接口自动化之mock模块基本使用(一) https://www.cppentry.com/bencandy.php?fid=54&id=249466

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python内置装饰器@property 下一篇CUDA编程之快速入门