你在學習 python 自動化測試嗎?聽過 requests 庫嗎?tablib 是 requests 庫做者常年維護的一個能夠操做 Excel 等多種文件格式,將他們變成一種通用數據集的第三方庫。html
tablib 支持的主要數據格式有:python
也就是說,tablib 能把不一樣格式的數據轉化成一種通用的關係型數據格式,而後再各個格式之間無縫切換。什麼叫關係型數據格式呢?好比:數據庫
tablib 這種通用數據格式的特性解決了之前一些 Excel 操做庫的一些問題。json
這些庫都是很是優秀的庫,限制性也有:api
一、xlrd 的問題。他只能讀,不能寫。要寫還得另外裝庫。markdown
二、openpyxl 的問題。只支持 xlsx 系列的讀寫。由於如今大多使用這種 Excel 格式,因此這個問題其實能夠忽略,但若是你的 office 軟件比較老,只能用 xls 格式,這個庫就用不了了。app
一、安裝 pip install tablibpost
二、導入 import tablib學習
tablib.Dataset() # 至關於 Excel 中的 sheet
tablib.Databook() # 至關於 Excel 中的 workbook 工做簿
先看一個小例子:測試
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 文檔,只須要像操做普通的文件同樣讀寫就能夠了,寫入 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 須要的參數實際上就是上文中的 DataSet。若是一個 Excel 裏只有一個表,用 DataSet 就夠了,若是有多個表:
book = tablib.Databook([data, data2])
with open('demo_book.xls', 'wb') as f:
f.write(book.xls)
說完 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)
和 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 的核心概念:
下篇咱們將行列和數據操做,以及它的一些特性。