zoukankan      html  css  js  c++  java
  • python:利用xlrd模块操作excel

    在自动化测试过程中,对测试数据的管理和维护是一个不可忽视的点。一般来说,如果测试用例数据不是太多的话,使用excel管理测试数据是个相对来说不错的选择。

    这篇博客,介绍下如何利用python的xlrd模块来读取excel的数据。。。

     

    一、下载安装

    直接cmd进入命令行,然后输入 pip install xlrd 命令进行安装;或者输入 pip show xlrd 命令来查看是否安装有xlrd。

    安装方法不重要,通过安装包安装也可以,只要达到目的即可。

    二、用法介绍

    xlrd是python语言中读取excel的扩展工具包,可以实现指定表单、指定单元格的读取(如果要写入数据,需要使用另一个扩展库:xlwt)。

    官方文档http://xlrd.readthedocs.io/en/latest/index.html

    基本用法介绍如下(来自百度百科):

    # 示例:
    # 导入扩展包
    import xlrd
    # 打开Excel文件读取数据
    data = xlrd.open_workbook('excelFile.xls') [1] 
    # 获取一个工作表
    table = data.sheets()[0]                 #通过索引顺序获取
    table = data.sheet_by_index(0)           #通过索引顺序获取
    table = data.sheet_by_name(u'Sheet1')    #通过名称获取
    # 获取整行和整列的值(数组)
    table.row_values(i)
    table.col_values(i)
    # 获取行数和列数
    nrows = table.nrows
    ncols = table.ncols
    # 循环行列表数据
    for i in range(nrows ):
    print table.row_values(i)
    # 单元格
    table.cell(rowx,colx)
    cell_A1 = table.cell(0,0).value
    cell_C4 = table.cell(3,2).value
    # 使用行列索引
    cell_A1 = table.row(0)[0].value
    cell_A2 = table.col(1)[0].value
    # 简单的写入
    row = 0
    col = 0
    # 常用单元格中的类型 
    0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error, 6 blank
    ctype = 1 value = '单元格的值'
    # 扩展的格式化
    xf = 0  
    table.put_cell(row, col, ctype, value, xf)
    table.cell(0,0)        #单元格的值'
    table.cell(0,0).value  #单元格的值'

    三、示例Demo

    简单的读取excel文件的demo代码如下:

     1 # coding-utf-8
     2 import xlrd
     3 from readConfig import Signup_data,Login_data
     4 
     5 def SignUp():
     6     filepath = Signup_data
     7     file = xlrd.open_workbook(filepath)
     8     table = file.sheets()[0]
     9     nrows = table.nrows
    10     Susername = []
    11     Smobile = []
    12     Stxtcode = []
    13     Smobilecode = []
    14     Spassword = []
    15     # 定义对应的用例条件list
    16     for i in range(1,nrows):
    17         # 循环行列表数据
    18         Susername.append(table.cell(i,0).value)
    19         Smobile.append(table.cell(i,1).value)
    20         Stxtcode.append(table.cell(i,2).value)
    21         Smobilecode.append(table.cell(i,3).value)
    22         Spassword.append(table.cell(i,4).value)
    23     # 返回list结果
    24     return Susername,Smobile,Stxtcode,Sobilecode,Spassword
    25 
    26 def Login():
    27     filepath = Login_data
    28     file = xlrd.open_workbook(filepath)
    29     table = file.sheet()[0]
    30     nrows = table.nrows
    31     Lusername = []
    32     Lpassword = []
    33 
    34     for i in range(1,nrows):
    35         Lusername.append(table.cell(i,0).value)
    36         Lpassword.append(table.cell(i,1).value)
    37     # 返回list结果
    38     return Lusername,Lpassword

    脚本解析:

    ①、刚开始导入的自定义模块 from readConfig import Signup_data,Login_data ,这里我将测试数据的文件路径放在了配置文件里,然后简单封装了读取配置文件的一个readConfig方法,

    这样做的好处是降低了维护成本(即使后期相对的有变动,只需要改变配置文件和这个封装的方法,而不用去修改测试脚本),提高了脚本可维护性,重用性和服务迁移的成本。

    读取配置文件链接:python:利用configparser模块读取配置文件

    可放入配置文件的信息这里举一些例子:数据库连接信息、文件路径、用户名、密码、后台接口等。。。

    PS:如果使用GIT做版本控制,文件上传远程仓库后,敏感信息不做管理,这样风险比较大(如何降低这种风险,后续的博客会介绍)。。。

    ②、如上面的代码所示,我只是简单的写了注册和登录的2个方法,但如果测试数据比较多(存在很多不同excel中)或者测试点比较多,这样就比较臃肿了,可以继续对其进行优化,比如写一个类,

    初始化一些共用的信息,每个功能点对应的不同方法只需要几行代码就搞定,还可以从业务角度进行拆分等(后续会不断更新优化后的内容)。。。

    四、测试数据管理

    1、使用excel管理测试数据的局限性

    博客开头就提到了,excel只适用于测试用例数据不太多的情况,如果测试数据较多,那么excel的瓶颈也很明显,原因如下:

    ①、excel单表只能支持65535行,如果测试用例有很多,那么excel就是制约测试用例和测试数据管理的最大问题;

    ②、数据量大,excel的增删改查不好做,不能做成服务,因为有IO锁,不支持事务,无法多人共用,对后续的自动化集成平台开发带来影响;

    2、优化方案

    ①、测试数据存储在专门的测试DB,封装读写数据的方法;

    ②、多人共用的问题,可以用docker部署高可用的测试环境,每个人都拥有独立的测试环境,做好版本管理;

    如上所示,就是xlrd读取excel数据的简单使用方法以及测试用例数据管理相关的一些思路,仅供参考,具体做法和优化请自行实践。。。

  • 相关阅读:
    div嵌套盒子模型
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver的问题
    java用class.getClassLoader().getResourceAsStream方式读取properties文件路径问题
    JDBC学习链接----非常好的视频
    数据库用户权限管理
    MySQL 数据备份与还原
    存储过程--触发器和事件
    Mysql常用函数
    Mysql使用终端操作数据库
    python网络-动态Web服务器案例(30)
  • 原文地址:https://www.cnblogs.com/imyalost/p/8893547.html
Copyright © 2011-2022 走看看