多套测试环境,如何做基线的数据库级别的同步更新?

多测试环境下基线数据库级别如何同步更新?

应用场景

当有多套测试环境在工作时,为了保证基本环境配置的一致性,所有测试环境的数据库结构需要保持一致。

例如:A需求在beta1环境测试,A需求测试表包含新表的SQL,B需求在beta2环境测试,由于A需求在B需求之前发布,此时在B需求测试过程中发布,需要将主代码合并到当前需求分支中(对于集成测试需求,可以提前检测上线需求是否对当前被测需求有影响),代码后对应配置为合并后也要跟上,否则程序运行时会报错,所以需要更新beta1环境下新表的sql A在beta2环境下。

因为每次发布都会在数据库级别进行更新自动同步是什么意思,如果只有两三个测试环境,也可以使用手动更新。如果测试环境比较多,数据库更新的内容比较大,还是采用手动手动更新。效率会很低,而且还会造成一些人为错误。这时候,自动同步更新数据库就显得非常重要了。在效率和准确性方面优于手动更新。

代码

 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语句,就能一键自动同步多组测试环境的数据库信息,非常高效的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论