前端接口服务器的文字性整理,方便写单元测试
来源:互联网 发布:平价化妆水知乎 编辑:程序博客网 时间:2024/06/13 01:38
表:
销售,产品种类,产品,补货表,用户操作行为表,售货机关系表,售货机表(没有了商户和补货人员的外键),
1、handle时,
微信:
post:
token(含售货机id),payType订单支付类型,changeType,logtext,sainfors订单信息,totalPrice订单总金额,
保存:
订单编号,订单开始时间,订单信息,订单总金额,订单支付类型,订单支付时间(需轮询时更新),订单结束时间(订单完成时更新),售货机id,订单备注。
没保存:
订单支付状态,订单状态SaState(订单完成时更新),订单支付流水号,订单支付金额,
发给支付服务器:
订单编号,订单信息,订单总金额,订单支付类型,售货机id,
返回更新:
只返回二维码
现金:
post:
token,payType,changeType,logtext,sainfors('{"salists": [{"proid": 22, "name": "果粒橙", "count": 2, "sinPrice": 1.5, "toPrice": 3}], "nums": 2}'),totalPrice,
保存:
订单编号,订单开始时间,订单信息,订单总金额,订单支付类型,订单支付时间,订单结束时间,售货机id,订单备注。
订单支付状态,订单状态,订单支付流水号,订单支付金额,
发给现金服务器:
全发走了。
返回更新:
saNote
写测试:
得生成vendings
得生成productions
得生成vendingpro(ven_id=vendings)
Android App:thinks----submit():提交订单;----->调用DownLoadEventNotifier中的start():上传订单,下载前端服务器上的信息
back = EntityUtils.toString(response.getEntity(), "utf-8");---->看是否是二维码handler.sendMessage(msg);,----->如果是二维码,dif.onDownloadSuccess(back);---> checkdate(String tradeNum){//检查支付状态----> switch(msg.what)得知用户是付款成功与否。
2、checkstate支付轮询:
post:
token,tradeNum订单编号,
发给支付服务器的:
tradeNum订单编号,
返回更新:
若成功:
订单支付时间,订单支付流水号,订单支付金额,订单支付状态,订单状态(0,正在支付中),
若不成功:
订单支付状态,订单状态(3,订单异常)
3、vencan_goods订单完成时间:
post:
token,tradeNum订单编号,sastatus支付类型,sanote订单备注,
发给支付服务器:
订单表的所有属性
返回更新:
SaState订单状态(2,订单正常结束),订单结束时间,
4、cancel_order取消订单:
post:
token,tradeNum订单编号,
前端接口自己修改:
订单状态,4用户取消订单。
发给支付服务器:
订单编号,
返回值:
5、产品种类的增加:
POST:
pro(pcId,pcName),
6、产品种类的修改:
POST:
pro,
7、产品种类的删除:
post:
pro,
8、产品种类成组删除:
POST:
lists('[{'pro':'{"pcId":1,"pcname":"水"}'},{'pro':'{"pcId":2,"pcname":"茶"}'}]'),
9、售货机的初始化:
POST:
token,initialize(初始化),
二、单元测试知识:
from django.test import TestCasefrom myapp.models import Animal# Django的单元测试基于unittest库class StudentTestCase(TestCase): # 测试函数执行前执行 def setUp(self): print("======in setUp") # 需要测试的内容 def test_add(self): student = Student(name='aaa') student.save() self.assertEqual(student.name, 'aaa') # 需要测试的内容 def test_check_exit(self): self.assertEqual(0, Student.objects.count()) # 测试函数执行后执行 def tearDown(self): print("======in tearDown")作者:Ljian1992链接:http://www.jianshu.com/p/34267dd79ad6來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于django的单元测试,需要知道的是:
对于每一个测试方法都会将setUp()和tearDown()方法执行一遍
会单独新建一个测试数据库来进行数据库的操作方面的测试,默认在测试完成后销毁。
在测试方法中对数据库进行增删操作,最后都会被清除。也就是说,在test_add中插入的数据,在test_add测试结束后插入的数据会被清除。
django单元测试时为了模拟生产环境,会修改settings中的变量,例如, 把DEBUG变量修改为True, 把ALLOWED_HOSTS修改为[*]。
三、运行单元测试:
在单元测试中,可以指定测试粒度。这样可以专注于只测试还没测试的单元测试,而已经测试过的就不测试了。
# 测试整一个工程$ ./manage.py test # 只测试某个应用$ ./manage.py test app --keepdb# 只测试一个Case$ ./manage.py test animals.tests.StudentTestCase# 只测试一个方法$ ./manage.py test animals.tests.StudentTestCase.test_add
四、
一些常见问题的解决
数据表多时创建数据库销毁过多时间
指定测试数据库的默认字符集
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xxxx', 'USER': 'xxxx', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'charset': 'utf8mb4', 'init_command': 'SET default_storage_engine=INNODB', }, 'TEST_CHARSET': 'utf8', 'TEST_COLLATION': 'utf8_general_ci', },}
settings变量的修改
若干需要在单元测试时修改,setting命令。例如,django在单元测试时会将settings.DEBUG 设置为True, 而我们需要将其设置为False
方式1: 直接在修改
class BaseApiTest(TestCase): def setUp(self): #testcase DEBUG = False settings.DEBUG = False def test_b(self): self.assertEqual(2, 1+1) def tearDown(self): pass
from django.test.utils import override_settingsclass BaseTest(TestCase): def setUp(self): pass # 利用该装饰器,可以在但个测试函数内修改settings变量, 而不影响 @override_settings(DEBUG=False) def test_b(self): self.assertEqual(2, 1+1) def tearDown(self): pass
API权限问题的解决
在测试API的时候,往往需要等等进行用户登录才有权限调用,此时需要指定登录用户来解决接口调用的权限问题# 如果是API使用了rest_framework框架from rest_framework.test import APIClientclass BaseTest(TestCase): def setUp(self): # 创建一个用户 self.user = create_user(uuid4().hex, '123456789') self.client = APIClient() # 通过force_authenticate函数来执行用户 self.client.force_authenticate(self.user) def test_b(self): self.assertEqual(2, 1+1) def tearDown(self): pass
Celery异步任务的测试
在代码中几乎肯定是会有celery异步任务,若想对异步任务进行单元测试。可以将CELERY_ALWAYS_EAGER=True, BROKER_BACKEND='memorfrom xxx.celery import app@app.task(bind=True)def add(self,x, y): return x + yclass TaskTest(TestCase): def setUp(self): settings.CELERY_ALWAYS_EAGER = True def test_add(self): self.assertEqual(2, add.apply_async((1,1))) def tearDown(self): pass
单元的等级(来自知乎的gashero)
在知乎上看到gashero根据经验总结出来的单元测试总结,非常认同。根据功能的重要性,来进行不同程度的测试。Level1:正常流程可用,即一个函数在输入正确的参数时,会有正确的输出 Level2:异常流程可抛出逻辑异常,即输入参数有误时,不能抛出系统异常,而是用自己定义的逻辑异常通知上层调用代码其错误之处 Level3:极端情况和边界数据可用,对输入参数的边界情况也要单独测试,确保输出是正确有效的 Level4:所有分支、循环的逻辑走通,不能有任何流程是测试不到的 Level5:输出数据的所有字段验证,对有复杂数据结构的输出,确保每个字段都是正确的地方
- 前端接口服务器的文字性整理,方便写单元测试
- APP开发实战176-服务器接口的单元测试
- 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用
- Android Studio 写个单元测试用例,就是这么方便
- go 为方便单元测试的函数
- 服务器写接口
- 有效的写单元测试
- 写单元测试的好处
- 写单元测试的好处
- 写单元测试的感悟
- 文字接口联机服务器:ssh服务器
- 写博客--用文字整理生命
- 公共免费开发接口地址 ---自己整理方便使用
- op方便快速写出优雅的前端
- 前端单元测试
- 整理一下方便用的类库
- 离散的知识点,方便以后整理
- 博客,提高班学生成长的秘籍-“写东西就是用文字整理你的生命”
- 31-字符串经典问题
- printf函数注意事项
- wxPython之模拟带有验证码的登录
- 【51Nod1288】汽油补给
- 利用java计算长方形的面积
- 前端接口服务器的文字性整理,方便写单元测试
- hibernate多对一映射报错
- webpack获取图片的真实路径
- java 爬取彩票开奖信息,爬取双色球历史开奖,爬取大乐透历史开奖
- 近日总结
- 优秀博文推荐:源码篇
- dfs序 树状数组--hdu5927 Auxiliary Set
- 类和对象
- 【深度学习】优化方法