测试环境MySQL数据库中构造大量测试数据(python)

需求描述

根据业务需求,要对券码的发放、注销、冻结接口进行性能预测,然测试环境已有的数据远不够性能测试所需要的数据量,经开发确认,构造的数据需要在两张表中进行构造,才有效,数据构造的两个主要点:①如何将大量的数据,快速高效的插入数据库 ② 由于券码要求是唯一的,如何生成唯一的16位券码。实现代码如下.

代码实现

import pymysql,base64,uuid
#logger日志模块,方便调试
from loguru import logger 
class GenerateData():
    def __init__(self):
        """连接数据库"""
        self.db =  pymysql.connect("数据库地址","账户","密码","数据库名" )
        logger.info("数据库状态: %s" %self.db.server_status)
        # 使用 cursor() 方法创建一个游标对象 cursor
        self.cur = self.db.cursor()

    def insert_batch_data(self,sql_template,sql_data):
        """批量插入数据
        	sql_template:插入语句模板,类型为字符串
        	sql_data:插入库的数据,数据类型为一个二维数据列表
        """
        try:
        	#executemany方法适合批量执行插入的语句,执行效率很高,几万条的数据可能就十几秒
            self.cur.executemany(sql_template, sql_data) # 执行sql语句
            self.db.commit() # 提交到数据库执行
            logger.info("插入成功")
        except BaseException as e :
            logger.error(e) 
            logger.error(sql_template)
            logger.error(sql_data[0])
            self.db.rollback() # 如果发生错误则回滚

    def create_coupon_code(self,header,num):
        """生成券码 实例1FKA-ABR6-6USN-EDRF
        	header: 券码固定头部
        	num: 生成券码的数量
        """
        res = []
        for i in range(num):
        	#通过uuid模块生成12位的不重复的券码,与固定头部代码拼接组合成16位代码
            cashcode = base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2].decode('utf-8').upper().replace('_','').replace('-','')[:12]
            code = "%s-%s-%s-%s" % (header, cashcode[0:4], cashcode[4:8], cashcode[8:13])
            res.append(code)
        return res

    def create_cpcodes_data(self,cpcode_header,max_code_id,num):
        """构造cpcodes和cpucodes表数据"""
        cpcodes_res =[]
        cpucodes_res =[]
        code_id = max_code_id
        #调用上面的create_coupon_code方法,返回券码
        coupon_codes=self.create_coupon_code(cpcode_header,num)

        for code in coupon_codes:
            code_id+=1
            cpcodes_res.append([str(code_id), code, '18', '1', 'xxxxxx', '2021-01-28 14:34:21', '2021-01-28 14:34:21', '2021-01-28 14:34:21', '2021-02-28 14:34:21', '210222190xxxx', '1', '0', '210222190xxxx'])
            cpucodes_res.append([str(code_id), '1111111', 'xxxxxxx', '', '', '', '0.00', '0.00'])
        return (cpcodes_res,cpucodes_res)


if __name__ == '__main__':
	#创建对象
    gen_data = GenerateData()
    #调用方法构造两张表数据
    datas=gen_data.create_cpcodes_data('1FKA',800001,80000)
    cpcodes_data=datas[0]
    cpucodes_data=datas[1]
    #编写插入语句模板
    cpcodes_sql_template="""
        INSERT INTO 表名1 (
        COUPON_XXXX_ID,
        COUPON_CODE,
        XXXX_ID,
        XXXXXX_XXXXXX,
        XXXXX,
        XXXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX
    )
    VALUES(%s)
    """ %",".join([ '%s' ]* 13)
    cpucodes_sql_template="""
        INSERT INTO 表名2(
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX,
        XXXX)
    VALUES(%s) 
    """ %",".join([ '%s' ]* 8)
    #调用插入方法,执行插入操作
    gen_data.insert_batch_data(cpucodes_sql_template,cpucodes_data)
    gen_data.insert_batch_data(cpcodes_sql_template,cpcodes_data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑大钱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值