接口大多数都是从数据查询数据,进行处理后返回的,做接口自动化时,不可避免的需要写业务函数和SQL,若SQL放在业务脚本里,会很杂乱 不便于管理。
可以将SQL集中管理,写在sql文件中,在需要使用时通过SQL名称获取SQL。
1. 整体思路
- SQL数据目录>SQL文件(按模块划分)>SQL(为每个SQL命名,作为标识)
- SQL内容查询函数,传入文件路径,SQL名称获取SQL
- SQL执行函数,传入数据库名称、环境、SQL参数,调用2去获取SQL并填入参数、获取对应数据配置并连接对应数据库,执行SQL并返回结果
2.内容
主要分享下1.1和1.2:
- SQL按照与查询函数中指定的格式写:
–SQL名称-start
SQL内容
–SQL名称-end
--查询page数据-start
select *
from
APP.APP_PAGE_INFO
WHERE PAGE_ID = '{0}'
--查询page数据-end
- SQL内容查询函数:
import re
from ToolPackage.FileOperator import readFile
def getSql(sqlFilePath,sqlNm):
identifinerBegin = '--sqlNm-start\s*'.replace('sqlNm',sqlNm)
identifinerEnd = '\s*--sqlNm-end'.replace('sqlNm',sqlNm)
exp = identifinerBegin + '(.*)?' + identifinerEnd
fileData = readFile(sqlFilePath) # 封装的一个读取文件内容的函数,用到了chardet检测内容编码格式,读取文件时无需指定编码格式
r = re.search(exp,fileData,flags=re.I|re.S)
try:
matchResult = r.groups()
sql = matchResult[0]
except AttributeError as e:
print('在目标文件({0})中未找到sql({1}),请确认入参sqlFilePath、sqlNm及sql文件中起止标识符是否正确'.format(sqlFilePath,sqlNm))
raise e
return sql
if __name__ == '__main__':
path = r'..\SqlData\\xx模块\xx.sql'
sqlNm = '查询page数据'
sql= getSql(path,sqlNm)
print(sql)
打印内容如下:
select *
from
APP.APP_PAGE_INFO
WHERE PAGE_ID = '{0}'
文章评论