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、