1 import unittest
2 import requests
3 import jsonpath
4 import time
5 import nnreport
6
7 def get_value(d,key,expr=False,more=False):
8 if expr:
9 jp = jsonpath.jsonpath(d,key)#获取json字符串里某个key的值,返回的是[]
10 else:
11 jp = jsonpath.jsonpath(d, '$..%s' % key) # 获取json字符串里某个key的值,返回的是[]
12
13 if jp:
14 if more:
15 return jp
16 else:
17 return jp[0]
18
19
20 class LiteMallBase(unittest.TestCase):
21 username = "admin123"
22 password = username
23 host = "http://127.0.0.1:8080"
24
25 def login(self):
26 '''登录'''
27 url = self.host + '/admin/auth/login'
28 data = {'username': self.username, 'password': self.password}
29 r = requests.get(url, json=data)
30 token = get_value(r.json(), 'token')
31 self.assertIsNotNone(token, msg='获取不到token值')
32 return token
33
34 def create_coupon(self, name, token, money):
35 '''建券'''
36 url = self.host + "/admin/coupon/create"
37
38 data = {"name": name, "desc": "优惠券111",
39 "total": "999", "discount": 100, "min": money,
40 "limit": 1, "type": 0, "status": 0, "goodsType": 0,
41 "goodsValue": [], "timeType": 0, "days": "10",
42 "startTime": None, "endTime": None}
43 headers = {'X-Litemall-Admin-Token': token}
44 r = requests.get(url, json=data, headers=headers)
45 cid = get_value(r.json(), 'id')
46 cname = get_value(r.json(), 'name')
47 errno = get_value(r.json(), 'errno')
48 self.assertEqual(errno, 0, msg='创建券失败%s' % errno)
49 self.assertEqual(name, cname, msg='创建券名和返回的不一致')
50 return cid
51
52 def index_data(self):
53 '''查询首页数据'''
54 url = self.host + '/wx/home/index'
55 r = requests.get(url)
56 errno = get_value(r.json(), 'errno')
57 self.assertEqual(errno, 0, msg="首页数据查询失败")
58 return r.json()
59
60 class CouponCreate(LiteMallBase):
61 def test_create_coupon(self):
62 '''建券测试'''
63 name = "自动化测试%s-优惠券" % int(time.time())
64 token = self.login()
65 cid = self.create_coupon(name,token,9999)
66 index_data = self.index_data()
67 coupon_ids = get_value(index_data,'$.data.couponList..id',True,True)
68 self.assertIn(cid,coupon_ids,msg='创建的券ID不存在,不存在的ID是%s'%cid)
69
70
71 suite = unittest.makeSuite(CouponCreate)
72 report = nnreport.BeautifulReport(suite)
73 report.report(description='建券测试报告',filename='建券测试报告.html')

python使用笔记29--代码驱动的更多相关文章

  1. python学习笔记29(python中堆的使用)

    堆(heap):优先队列的一种,使用优先队列能够以任意顺序增加对象,并且能在任意时间(可能在增加对象的同时)找到(也可能是移除)最小元素,比用于列表中min的方法要高效. Python中并没有独立的堆 ...

  2. iOS: 学习笔记, 用代码驱动自动布局实例(swift)

    iOS自动布局是设置iOS界面的利器.本实例展示了如何使用自动布局语言设置水平布局, 垂直布局1. 创建空白iOS项目(swift)2. 添加一个控制器类, 修改YYAppDelegate.swift ...

  3. iOS: 学习笔记, 用代码驱动自动布局实例

    iOS自动布局是设置iOS界面的利器. 本实例展示了如何使用自动布局语言设置水平布局, 垂直布局 1. 创建空白iOS项目 2. 添加一个控制器类, 修改YYAppDelegate.m文件 #impo ...

  4. python学习笔记比较全

    注:本笔记基于python2.6而编辑,尽量的偏向3.x的语法 Python的特色 1.简单 2.易学 3.免费.开源 4.高层语言: 封装内存管理等 5.可移植性: 程序如果避免使用依赖于系统的特性 ...

  5. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  6. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

  7. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  8. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  9. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

随机推荐

  1. 十一、.net core(.NET 6)搭建ElasticSearch(ES)系列之ElasticSearch、head-master、Kibana环境搭建

    搭建ElasticSearch+Kibana环境 前提条件:已经配置好JDK环境以及Nodejs环境.如果还未配置,请查看我的上一篇博客内容,有详细配置教程. 先下载ElasticSearch(以下文 ...

  2. GPU特征处理技术

    GPU特征处理技术 GPU和CPU有何不同? 现代片上系统(SoC)通常集成中央处理器(CPU)和图形处理器(GPU).设计不同,这可能更取决于处理的数据集的类型. CPU经过优化,可以一次对几块数据 ...

  3. MPC算法

    MPC算法 一.    引言 在工程技术方面,MPC全称可指Model Predictive Control模型预测控制(又称RHC, Receding Horizon  ). 模型预测控制算法 一种 ...

  4. C ++基本输入/输出

    C ++基本输入/输出 本文将学习如何使用cin对象从用户那里获取输入,并使用cout对象在示例的帮助下向用户显示输出. C ++输出 在C ++中,cout将格式化的输出发送到标准输出设备,例如屏幕 ...

  5. 八、Nginx的TCP/UDP调度器

    nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...

  6. 【NX二次开发】Block UI 双精度表

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  7. Mysql_SQLyog 数据库的创建

    1.创建数据库 CREATE DATABASE [IF NOT EXISTS] westos; 2.删除数据库 DROP DATABASE [IF EXISTS] westos; 3.使用数据库 -- ...

  8. 常用的16个Java实用工具类,Java开发人员请收藏!

    在Java中,实用程序类是一个定义一组执行常用功能的方法的类.这篇文章展示了最常用的Java实用程序类及其最常用的方法.类列表及其方法列表都按流行度排序.该数据基于GitHub随机选择的50,000个 ...

  9. NOIP模拟测试14「旋转子段·走格子·柱状图」

    旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...

  10. Binding(三):资源和ValueConverter

    这节讲资源和值转换器(ValueConverter). 资源 在XAML中,我们想要使用外部的数据或者类,需要引入其命名空间,然后将其定义为XAML页面的资源,供给控件使用,或者我们需要封装一个共用的 ...