- 接口自动化中需要对数据库层面数据进行校验,但是如果需要频繁编写sql,且当研发迭代对数据库表结构进行了更改,sql维护起来,不够优雅,且当自动化用例量级上来之后,会陷入维护地狱
- 那么有没有一种可以实时跟进研发更新数据库表变动,并且支持crud,且不会有过大的维护成本的技术呢?有,就是今天的主角。
SqlAlchemy简介
- 是flask框架的数据库解决方案,基于对样映射关系来去处理表数据查询,有点类似springboot早期流行的JPA。下面列出一些比较好的知识简介。
SQLAlchemy入门和进阶 - 知乎 (zhihu.com)
由于在公司 接口自动化框架中已经实现并构筑基本使用工具类,本篇不再对如何引入sqlAlchemy,仅着眼于如何让sqlAlchemy为接口自动化测试服务,以及日常工作中使用。
依赖引入
flask-sqlacodegen==1.1.8 # flask 生成orm类文件的依赖库
PyMySQL==1.0.3 # 类似mysql connector的链接驱动
SQLAlchemy==1.4.0 # sqlalchemy主要代码逻辑包
表结构变动后ORM文件映射更新
swap
flask-sqlacodegen --outfile ./mod_swap.py "mysql+pymysql://wwyh_jshd_mysql:i2#0Ci2LKwior@xx.x.xx.x:3306/swap"
yygl
flask-sqlacodegen --outfile ./mod_yygl.py "mysql+pymysql://yygl_test:NbAGuKi^ZnUgfGh2@xx.xx.xxx:3306/yygl_test"
- 我们公司的业务使用了两个DB 所以,需要针对两个数据库进行ORM映射。上述代码,直接进行执行即可,生成文件如下
- 可以看到生成的两个文件,其实涵盖了我们当前所使用的库表的所有实体类关联。
举例说明
class EChargeItem(Base):
__tablename__ = 'e_charge_item'
ITEM_ID = Column(String(100, 'utf8mb4_bin'), primary_key=True, info='费用项标识')
ITEM_CODE = Column(String(8, 'utf8mb4_bin'), info='费用项编码,取标准代码')
ITEM_NAME = Column(String(256, 'utf8mb4_bin'), info='费用项名称')
NEED_FLAG = Column(String(8,