Python自动化测试:通过excel录入内容,批量造数据

背景:

  自动化测试除了验证系统功能外,还能够为测试人员根据测试要求造数据实现测试需要!但是一般的自动化测试,都是在编写脚本的时候,写死在程序里的。所以本文是为了在满足系统操作流程的基础上,根据测试的要求实现测试数据的编写。

 

本文涉及两个新的知识点内容:

1. 读取excel数据

2.    python数据库读写

2.1    创建一个简单的表

 

一、编写思路:

        从需求出发,主要找到两个关键字:批量、要求、数据。考虑到两种实现方式,1. 页面录入 2. excel数据填写;考虑到页面操作虽然看上去很方便!但是每次都需要重新编写,而且实现批量操作也很难,最重要的是,开发成本太大!要测试人员编写一个完整的测试网页!第一步确认了:使用excel获取造数据需求。

        数据记录在excel中,获取数据考虑到两种方式:1. 将excel中的数据保存在数据库中,之后系统通过数据库交互完成数据插入;2. 直接通过读取excel数据对信息进行交互。我先是通excel读取的方式操作了下,实验后发现,如果每次调用数据的时候读取excel,找数据的成本很大;批量操作根据行读取数据,也比较难搞,当然做也是肯定能够做的,只是成本比较大!所以,经过了2个小时的尝试,果断选择了数据库存取。

        当然,数据库的问题也很多!首先你需要搭建个本地数据库;还需要创建数据表,创建字段,还可能涉及到字符集!不过,上述内容由于之前踩过坑了,如果需求可以看看博客里的自学mysql的方式。所以实现逻辑修改成了:读取excel一次性存入数据库,之后每次交互,都是系统与数据库之间进行交互。

实现的第一个小步:excel读取数据,并存入数据库。

分解动作1:读取excel。

分解动作1.1:引入读取excel库:

import xlrd

分解动作1.2:打开指定文件

workbook = xlrd.open_workbook(Excel_Path) # excel文本举例:u'D://自动化造数据模板.xlsx'
Sheet_Name = workbook.sheet_by_name(u'借款数据') # 定位excel中,名为“借款数据”的sheet页

分解动作1.3:读取列表数据

Term_Of_Loan = Sheet_Name.cell_value(1, 2) # 读取excel中,第二行,第三列的数据 

分解动作1.4:根据数据库字段要求,修改文本属性【未修改,插入数据库提示格式错误】

Loan_Amount = int(Sheet_Name.cell_value(Count_Num, 3)) # int() 强制转换为int型

分解动作2:将读取的excel插入数据库

在进行分解动作之前,需要先创建一个数据表,本人使用的是Navicat,设计表。之前虽然没建过,但是也看到过猪跑,建表无非定义字段名、字段属性、字段长度、添加备注。

分解动作2.1:引入数据库

import pymysql

分解动作2.2:链接数据库

db = pymysql.connect('localhost', 'root', '123456', 'test', charset='utf8') 

分解动作2.3:创建游标

cursor = db.cursor()

分解动作2.4:编写插入脚本:

query = 'insert into tb_bbh_dv_Invodata (ID, C_JKRDH,C_JKLX, C_JKQX, N_JKJE, N_NLV,N_JX, N_SXF, N_GLF, N_ZZSXF, N_QTJE, N_ZDTZJE, DT_CreatTime,B_SFCJ)  values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'

分解动作2.5:执行插入脚本

cursor.execute(query, (ID, JKR_ID, Type_Of_Loan, Term_Of_Loan, Loan_Amount, Annual_Interest_Rate, Increase_Interest, Service_Charge, Management_Expense, Debt_Service_Fee, Amount_Of_Investment, Maximum_Investment, Create_Time,'0'))
db.commit()# 这句有什么用?!   不加试试,能通过算你厉害

分解动作2.5.1:写的时候遇到个问题,方法1,中有方法2,且,方法1和方法2同时使用到了数据库。方法1没有关闭数据库,方法二再调用,可能有问题!所以呢,可以将方法1的数据库连接,直接传给方法二,这样方法二只管调用,不需要考虑关闭数据库。

分解动作2.6:关闭游标以及数据库

cursor.close()
db.close

小结:以上的两套分解动作整合到一起,就能够实现excel读取数据,存入数据库的功能,完整代码如下:

# python
# -*- coding: utf-8 -*-
# @Time    : 2018-7-25 8:59
# data/Get_Date_Loan.py
import pymysql,uuid
import xlrd
import datetime
def Read_excel_Get_Invo_Data(Excel_Path):
    """

    :param Excel_Path:  需要获取的文件路径
    :return:
    功能:读取excel借款数据,并存入数据库
    """
    # 打开文件
    workbook = xlrd.open_workbook(Excel_Path)
    # 获取具有数据页
    Sheet_Name = workbook.sheet_by_name(u'借款数据')
    Count_Num = 1
    # 插入数据库
    db = pymysql.connect('localhost', 'root', '123456', 'test', charset='utf8')
    cursor = db.cursor()
    # 编写脚本
    query = 'insert into tb_bbh_dv_Invodata (ID, C_JKRDH,C_JKLX, C_JKQX, N_JKJE, N_NLV,N_JX, N_SXF, N_GLF, N_ZZSXF, N_QTJE, N_ZDTZJE, DT_CreatTime,B_SFCJ)  values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'

    while True:
        # 获取借款人ID
        try:
            JKR_ID = int(Sheet_Name.cell_value(Count_Num, 0))
        except IndexError:
            break

        # 获取借款类型
        Type_Of_Loan = Sheet_Name.cell_value(Count_Num, 1)#.encode('utf8')

        # 获取借款期限
        Term_Of_Loan = Sheet_Name.cell_value(Count_Num, 2)#.encode('utf8')

        # 借款金额
        Loan_Amount = int(Sheet_Name.cell_value(Count_Num, 3))
        # 年利率
        Annual_Interest_Rate = float(Sheet_Name.cell_value(Count_Num, 4))
        # 加息
        Increase_Interest = float(Sheet_Name.cell_value(Count_Num, 5))
        # 手续费
        Service_Charge = float(Sheet_Name.cell_value(Count_Num, 6))
        # 管理费
        Management_Expense = float(Sheet_Name.cell_value(Count_Num, 7))
        # 债转手续费
        Debt_Service_Fee = float(Sheet_Name.cell_value(Count_Num, 8))
        # 起投金额
        Amount_Of_Investment = int(Sheet_Name.cell_value(Count_Num, 9))
        # 最大投资金额
        Maximum_Investment = int(Sheet_Name.cell_value(Count_Num, 10))
        # 生成随机主键
        ui = uuid.uuid1()
        ID = ui.hex
        # 生成插入时间
        Create_Time = datetime.datetime.now()
        print JKR_ID
        print ID,JKR_ID,Type_Of_Loan,Term_Of_Loan,Loan_Amount, Annual_Interest_Rate, Increase_Interest, Service_Charge, Management_Expense, Debt_Service_Fee, Amount_Of_Investment, Maximum_Investment, Create_Time
        cursor.execute(query, (ID, JKR_ID, Type_Of_Loan, Term_Of_Loan, Loan_Amount, Annual_Interest_Rate, Increase_Interest, Service_Charge, Management_Expense, Debt_Service_Fee, Amount_Of_Investment, Maximum_Investment, Create_Time,'0'))

        # , JKR_ID, Type_Of_Loan_Kind, Term_Of_Loan_Kind, Loan_Amount, Annual_Interest_Rate, Increase_Interest, Service_Charge, Management_Expense, Debt_Service_Fee, Amount_Of_Investment, Maximum_Investment, Create_Time
        # 运行脚本
        db.commit()
        Count_Num += 1

    cursor.close()
    db.close

        至于创建数据如何调用,这个思路就相对简单了,只需要根绝唯一标识UUID在造数据的时候查询数据,并插入即可。可以自行尝试。

 

下期预告:增加了excel批量插入数据的功能,造数据肯定会更方便。不过随之也引入一个新的问题,excel模板能不能在使用时下载,维护后上传,然后再执行?正在整理编写一个python的web页面,提供模板的下载,上传,并执行自动化脚本的任务。执行后,页面给出执行结果提示说明,以及查看日志等功能。这个稍微麻烦些,我也在想如何解决,如果有python大神或者也在学习python自动化测试的同胞,可以留言回复哈~

 

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值