测牛学堂:接口自动化测试之python封装数据库连接工具类总结

80 阅读2分钟

数据库工具类封装

实际测试中,我们会将常用的数据库操作,封装到一个方法,通过调用该方法来实现,提高代码的复用性。

import pymysql
class UtilDb(object):
    con = None

    @classmethod
    def __get_con(cls):
        if cls.con is None:
            cls.con = pymysql.connect(
                host="xxx",
                port=3306, user='root',
                password='ss',
                database='ss',
                charset='utf8')
        return cls.con

    @classmethod
    def __close_con(cls):
        if cls.con is not None:
            cls.con.close()
            cls.con = None

    @classmethod
    def selcet_db_one(cls, sql):
        cursor = None
        res = None
        try:
            cls.con = cls.__get_con()
            # 获取游标
            cursor = cls.con.cursor()
            # sql
            cursor.execute(sql)
            # 获取第一条结果
            res = cursor.fetchone()
        except Exception as err:
            print('查询sql错误:', str(err))
        finally:
            cursor.close()
            cls.__close_con()
            return res

    @classmethod
    def fix_db(cls, sql):
        cursor = None
        try:
            cls.con = cls.__get_con()
            # 获取游标
            cursor = cls.con.cursor()
            # sql
            cursor.execute(sql)
            cls.con.commit()
        except Exception as err:
            cls.con.rollback()
            print('增删改sql错误:', str(err))
        finally:
            cursor.close()
            cls.__close_con()

解析

1 为了节省连接的创建,我们在创建连接的时候先进行判断。con是否为空,如果是,再创建,如果不是空的,就直接返回创建好的即可。

    def __get_con(cls):
        if cls.con is None:
            # 判断不为空再连接,否则直接返回创建好的链接
        return cls.con

2 关闭连接的时候,如果连接不为空,我们才执行关闭操作,如果是空,说明没有连接,就不需要执行关闭操作。关闭完以后,要置为空,方便其他函数中进行判断。

    def __close_con(cls):
        if cls.con is not None:
            cls.con.close()
            cls.con = None

3 函数前面加两个下划线,表示是类的私有方法

总结

1 封装是代码优化必不可少的,我们新手一开始可能会觉得不好理解,但是多多练习,就能提高自己的代码能力。
2 代码的api可以不熟悉,但是思路一定要清晰。公共部分要提取出来,每一个功能都封装成函数。
3 自己封装的工具,一定要测试一下,没有问题的才可以给其他模块去调用
4 上面的代码,获取游标的功能其实可以提取出来,创建连接的功能目前是写死的,其实可以进行参数化,更加灵活等。
代码优化是无止境的,一个阶段回过头发现可能又有优化点,这是很正常的。