python mock使用场景(结合flask框架-mock需要加深理解

1、flask框架 简单举例

也可以用Tornado框架实现接口调用

# -*- coding: utf-8 -*-
# __author__ = 'lusn'
import flask
import json
from flask import request

'''
flask: web框架,通过flask提供的装饰器@server.route()将普通函数转换为服务
'''
# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)


# @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
@server.route('/login', methods=['get', 'post'])
def login():
    # 获取通过url请求传参的数据
    username = request.values.get('name')
    # 获取url请求传的密码,明文
    pwd = request.values.get('pwd')
    # 判断用户名、密码都不为空
    if username and pwd:
        if username == 'xiaoming' and pwd == '111':
            resu = {'code': 200, 'message': '登录成功'}
            return json.dumps(resu, ensure_ascii=False)  # 将字典转换字符串
        else:
            resu = {'code': -1, 'message': '账号密码错误'}
            return json.dumps(resu, ensure_ascii=False)
    else:
        resu = {'code': 10001, 'message': '参数不能为空!'}
        return json.dumps(resu, ensure_ascii=False)


if __name__ == '__main__':
    server.run(debug=True, port=8888, host='127.0.0.1')

2、mock使用场景

https://www.cnblogs.com/hester/p/12121617.html

使用场景之一:
1、mock一个未开发完的接口
2、mock依赖的数据
3、装饰器@patch:https://zhuanlan.zhihu.com/p/387903587
@patch("module名字.方法名")
@patch.object(类名, "方法名")

temp.py
def zhifu():
    '''假设这里是一个支付的功能,【未开发完】。
    支付成功返回:{"result": "success", "reason":"null"}
    支付失败返回:{"result": "fail", "reason":"余额不足"}
    reason返回失败原因
    '''
    pass

def zhifu_statues():
    '''
    调用zhifu 依赖接口未开发完
    根据支付的结果success or fail,判断跳转到对应页面'''
    result = zhifu()
    print("支付结果:",result)
    try:
        if result["result"] == "success":
            return "支付成功"
        elif result["result"] == "fail":
            print("失败原因:%s" % result["reason"])
            return "支付失败"
        else:
            return "未知错误异常"
    except:
        return "Error, 服务端返回异常!"


单元测试:
from unittest import mock
import unittest
import ttemp as temple

class Test_zhifu_statues(unittest.TestCase):
    '''单元测试用例 zhifu_status'''

    def test_01(self):
        '''测试支付成功场景'''
        # mock一个支付成功的数据
        temple.zhifu = mock.Mock(return_value={"result": "success", "reason": "null"})
        # 根据支付结果测试页面跳转
        statues = temple.zhifu_statues()
        print('success:',statues)
        self.assertEqual(statues, "支付成功")

    def test_02(self):
        '''测试支付失败场景'''
        # mock一个支付成功的数据
        temple.zhifu = mock.Mock(return_value={"result": "fail", "reason": "余额不足"})
        # 根据支付结果测试页面跳转
        statues = temple.zhifu_statues()
        self.assertEqual(statues, "支付失败")


if __name__ == "__main__":
    unittest.main()
===========================================================================
2、
temp.py
import datetime
class DateTimeHelper(object):
    """ A class which provides some convenient date/time
    conversion and utility methods """

    def today(self):
        """ Return today's datetime """
        return datetime.datetime.now()

    def date(self):
        """ Return today's date in the form of DD/MM/YYYY """
        return self.today().strftime("%d/%m/%Y")

if __name__ == "__main__":
    print(DateTimeHelper().today())
    print(DateTimeHelper().date())


import unittest
import datetime
import ttemp
from unittest.mock import patch

class DateTimeHelperTestCase(unittest.TestCase):
    """ Unit-test testcase class for DateTimeHelper class """

    def setUp(self):
        self.obj = ttemp.DateTimeHelper()

    def test_date(self):
        """ Test date() method """
        # Put a specific date to test
        my_date = datetime.datetime(year=2016, month=8, day=16)
        # Patch the 'today' method with a specific return value
        with patch.object(self.obj, 'today', return_value=my_date):
            response = self.obj.date()
            print('today-mock:',response)
            # self.assertEqual(response, '16/08/2016')
if __name__ == "__main__":
    unittest.main()

3、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值