tablib 是最近用的操作 Excel 非常厉害的一个库。听过 requests 库吗?tablib 是 requests 库作者常年维护的一个可以操作 Excel 等多种文件格式,将他们变成一种通用数据集的第三方库。

tablib 支持的主要数据格式有:

•xls, 老版 office 的 excel 文件格式;•xlsx系列,新版 office 文件格式;•json•yaml•html•csv•df,(pandas 的 DataFrame, 需要安装 pandas)

也就是说,tablib 能把不同格式的数据转化成一种通用的关系型数据格式,然后在各个格式之间无缝切换。什么叫关系型数据格式呢?比如:

•MySQL 数据,每行数据对应着一个字段名。你可以通过这个库将数据库查询到的数据轻松存入 Excel。•Excel 数据,每行数据都有一个 header。•json, 数据分为 key 和 value•上面提到的都类似。

tablib 这种通用数据格式的特性解决了以前一些 Excel 操作库的一些格式问题。

操作 Excel 的几个常用库

•xlrd•openpyxl

这些库都是非常优秀的库,限制性也有:

1、xlrd 的问题。他只能读,不能写。要写还得另外装库。

2、openpyxl 的问题。只支持 xlsx 系列的读写。因为现在大多使用这种 Excel 格式,所以这个问题其实可以忽略,但如果你的 office 软件比较老,只能用 xls 格式,这个库就用不了了。

tablib 的安装

1、安装 pip install tablib

2、导入 import tablib

核心概念

Dataset 快速入门

先看一个小例子:

url, method, expected 是一个表的表头 header,其实就是每一列的名字,在数据库里我们称为字段名。下面的行都是数据。

想要创建一个 Excel 非常的简单,只需要准备你需要的数据 data, 表头 header 和 表的名字 title:

保存为 excel

要保存为 excel 文档,只需要像操作普通的文件一样读写就可以了,写入 data.xls 或者 data.xlsx 属性里面的数据:

注意:模式需要用二进制模式 wb

Databook

Databook 就是类似工作簿的概念,所以 Databook 需要的参数实际上就是上文中的 DataSet。如果一个 Excel 里只有一个表,用 DataSet 就够了,如果有多个表:

表格导入:import_set

说完 Excel 的写操作, 接下来是读操作, 读取一个 excel 文件也是和普通文件读写类似,调用 import_set 方法:

获取数据进行自动化测试

用一个例子来实战,获取 excel 文件里的数据,执行自动化测试程序:

导入book

和 DataSet 的操作一样的:

总结

这篇我们熟悉了 tablib 的核心概念:

•DataBook•DataSet•读取, import_set, import_book•写入, write

下篇我们将行列和数据操作,以及它的一些特性。

想用 Excel 进行自动化冒烟测试?用这个就对了。

tablib 操作测试用例的基础使用非常简单,你只需要记住以下 2 点:

1、使用 import_set导入 excel 文件

2、使用 DataSet 创建 excel 表格

现在来进行更精确的操作:

行列数据操作

先通过加载 excel 文件获取到数据

a 得到的是一个列表,每个元素是每一行数据。

1、获取行

2、获取列

3、 插入行

4、插入列

5、修改

注意:不要在代码里直接操作 a._data, 可以封装成方法。

冒烟用例执行

在测试过程中,我们经常需要执行冒烟用例。或者给测试用例打标签,比如登录功能,成功用例,异常用例等等。tablib 通过 tags 关键字方便删选指定的测试用例来执行。

1、添加 tags

2、修改 tags

3、去除重复元素

灵活的格式切换

测试数据最常用的功能是需要切换格式,比如把 excel 格式的数据切换成 yaml , 这个在接口自动化测试框架 httprunner 中经常用到。还是用 a 来表示 DataSet 数据:

1、存储为 yaml 文件:

2、导入 yaml 文件:

3、导出为 html :

5、导出为 json:

效果:

其他常用方法

•,,是对列的相关操作•,,,是对行的相关操作•去除重复的记录•根据列进行排序•返回子Dataset•清空Dataset,包括表头和内容总结

tablib 这个库非常灵活,用法非常好记,完全符合我们对 excel 的理解。非常适用于 python 自动化测试的用例数据管理。只有一个缺点:中文资料太少。后面我会翻译一些优秀的英文文档,让更多人把这个优秀的库用起来。