python接口自动化系列(07):执行初始化sql

本系列汇总,请查看这里https://www.cnblogs.com/uncleyong/p/18033074

实现目标

执行初始化sql,保证测试用例中的数据可用,这样不用每次执行测试前修改测试数据。

安装模块

安装操作mysql数据库的模块pymysql

pip install pymysql

项目配置添加数据库配置

# mysql数据库的连接信息
mysql_info = {
    "host":"166.99.166.99",
    "port":3306,
    "user":"root",
    "password":"123456",
    "db":"qzcsbj",
    "charset":"utf8"
}

补充:也可以放yaml文件中

添加数据库工具类

utils下添加mysql_tool.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: 韧
# @wx: ren168632201
# @Blog: https://www.cnblogs.com/uncleyong/

import pymysql
import logging
logger = logging.getLogger(__name__)
from conf.settings import mysql_info

class MySQLDB:
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = object.__new__(cls, *args)
        return cls.__instance

    def __init__(self):
        # 建立数据库连接
        self.conn = pymysql.connect(
            host=mysql_info["host"],
            port=mysql_info["port"],
            user=mysql_info["user"],
            password=mysql_info["password"],
            db=mysql_info["db"],
            charset="utf8"
        )
        # 使用cursor方法获取操作游标
        self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)

    def __del__(self):
        try:
            # 关闭游标
            self.cur.close()
            # 关闭连接
            self.conn.close()
        except Exception as ex:
            logger.error(f"出错了:{ex}")

    def query(self, sql, state="all"):
        try:
            self.cur.execute(sql)

            if state == "all":
                # 查询全部
                data = self.cur.fetchall()
            else:
                # 查询单条
                data = self.cur.fetchone()
            return data
        except Exception as ex:
            logger.error(f"出错了:{ex}")
            raise

    def execute(self, sql):
        try:
            # 增删改
            rows = self.cur.execute(sql)
            # 提交事务
            self.conn.commit()
            return rows
        except Exception as ex:
            logger.error(f"出错了:{ex}")
            self.conn.rollback()
            raise

if __name__ == '__main__':
    pass

修改测试类

class TestCase:
    @pytest.mark.parametrize("casedata", read_data_from_yaml(CASE_DATA_PATH))
    def test_case(self, casedata):
        # logger.info(f"---当前测试用例数据是:{casedata}")

        # 获取initSql
        initSql = casedata["initSql"]
        # 类型是list
        # logger.info(type(initSql))
        # logger.info(">>>>>initSql:{}".format(initSql))
        if initSql:
            for sql in initSql:
                logger.info("==================替换前sql:{}".format(sql))
                sql = var_substitution(sql)
                logger.info(f"==================替换后sql:{sql}")
                if sql.strip().startswith('select'):
                    res = my.query(sql)
                    logger.info("{}查询结果是:{}".format(sql,res))
                else:
                    res = my.execute(sql)
                    logger.info("操作成功:{}条".format(res))

执行结果

sql执行成功

因为上一次数据都删除了,再次执行,结果都是0条

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值