目录
[1. 响应进行断言](#1. 响应进行断言)
[1.1 在yaml用例中写入断言内容](#1.1 在yaml用例中写入断言内容)
[1.2 封装断言方法](#1.2 封装断言方法)
[1.3 在执行流程中加入断言判断内容](#1.3 在执行流程中加入断言判断内容)
[2. 数据库数据断言](#2. 数据库数据断言)
[2.1 在yaml用例中写入断言内容](#2.1 在yaml用例中写入断言内容)
[2.2 连接数据库并封装执行sql的方法](#2.2 连接数据库并封装执行sql的方法)
[2.3 封装后校验方法是否可执行](#2.3 封装后校验方法是否可执行)
[2.4 使用之前封装的断言方法,加入数据库的case](#2.4 使用之前封装的断言方法,加入数据库的case)
1. 响应进行断言
1.1 在yaml用例中写入断言内容
python
validate:
equals: # 相等断言
断言状态码为200: [200,status_code] # [预期结果,实际结果]
contains: # 包含断言
断言响应结果包含access_token: [access_token,json]
1.2 封装断言方法
python
class AssertUtil:
def assert_all_case(self,res,assert_type,value):
# 深拷贝响应结果res
new_res = copy.deepcopy(res)
# 把json()方法变更为json属性,用于反射使用,如果无法获取到new_res.json()抛出异常
try:
new_res.json = new_res.json()
except Exception:
new_res.json = {"msg":'response not json data'}
# 循环判断断言
for msg,data in value.items(): # 这里的value值就是断言的value值
yq,sj = data[0],data[1] # 将预期值和实际值取出来
# 过反射获取属性的值
try:
sj_value = getattr(new_res,sj) # 将获取到的响应结果反射给sj
except Exception:
sj_value = sj
# 判断断言
match assert_type:
case "equals":
assert yq == sj_value,msg
case "contains":
assert yq in sj_value,msg
1.3 在执行流程中加入断言判断内容
python
def stand_case_flow(caseinfo):
# 读取yaml文件中的数据
case_obj = verify_yaml(caseinfo)
# 请求之后得到响应后判断是否需要断言,如果validate不为None,则需要断言
if case_obj.validate: # 这里可以将yaml中的validate内容取出来
for assert_type,value in ExtractUtil().use_extract_value(case_obj.validate).items():
AssertUtil().assert_all_case(res,assert_type,value)
else:
print("该用例没有涉及断言内容")
结果示例-断言失败
结果示例-断言成功
2. 数据库数据断言
2.1 在yaml用例中写入断言内容
python
validate:
db_contains: # 数据库包含断言
断言返回结果包含sql查询结果: ["SELECT email FROM pw_user WHERE uid = 1",text]
2.2 连接数据库并封装执行sql的方法
python
class AssertUtil:
# 连接数据库
def conn_mysql(self):
self.conn = pymysql.connect(
user="user",
password="pwd",
host="127.0.0.1",
database="sd",
port=3306
)
return self.conn
# 执行sql语句
def execute_sql(self,sql):
# 创建数据库链接
conn = self.conn_mysql()
# 创建游标
cs = conn.cursor()
# 执行SQL
cs.execute(sql)
# 取值
value = cs.fetchone()
# 关闭资源
cs.close()
conn.close()
# 返回值
return value
2.3 封装后校验方法是否可执行
python
if __name__ == "__main__":
a = AssertUtil().execute_sql("SELECT email FROM pw_user WHERE uid = 1")
print(a)
print(type(a))
执行结果
2.4 使用之前封装的断言方法,加入数据库的case
python
def assert_all_case(self,res,assert_type,value):
# 深拷贝响应结果res
new_res = copy.deepcopy(res)
# 把json()方法变更为json属性,用于反射使用,如果无法获取到new_res.json()抛出异常
try:
new_res.json = new_res.json()
except Exception:
new_res.json = {"msg":'response not json data'}
# 循环判断断言
for msg,data in value.items():
yq,sj = data[0],data[1] # 将预期值和实际值取出来
# 过反射获取属性的值
try:
sj_value = getattr(new_res,sj)
except Exception:
sj_value = sj
# 判断断言
match assert_type:
case "equals":
assert yq == sj_value,msg
case "contains":
assert yq in sj_value,msg
case "db_contains":
yq_value = self.execute_sql(yq) # 将预期值的sql写入执行sql的方法中,获取结果
assert yq_value[0] in sj_value, msg # 注意这里的yq_value获取到的是tuple,需要通过下标取值str
结果示例-断言失败