目录
common
assert_util.py
import jsonpath
from common import database_util
import pymysql
import logging
logger = logging.getLogger(__name__)
def assert_result(expect_result, actual_result):
for k, v in expect_result.items():
# 状态断言
if k == 'code':
assert_code(v, actual_result.status_code)
# 相等断言
elif k == "equal":
assert_equal(v, actual_result.json())
# 包含断言
elif k == "contain":
assert_contain(v, actual_result.text)
# 数据库断言
elif k == "database":
assert_database(v["expect_query_result"], v["sql"])
else:
print("不支持的断言方式")
def assert_code(expect, actual):
if actual != expect:
raise_assert_error("状态断言异常:预期{},实际{}".format(expect, actual))
def assert_equal(expect, actual):
for k, v in expect.items():
list_result = jsonpath.jsonpath(actual, f"$..{k}")
if list_result:
if v not in list_result:
raise_assert_error("相等断言异常:{}预期{},实际{}".format(k, v, *list_result))
else:
raise_assert_error("相等断言异常:{}预期{},实际{}".format(k, v, "未找到该字段"))
def assert_contain(expect, actual):
if str(expect) not in actual:
raise_assert_error(f"包含断言异常:预期包含{expect},实际未包含")
def assert_database(expect_query_result, sql):
try:
select_result = database_util.link_database(sql=sql)
except pymysql.err.ProgrammingError:
raise_assert_error("sql语法有误!")
else:
if select_result:
if expect_query_result not in select_result[0]:
raise_assert_error("数据库断言异常:sql预期{},实际{}".format(expect_query_result, select_result))
else:
raise_assert_error("数据库断言异常:sql结果查询为空")
def raise_assert_error(msg):
logger.error(msg)
logger.info("----------测试用例请求结束-----------\n")
raise AssertionError(msg)
database_util.py
import pymysql
def link_database(user="root",
password="123",
host="127.0.0.1",
port=3306,
sql=""):
conn = pymysql.connect(
user=user,
password=password,
host=host,
port=port,
autocommit=True
)
cursor = conn.cursor()
cursor.execute(sql)
result = cursor.fetchall()
cursor.close()