这里写自定义目录标题
背景
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,加入数据库连接池效果可能并没有那么突出