zoukankan      html  css  js  c++  java
  • 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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     

     添加关注,让我们一起共同成长!

  • 相关阅读:
    比较器 Comparable 与compartor 的区别及理解
    事务特性、事务隔离级别、spring事务传播特性
    分布式文件上传-FastDFS
    spring-cloud 组件总结以及搭建图示 (六)
    springCloud zuul网关(五)
    hashCode与equals 通过面试题一窥究竟
    【原】那年30岁
    【原】Hyper-V虚拟机设置外部网络访问
    【原】win10 .net framework 3.5安装
    【原】做梦有感
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/14593554.html
Copyright © 2011-2022 走看看