iAPI项目实现接口调试和接口用例保存,接口列表查询功能。
技术栈 python+flask+Vue
项目地址:
git clone -b api https://github.com/five3/python-sdet.git
用例保存
http_save()实现用例保存,如果请求方法为get,则查询用例。请求方法不是get,则保存用例
用力的数据来自request.json,即请求接口的数据。
def http_save():
"""
用例保存、用例信息获取处理函数
"""
if request.method == 'GET':
ret = get_api(request.args.get('id', 0))
else:
ret = save_api(request.json)
print(request.json)
return jsonify({
"code": 0,
"success": True,
"data": ret,
"msg": None
})
def save_api(data):
if data.get('id'):
sql = '''update http_api set name=:name, url=:url, method=:method, body=:body, headers=:headers, fileList=:fileList, validate=:validate, express=:express where id=:id'''
else:
sql = '''insert into http_api (name, url, method, body, headers, fileList, validate, express) values (:name, :url, :method, :body, :headers, :fileList, :validate, :express)'''
data['fileList'] = json.dumps(data['fileList'])
get_db().query(sql, **data)
用例调试
http_debug()函数,获取请求数据,调用HTTPRequest处理,并返回response。
def http_debug():
"""用例调试处理函数"""
hr = HTTPRequest(request.json)
hr.do_request()
hr.validate()
return jsonify({
"code": 0,
"data": {
"result": hr.result,
"log": hr.log
},
"msg": ""
})
用例列表
http_list()接口返回用例列表,其中get_api_list方法,获取请求参数,pagesize和pagenum信息,返回查询到的列表数据。
def http_list():
"""
用例列表查询处理函数
"""
return {
"code": 0,
"success": True,
"data": get_api_list(request.args),
"msg": None
}
用例运行
http_run()接口获取用例数据,并返回运行结果。
并且每运行一次接口,就会向接口运行日志数据库插入一条数据。
def http_run(aid):
"""
用例运行处理函数
"""
row = get_api(aid)
print(row)
hr = HTTPRequest(row)
hr.do_request()
hr.validate()
api_log(aid, hr.result, hr.log)
return jsonify({
"code": 0,
"data": {
"result": hr.result,
"log": hr.log
},
"msg": ""
})
用例日志
http_api_log()返回用例日志查询响应结果。
可以看到,每个接口返回的是json格式的结果,而返回的数据是由对于方法处理的。
def http_api_log(aid):
"""
用例日志查询处理函数
"""
ret = get_log_by_api_id(aid)
return jsonify({"code": 0, "data": ret, "msg": ""})
根据id查询数据库,并返回查询到的结果。
def get_log_by_api_id(aid):
sql = '''select content from http_api_log where api_id=:id order by id desc limit 1'''
row = get_db().query(sql, id=aid).first(as_dict=True)
return row['content'] if row else '["没有查找到用例日志"]'
日志列表接口
http_log_list()返回日志列表
@log_context()
def http_log_list():
"""
用例日志查询处理函数
"""
return get_log_list()
def get_log_list():
data = request.args
page = int(data.get('pageNum', 1))
size = int(data.get('pageSize', 10))
cond = warp_query(data)
sql = f'''select b.*, a.name, a.url, a.method from http_api a, http_api_log b where a.id=b.api_id {cond} order by b.id desc'''
conn = get_db()
rows, total = query_with_pagination(conn, sql, param=data, page=page, size=size)
数据库对接
get_db()接收数据库连接信息,返回db。
def get_db():
"""数据库连接信息"""
conn_info = {'db_host': 'localhost',
'db_name': 'iapi',
'db_user': 'root',
'db_passwd': 'root'}
return DBPool.get_conn(**conn_info)
mysql+pymysql://root:root@localhost:3306/iapi?charset=utf8
get_db().query(sql, **data)调用records库的query执行数据库查询操作。
详细内容见《Python测试开发入门与实践》6.4