1 # --*-- coding: utf-8 --*--
  2 import requests
  3 import inspect
  4 from time import time
  5 from common.yaml_handler import get_yaml_data
  6 from common.log_handler import log
  7 from common.sign_handler import get_sign
  8 from configs.global_data import Env
  9 from common.mysql_handler import MysqlHandler
 10 
 11 
 12 class RespAssert:
 13     """响应断言"""
 14 
 15     @classmethod
 16     def response_assert(cls, title, response, expdata):
 17         """
 18         接口响应断言基类方法
 19         :param title: 用例标题
 20         :param response: 响应结果
 21         :param expdata: 预期结果
 22         :return:
 23         """
 24         try:
 25             assert response["status"] == expdata["status"]
 26             assert response["message"] == expdata["message"]
 27         except Exception as e:
 28             log.error('用例---【{}】---断言失败'.format(title))
 29             log.error('期望结果是:{}'.format(expdata))
 30             log.error('实际结果是:{{"status":{}, “message”:{}}}'.format(response["status"], response["message"]))
 31             log.error('响应结果是:{}'.format(response))
 32             raise e
 33         else:
 34             log.info("用例---【{}】---断言成功".format(title))
 35 
 36     @classmethod
 37     def check_sql_is_exist(cls, sql):
 38         """
 39         检验数据库数据存在
 40         :param sql: sql语句
 41         :return:
 42         """
 43         try:
 44             # 调用数据库方法判断sql是否能查询到
 45             db_res = MysqlHandler().is_exist(sql)
 46             # 能查询结果为真
 47             assert db_res is True
 48             log.info("数据库校验成功")
 49         except Exception as e:
 50             log.exception("数据库校验失败")
 51             log.error("执行的sql是:{}".format(sql))
 52             raise e
 53 
 54     @classmethod
 55     def check_sql_not_exits(cls, sql):
 56         """
 57         校验数据库数据不存在
 58         :param sql: sql语句
 59         :return:
 60         """
 61         try:
 62             # 查询全部数据
 63             db_res = MysqlHandler().fetchall(sql)
 64             # 不能查询结果为空元组
 65             assert db_res == ()
 66             log.info("数据库校验成功")
 67         except Exception as e:
 68             log.exception("数据库校验失败")
 69             log.error("执行的sql是:{}".format(sql))
 70             raise e
 71 
 72 
 73 class BaseApi:
 74     """接口请求基类"""
 75 
 76     def __init__(self):
 77         # 获取调用者的类名
 78         self.data = get_yaml_data()[self.__class__.__name__]
 79 
 80     @classmethod
 81     def prev_data(cls, body, token=False):
 82         """
 83         请求参数预处理
 84         :param body: 接口参数
 85         :param token: 接口参数
 86         :return:
 87         """
 88         # 替换请求时间戳
 89         body["timestamp"] = int(time())
 90         # 判断token
 91         if token:
 92             # 替换token,值是传入的token值
 93             body["token"] = token
 94             # 调用签名方法计算sign值
 95         sign = get_sign(body)
 96         # 动态替换sign值
 97         body["sign"] = sign
 98         return body
 99 
100     def send_request(self, body, title):
101         """
102         发送接口请求
103         :return:
104         """
105         try:
106             # 获取调用者的函数名
107             func_name = inspect.stack()[1][3]
108             # 将方法名作为键取yaml文件节点数据
109             path, method = self.data[func_name].values()
110             # 发送接口请求获取响应数据
111             BaseApi.url = Env.base_url + path
112             BaseApi.method = method
113             resp = requests.request(method=method, url=BaseApi.url, json=body)
114             log.info("用例---【{}】---测试成功".format(title))
115             return resp.json()
116         except Exception as e:
117             log.error("用例---【{}】---测试失败".format(title))
118             log.error("用例---【{}】---请求方法是:{}".format(title, BaseApi.method))
119             log.error("用例---【{}】---请求URL是:{}".format(title, BaseApi.url))
120             log.error("用例---【{}】---请求参数是:{}".format(title, body))
121             raise e
122 
123     def add(self, title, body, token):
124         """
125         新增接口
126         :param body: 请求体参数
127         :param token: 登录后提取的token
128         :param title: 用例标题
129         :return:
130         """
131         # ------------1、请求参数预处理-----------------
132         body = self.prev_data(body=body, token=token)
133         # ---------------2、发送接口请求,返回响应数据-------------
134         return self.send_request(body=body, title=title)
135 
136     def query(self, title, body, token):
137         """
138         查询单个
139         :param title:用例标题
140         :param body:请求体参数
141         :param token:用户登录后提取的token
142         :return:
143         """
144         # ---------------1、接口请求参数预处理----------------
145         body = self.prev_data(body=body, token=token)
146         # ---------------2、发送接口请求,返回响应数据-------------
147         return self.send_request(body=body, title=title)
148 
149     def query_list(self, title, body, token):
150         """
151         查询列表
152         :param title:用例标题
153         :param body:请求体参数
154         :param token:用户登录后提取的token
155         :return:
156         """
157         # ---------------1、接口请求参数预处理----------------
158         body = self.prev_data(body=body, token=token)
159         # ---------------2、发送接口请求,返回响应数据-------------
160         return self.send_request(body=body, title=title)
161 
162     def update(self, title, body, token):
163         """
164         更新接口
165         :param title:用例标题
166         :param body:请求体参数
167         :param token:用户登录后提取的token
168         :return:
169         """
170         # ---------------1、接口请求参数预处理----------------
171         body = self.prev_data(body=body, token=token)
172         # ---------------2、发送接口请求,返回响应数据-------------
173         return self.send_request(body=body, title=title)
174 
175     def delete(self, title, body, token):
176         """
177         删除接口
178         :param title:用例标题
179         :param body:请求体参数
180         :param token:用户登录后提取的token
181         :return:
182         """
183         # ---------------1、接口请求参数预处理----------------
184         body = self.prev_data(body=body, token=token)
185         # ---------------2、发送接口请求,返回响应数据-------------
186         return self.send_request(body=body, title=title)
187 
188     def get_data_by_element(self, title, body, token):
189         """
190         根据xx元素获取数据
191         :param title:用例标题
192         :param body:请求体参数
193         :param token:登录后的token
194         :return:
195         """
196         # ---------------1、接口请求参数预处理----------------
197         self.prev_data(body=body, token=token)
198         # ---------------2、发送接口请求,返回响应数据-------------
199         return self.send_request(body=body, title=title)

 1 # ----------------------------接口参数之yaml配置------------------------------------------------------
 2 # >>>>>>>>>>>>>>>>>>>>>>>>前后台登录模块>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 3 Login: # 登录模块
 4   user_login: # 前台登录接口
 5     path: /api/v1/user/method/login.user.password
 6     method: post
 7   admin_login: # 后台登录接口
 8     path: /api/v1/admin
 9     method: post
10 # >>>>>>>>>>>>>>>>>>>>>>>>后台帮助模块>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
11 Help: # 帮助文档   -------------------》》》》》》》》》》》》》》》注意:接口模块名称要与业务libs目录的类名保持一致【具体看下面的libs业务处理目录】
12   add: # 添加帮助文档接口  -------------》》》》》》》》》》》》》》》注意,接口名称要与业务层libs目录的方法名一致
13     path:  /api/v1/help
14     method: post
15   update: # 编辑帮助文档接口
16     path: /api/v1/help/method/set.help.item
17     method: post
18   query_list: # 获取帮助文档列表接口
19     path: /api/v1/help/method/get.help.list
20     method: post
21   get_data_by_element: # 根据路由获取帮助文档接口
22     path: /api/v1/help/method/get.help.router
23     method: post
24   delete: # 删除帮助文档接口
25     path: /api/v1/help/method/del.help.list
26     method: post

 



 

# >>>>>>>>>>>>>>>>>>>>>>>>前后台登录模块>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Login: # 登录模块
user_login: # 前台登录接口
path: /api/v1/user/method/login.user.password
method: post
admin_login: # 后台登录接口
path: /api/v1/admin
method: post
# >>>>>>>>>>>>>>>>>>>>>>>>后台帮助模块>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Help: # 帮助文档
add: # 添加帮助文档接口
path: /api/v1/help
method: post
update: # 编辑帮助文档接口
path: /api/v1/help/method/set.help.item
method: post
query_list: # 获取帮助文档列表接口
path: /api/v1/help/method/get.help.list
method: post
get_data_by_element: # 根据路由获取帮助文档接口
path: /api/v1/help/method/get.help.router
method: post
delete: # 删除帮助文档接口
path: /api/v1/help/method/del.help.list
method: post

原文地址:http://www.cnblogs.com/Nichs/p/16799579.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性