#database_util.py
import pymysql
# 创建数据库连接
def database_connect():
conn = pymysql.connect(
user="root",
password="root",
host="localhost",
database="world",
port=3306
)
return conn
# 执行sql语句
def execute_sql(sql):
# 创建游标
conn = database_connect()
cs = conn.cursor()
# 执行sql
cs.execute(sql)
# 提取执行之后的值
value = cs.fetchall()
#关闭连接
cs.close()
conn.close()
return value
#assert_util.py
import jsonpath
from commons.database_util import execute_sql
def assert_validate(validate,res):
for key, value in validate.items():
if key == "codes":
assert_codes(value,res.status_code)
elif key == "equals":
assert_equals(value,res.json())
elif key == "contains":
assert_contains(value,res.text)
elif key == "databases":
db_contains(value,res.json())
else:
raise_assert_error("不支持的断言方式")
def raise_assert_error(msg):
raise AssertionError(msg)
# 状态码断言
def assert_codes(expected_value, actual_value):
if expected_value != actual_value:
raise_assert_error("codes断言失败:预期结果为"+str(expected_value)+",实际结果为"+str(actual_value)+"")
# equals断言
def assert_equals(expected_value, actual_value):
for key,value in expected_value.items():
value_list = jsonpath.jsonpath(actual_value,"$..%s"%key)
if value_list:
if value not in value_list:
raise_assert_error("equals断言失败:实际结果中"+str(key)+"不等于"+str(value)+"")
else:
raise_assert_error("equals断言失败:实际结果中不包含"+str(key)+"")
# contains断言
def assert_contains(expected_value, actual_value):
if str(expected_value) not in actual_value:
raise_assert_error("contains断言失败:实际结果不包含"+str(expected_value)+"")
# databases断言(不够完善,问题在于value_list和sql_result都是多个值的情况下无法进行断言,此处都假定查出来的为1个值)
def db_contains(expected_value, actual_value):
for key,sql in expected_value.items():
value_list = jsonpath.jsonpath(actual_value,"$..%s"%key)
print(value_list)
if value_list:
try:
sql_result = execute_sql(sql)
except:
raise_assert_error("databases断言失败:SQL查询异常,请检查SQL语句")
else:
if len(sql_result) == 0:
raise_assert_error("databases断言失败:SQL未查询到任何结果")
else:
#print(value_list[0])
#print(sql_result) # 数据库查询出来的是一个嵌套元组
if str(value_list[0]) not in str(sql_result[0][0]):
raise_assert_error("databases断言失败:预期结果"+str(sql_result[0][0])+",实际结果"+str(value_list[0])+"")
else:
raise_assert_error("databases断言失败:实际结果中不包含" + str(key) + "")
# yaml
-
story: 登录接口
title: 验证登录成功用例
request:
method: post
url: "?s=user/login"
params:
application: app
application_type: h5
data:
accounts: "xxxxx"
pwd: "xxxxx"
type: "xxxxxx"
extract:
token: '"token":"(.*?)"'
validate:
codes: 200
equals: {msg: 登录成功}
contains: data
databases: {code: "select IndepYear from country where Name = 'America'"}