一、适用场景
项目工作中,我们会遇到测试环境特别多的情况,例如:n套beta环境,多套预生产环境,多套uat环境等各种测试环境。为保证所有测试环境表结构上的一致性,如果只是单纯地靠人工来检查并更新,未免显得太过吃力且效率低下,还容易在实施的过程中出现遗漏的问题。
因此使用自动化脚本来完成这项工作就显得格外重要了,今天分享的主要内容就是通过自动化脚本协助你找到不同测试环境之间差异化的内容,进而可以避免同步过程中出现的遗漏问题。
二、代码实现
1、前置处理与基础配置
1import pymysql
2from email.mime.multipart import MIMEMultipart
3from email.mime.text import MIMEText
4import smtplib
5import time
6
7#忽略掉的db字典
8ignoreDb={'information_schema': 'information_schema',
9 'mysql': 'mysql',
10 'performance_schema': 'performance_schema',
11 'sys': 'sys'
12 }
13
14#忽略掉的db在查询sql中使用的
15ignoreDbSQL="('information_schema', 'mq_store','performance_schema', 'sys','edsystem')"
16
17#收diff报告的邮箱地址
18emails='tony.wu@test-la.com'
19
20#排除不在diff范围内的表名称列表
21exclude_table = ['tt', 'hurdle_policy_back', 'preferences_0309', 'preferences_0524', 'preferences_0310','t1','t2','mock_data']
2、用来发送diff报告
1def send_mail(receivers, title, content):
2 sender = 'qa.notice@test-la.com'
3 mailto = receivers.split(",")
4 try:
5 msg = MIMEMultipart()
6 msg['Subject'] = title
7 to_user = ",".join(mailto)
8
9 print("receivers...", to_user)
10 msg['to'] = to_user
11 msg['From'] = sender
12
13 body = MIMEText(content, _subtype='html', _charset='utf-8')
14 msg.attach(body)
15 smtp = smtplib.SMTP('smtp.office365.com', 587)
16 smtp.starttls()
17 print("sending")
18 smtp.login("qa.notice@test-la.com", "test123456")
19 smtp.sendmail(sender, mailto, msg.as_string())
20 print("send")
21 smtp.quit()
22 except smtplib.SMTPException as e:
23 print(e)
3、查询获取所有的列名数据
1def queryAllColumns(mycursor):
2 sql = " SELECT TABLE_SCHEMA 库名,TABLE_NAME 表名,COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, " \
3 "CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否为空, COLUMN_DEFAULT 默认值, " \
4 "COLUMN_COMMENT 备注 FROM INFORMATION_SCHEMA.COLUMNS " \
5 "where