unittest单元测试之mock

1、什么是mock?
unittest.mock 是python单元测试的库,mock译文是模拟的意义,顾名思义它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。

学过python自动化的对unittest并不陌生,unittest其实是单元测试框架,
但对于单元测试,估计很多小伙伴都不懂,单元测试才是自动化测试的至高境界,其中mock是单元测试的脊髓所在。

mock能做什么:
1.前后端联调,如果你是一个前端页面开发,现在需要开发一个功能:
下一个订单,支付页面的接口,根据支付结果,支付成功,展示支付成功页,支付失败,展示支付失败页。
要完成此功能,你需要调用后端的接口,根据返回给你的结果,来展示不同的页面。此时后端接口还没开发好,
作为一个前端开发总不能等别人开发好了,你再开发,那你只有加班的命了。
为了同步开发完成任务,此时,你可以根据接口文档的规定,把接口的地址和入参传过去,然后自己mock接口的不同返回界面,来完成前端的开发任务

2.单元测试,单元测试的目的是测试某个小小单元的功能,但现实中开发的函数或方法都是有依赖关系的,比如b函数的参数,需要调用a函数的返回结果,但是我前面已经测试a函数了
这种情况下,就不需要再测一次a函数了,此时就可以用mock模块来模拟调用这部分内容,并给出返回结果

3.第三方接口依赖,在做接口自动化的时候,有时候需要调用第三方的接口,但是别人公司的接口服务不受你的控制,有可能别人提供的测试环境今天服务给你开着,别人就关掉了,
给自动化接口测试带来很多的麻烦,此时就可以自己写一个mock-server来模拟接口的返回数据

2、安装环境

 pip install -U  mock

3、练习

#tag.py

class P(object):
	def payment():
	    '''假设这里是一个支付的功能,未开发完
	    支付成功返回:{"code": "000000", "msg":"支付成功"}
	    支付失败返回:{"code": "999999", "msg":系统错误"}
	    支付失败返回:{"code": "123456", "msg":余额不足"}
	
	    nsg返回失败原因
	    '''
	    pass
	
	def payment_statue():
	    '''根据支付的结果code,判断跳转到对应页面'''
	    result = zhifu()
	    print(result)
	    try:
	        if result["code"] == "000000":
	            return result["msg"]
	        elif result["code"] == "123456":
	            return result["msg"]
	        elif result["code"] == "999999":
	            return result["msg"]
	    except:
	        return "Error, 服务端返回异常!"```

from unittest import mock
import unittest,tag
class Test_payment_statues(unittest.TestCase):
    '''单元测试用例'''
    @classmethod
    def setUpClass(cls):
    	cls.p=tag.P()    
    def test_sucess(self):
        '''测试支付成功场景'''
        # mock一个支付成功的数据
        tag.payment= mock.Mock(return_value={"code": "000000", "msg":"支付成功"})
        # 根据支付结果测试页面跳转
        statue = self.p.payment_statue()
        self.assertEqual(statues, "支付成功")

    def test_fail(self):
        '''测试支付失败场景'''
        # mock一个支付成功的数据
        tag.payment= mock.Mock(return_value={"code": "123456", "msg": "余额不足"})
        # 根据支付结果测试页面跳转
        statue = self.p.payment_statue()
        self.assertEqual(statues, "支付失败")
    
     def test_system_error(self):
        '''测试支付错误场景'''
       # mock一个支付成功的数据
        tag.payment= mock.Mock(return_value={"code": "999999", "msg": "系统错误"})
        # 根据支付结果测试页面跳转
        statue = self.p.payment_statue()
        self.assertEqual(statues, "系统错误")
     def test_system_error(self):
        '''测试支付异常场景'''
       # mock一个支付成功的数据
       tag.payment= mock.Mock(return_value={"code": " ", "msg": ""})
       # 根据支付结果测试页面跳转
       statue = self.p.payment_statue()
       self.assertEqual(statue, "Error, 服务端返回异常!")
if __name__ == "__main__":
    unittest.main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值