4.8 后置sql
原理
发送请求之后,执行SQL,并把结果加入到参数池中
存在${}
语法将处理后再去执行SQL语句
前置处理
使用变量
来源: 响应提取
,后置SQL结果
使用$变量名
的方式来引用变量
使用函数
来源:tools/hooks.py
定义的函数
调用无参方法:${方法名()}
调用有参方法:${方法名(参数)}
经过上面两道工序处理之后,返回sql
,再执行。
test_main.py
...
def test_start(case, get_db): # 只使用数据库操作
"""
测试启动方法, 当需要使用 数据清洗和 数据库操作命令时将 get_db 换成 clear_db
如只需要使用 数据库操作 则添加get_db 参数, 如一个都不需要则不添加
:param case: 用例
:return:
"""
# 前置处理
title, skip, header, path, method, data_type, file, data, extra, sql, expect = case
ReportStyle.title(title)
data_process.handle_case(path, header, skip, data, file)
# 发送请求
http_client.send_request(
data_type,
method,
data_process.path,
data_process.headers,
data_process.body,
data_process.files,
)
# 后置处理
DataProcess.handle_extra(extra, http_client.response.json())
data_process.sql = sql
data_process.handle_sql(get_db) # 使用数据库
# 断言
DataProcess.assert_result(http_client.response.json(), expect)
...
config.yaml
# 数据库校验- mysql
database:
host: localhost
port: 3306
user: root
# 不用''会被解析成int类型数据
password: '123456'
db: mydb
# 数据库所在的服务器配置
ssh_server:
port: 22
username: root
password: '123456'
# 私有密钥文件路径
private_key_file:
# 私钥密码
private_password:
# 如果使用的docker容器部署mysql服务,需要传入mysql的容器id/name
mysql_container: mysql8
# 数据库备份文件导出的本地路径, 需要保证存在该文件夹
sql_data_file: backup_sql/
表数据
- apis表
- cases表
单条SQL
用例数据
用例标题 | 是否跳过 | 请求头 | 请求地址 | 请求方式 | 入参关键字 | 上传文件 | 请求数据 | 提取参数 | 后置SQL | 预期结果 |
---|---|---|---|---|---|---|---|---|---|---|
登录 | FALSE | login | post | data | {"username": "admin", "password": ""} | {"msg":"$.meta.msg"} | select * from apis; | {"$.meta.status":400} |
结果
执行参数字典为:
{
"msg": "参数错误"
}
null
多条SQL
用例数据
用例标题 | 是否跳过 | 请求头 | 请求地址 | 请求方式 | 入参关键字 | 上传文件 | 请求数据 | 提取参数 | 后置SQL | 预期结果 |
---|---|---|---|---|---|---|---|---|---|---|
登录 | FALSE | login | post | data | {"username": "admin", "password": ""} | {"msg":"$.meta.msg"} | select * from apis; select * from cases | {"$.meta.status":400} |
结果
执行后参数字典为:
{
"msg": "参数错误",
"id": 1,
"name": "updatehahaha",
"path": null,
"body": null,
"expected": "{\"msg\": \"你好\"}",
"api_id": 1,
"create_at": "2021-05-17 17:23:54",
"update_at": "2021-05-17 17:23:54"
}
{
"id": 1,
"name": "updatehahaha",
"path": null,
"body": null,
"expected": "{\"msg\": \"你好\"}",
"api_id": 1,
"create_at": "2021-05-17 17:23:54",
"update_at": "2021-05-17 17:23:54"
}