使用 tablib 来自动化管理测试用例,其他的工具都不用学了
你在学习 python 自动化测试吗?听过 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
核心概念
tablib.Dataset() # 相当于 Excel 中的 sheet
tablib.Databook() # 相当于 Excel 中的 workbook 工作簿
Dataset 快速入门
先看一个小例子:
| url | method | expected |
|---|---|---|
| lemon.ke.qq.com | get | 成功 |
| lemonban.com | post | 成功 |
url, method, expected 是一个表的表头 header,其实就是每一列的名字,在数据库里我们称为字段名。下面的行都是数据。
想要创建一个 Excel 非常的简单,只需要准备你需要的数据 data, 表头 header 和 表的名字 title:
import tablib
# 表各列的标题 header
headers = ['url', 'method', 'expected']
# 需要存到 excel 的数据
data_list = [
['https://lemon.ke.qq.com', 'get', '成功'],
['https://lemonban.com', 'post', '成功']
]
# 生成数据
data = tablib.Dataset(*data_list, headers=headers,title='测试用例')
print(data)
打印的结果是这样的:

保存为 excel
要保存为 excel 文档,只需要像操作普通的文件一样读写就可以了,写入 data.xls 或者 data.xlsx 属性里面的数据:
with open('demo.xls', 'wb') as f:
f.write(a.xls)
with open('demo.xlsx', 'wb') as f:
f.write(a.xlsx)
注意:模式需要用二进制模式 wb
保存之后的结果是这样的:

Databook
Databook 就是类似工作簿的概念,所以 Databook 需要的参数实际上就是上文中的 DataSet。如果一个 Excel 里只有一个表,用 DataSet 就够了,如果有多个表:
book = tablib.Databook([data, data2])
with open('demo_book.xls', 'wb') as f:
f.write(book.xls)
表格导入:import_set
说完 Excel 的写操作, 接下来是读操作, 读取一个 excel 文件也是和普通文件读写类似,调用 import_set 方法:
with open('demo.xls', 'rb') as f:
# 接受 2 个参数,读出来的数据和读取的文件格式
data = tablib.import_set(f.read(), 'xls')
print(data)
# 或者采用第二种方式
with open('demo.xls', 'rb') as f:
data = tablib.DataSet().load(f.read(), 'xls')
print(data)
获取数据进行自动化测试
用一个例子来实战,获取 excel 文件里的数据,执行自动化测试程序:
def api_tester(url, method, expected):
print("正在测试{},请求方法{}, 预期结果{}".format(
url, method, expected))
with open('demo.xls', 'rb') as f:
# 接受 2 个参数,读出来的数据和读取的文件格式
data = tablib.import_set(f.read(), 'xls')
print(data)
for i in data:
api_tester(*i)
导入book
和 DataSet 的操作一样的:
with open('demo.xls', 'rb') as f:
# 接受 2 个参数,读出来的数据和读取的文件格式
data = tablib.import_book(f.read(), 'xls')
print(data)
# 或者采用第二种方式
with open('demo.xls', 'rb') as f:
data = tablib.DataBook().load(f.read(), 'xls')
print(data)
总结
这篇我们熟悉了 tablib 的核心概念:
- DataBook
- DataSet
- 读取, import_set, import_book
- 写入, write
下篇我们将行列和数据操作,以及它的一些特性。
使用 tablib 来自动化管理测试用例,其他的工具都不用学了的更多相关文章
- excel+requests管理测试用例接口自动化框架
背景: 某项目有多个接口,之前使用的unittest框架来管理测试用例,将每个接口的用例封装成一个py文件,接口有数据或者字段变动后,需要去每个py文件中找出变动的接口测试用例,维护起来不方便,为了便 ...
- 美团Java团队分享:如何实践支付通道自动化管理
随着支付业务量激增,支付团队不断壮大.为了满足日益增长的业务需求,大量的支付通道逐渐接入,但由于对接的各银行和第三方系统的稳定性参差不齐,支付通道故障时有发生,作为承接上下游的核心系统,要在一系列不稳 ...
- 利用 Puppet 实现自动化管理配置 Linux 计算机集群
随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集群的数量也会线性增加.对于数据中心的运 ...
- 运维自动化管理服务器 CheungSSH
CheungSSH 是一款中国人自主研发的Linux运维自动化管理服务器软件,后端使用 Python 语言+Django 的 Web 框架,前端使用 Bootstrap+Javascript+jQue ...
- 1.Ansible自动化管理工具
1.Ansible基本概述 Ansible是一个IT自动化的配置管理工具,自动化主要体现在Ansible集成了丰富模块,丰富的功能组件, 可以通过一个命令行完成一系列的操作.进而能减少我们重复性的工作 ...
- Puppet自动化管理配置
Puppet:开源系统配置和管理工具 随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集 ...
- 【转】使用 Ansible 实现数据中心自动化管理
长久以来,IT 运维在企业内部一直是个耗人耗力的事情.随着虚拟化的大量应用.私有云.容器的不断普及,数据中心内部的压力愈发增加.传统的自动化工具,往往是面向于数据中心特定的一类对象,例如操作系统.虚拟 ...
- ANSIBLE自动化管理工具
ansible 基础 自动化运维工具 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/ ansible 特性 1. 模块化:调用特定 ...
- Ansible批量自动化管理工具(二)
Ansible批量自动化管理工具(二) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打开百度网盘手机App,操 ...
随机推荐
- 我不熟悉的vector
构造函数 使用迭代器构造vector的一种方式: //将v[begin(), end())区间中的元素拷贝给本身 vector(v.begin(),v.end()); 在这个构造函数中,传入普通数组也 ...
- JavaWeb_JSTL标签数据的存储
菜鸟教程 传送门 JSTL jar包下载 JSTL[百度百科]:(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库 ...
- jmxtrans + influxdb + granafa 监控套件使用手册
需求说明 随着大数据组件的日益完善,需要随时随地保持各个组件的日常运行,对各个组件的监控势在必行.为了减少运维部门的负担,通过筛选,我们使用 jmxtrans + influxdb + granafa ...
- DVWA--CRSF
首先我们对CRSF进行一个介绍 CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶 ...
- xgboost原理与实战
目录 xgboost原理 xgboost和gbdt的区别 xgboost安装 实战 xgboost原理 xgboost是一个提升模型,即训练多个分类器,然后将这些分类器串联起来,达到最终的预测效果.每 ...
- awk命令2
提取文件后四行 注释:NR==FNR表示第一个文件,执行{a++},计算出第一个文件10的行数,NR!=FNR表示第二个文件10,执行{if(FNR<=a-4){print $0}},打印出第二 ...
- PADS常用画板过程
转载:PADS LAYOUT的一般流程 http://www.doc88.com/p-9129306856292.html https://wenku.baidu.com/view/cc4e0b338 ...
- enumerable 可枚举 属性
一个对象的可枚举属性会在for...in中被访问到 (或是类似的迭代方法, Object.keys() 如果一个属性不是可枚举的,循环会忽略这个属性 var obj = { key: 'val' }; ...
- 阶段3 2.Spring_10.Spring中事务控制_11 spring5新特性的介绍
jdk1.7和1.8的差别 准备好的一个maven工程 反射创建对象10亿次 ,用的时间 替换jdk的版本 选择为1.7 切换了1.7的版本以后呢执行的速度就变的非常的慢 两个版本的对比 响应式编程风 ...
- jquery的then方法
绿地项目中的代码: $.ajax({ url: `https://openapi.italent.cn/OAuth/Token`, type: 'post', data: `tenant_id=${t ...