pytest 使用dbutil

背景

pytest连接数据使用pymysql,使用短链接的方式会消耗数据库的性能,频繁的创建和关闭数据库连接也会使pytest的性能降低

解决方案

引用DBUtil做数据库连接池

dbutil.py代码

import pymysql
from DBUtils.PooledDB import PooledDB

from util import sysvar as sys_var


class DBUtil(object):
    def __init__(self):
        global connect
        self._create_connector()
        connect = self.connect.connection()

    def _create_connector(self):
        self.connect = PooledDB(
            creator=pymysql,
            mincached=3,
            maxconnections=3,
            host=sys_var.MYSQL_IP,
            port=sys_var.MYSQL_PORT,
            user=sys_var.MYSQL_USER,
            password=sys_var.MYSQL_PASSWD,
            cursorclass=pymysql.cursors.DictCursor,
            charset='utf8mb4',
            connect_timeout=100
        )

    @staticmethod
    def close_connection():
        connect.close()

    @staticmethod
    def exec_sql(sql="select 1 from dual"):
        cursor = connect.cursor()
        cursor.execute(sql)
        connect.commit()
        cursor.close()
        return cursor.fetchall()

conftest.py

考虑到需要初始化数据库连接池,所以把初始化的步骤放在根目录下的conftest.py中

@pytest.fixture(scope="session", autouse="true")
def init_db_connect():
    DBUtil()
    yield
    DBUtil.close_connection()

使用

from dbutil import DBUtil

# 不需要初始化类
sql = "select 1 from dual"
DBUtil.exec_sql(sql)

总结

使用数据库连接池降低数据库连接的重复创建率,降低运行时间,也可以节省部分系统资源,但是对于系统总运行时长本身就不是很长的case,加入数据库连接池效果可能并没有那么突出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值