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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性