Python 之测试环境db自动同步
分享主题
多套测试环境,如何做基线的数据库级别的同步更新?
应用场景
工作中测试环境有多套时,为保证基础环境配置的一致性,就需要所有测试环境的数据库结构保持一致。
例如:A需求在 beta1 环境进行测试,且A需求提测单中有新增表的 sql,B需求在 beta2 环境进行测试,由于A需求比B需求先发布上线,此时在B需求测试过程中发布时需要将主干的代码合并到当前需求分支(集成测试的需要,可以提前检测出已上线的需求是否对当前在测的需求有影响),代码合并后对应的相关配置也得跟上,否则程序运行时会报错,所以就需要在 beta2 环境更新 beta1 环境A需求新增表的sql。
因为每一次的发布上线都会做数据库级别的同步更新,如果只是两、三个测试环境,使用人工来手动更新也是可以的,如果测试环境多且数据库更新的内容量大,依然使用人工手动更新,效率就会十分低下,同时也会造成一些人为操作的错误。这时自动化同步更新数据库就显得犹为重要了。在效率和正确率上都是完胜手工更新的。
代码实现
1#coding:utf-8 2import pymysql 3 4 5dbDict = {"test1":"l-test1.beta.ep.tx1.test.io","test2":"l-test2.beta.ep.tx1.test.io", 6 "test3":"l-test3.beta.ep.tx1.test.io","test4":"l-test4.beta.ep.tx1.test.io", 7 "test5":"l-test5.beta.ep.tx1.test.io","test6":"l-test6.beta.ep.tx1.test.io"} 8 9#这是定义了一个连接db的类,初始化方法里建立连接,并定义了sql 的执行与查询的两个方法 10 11class DBUtils(): 12 def __init__(self,test): 13 print(dbDict.get(test)) 14 self.conn = pymysql.connect(dbDict.get(test), "root", "123456") 15 self.cursor = self.conn.cursor() 16 17 def dbExcute(self,sql): 18 print ("execute sql") 19 self.cursor.execute(sql) 20 print(sql) 21 self.dbClose() 22 23 def dbSelect(self,sql): 24 print ("------------------------------------") 25 print(sql) 26 resultList = [] 27 self.cursor.execute(sql) 28 result = self.cursor.fetchall() 29 columns = self.cursor.description 30 for val in result: 31 tempDict = {} 32 for cloNum in range(len(columns)): 33 tempDict[str(columns[cloNum][0])] = val[cloNum] 34 resultList.append(tempDict) 35 print("---------------------打印查询结果----------------------") 36 print(resultList) 37 self.dbClose() 38 return resultList 39 40 def dbClose(self): 41 self.conn.commit() 42 self.cursor.close() 43 self.conn.close( 44 45 46def main(flag,sql): 47 dbname = "test" 48 envlist=[1, 2, 3, 4, 5, 6] 49 50 for i in envlist: 51 dbname += str(i) 52 print("*" * 20 + "正在执行的环境是:", dbname + "*" * 20) 53 test= DBUtils(dbname) 54 if(flag=="exe"): 55 test.dbExcute(sql) 56 else: 57 test.dbSelect(sql) 58 59 dbname = "test" 60 61if __name__ == "__main__": 62 sql="ALTER TABLE change_record change operatorEmail email varchar(100) NOT NULL DEFAULT '' COMMENT 'email'" 63 main("exe",sql)
总结
由代码实现部分可以看出,有了这个自动同步的自动化脚本,在数据库更新时,只需要传入更新的 sql 语句就可一键自动同步多套测试环境的数据库信息了,十分高效。
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!