使用 tablib 來自動化管理測試用例,其餘的工具都不用學了

你在學習 python 自動化測試嗎?聽過 requests 庫嗎?tablib 是 requests 庫做者常年維護的一個能夠操做 Excel 等多種文件格式,將他們變成一種通用數據集的第三方庫。html

tablib 支持的主要數據格式有:python

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

也就是說,tablib 能把不一樣格式的數據轉化成一種通用的關係型數據格式,而後再各個格式之間無縫切換。什麼叫關係型數據格式呢?好比:數據庫

  • MySQL 數據,每行數據對應着一個字段名。你能夠經過這個庫將數據庫查詢到的數據輕鬆存入 Excel。
  • Excel 數據,每行數據都有一個 header。
  • json, 數據分爲 key 和 value
  • 上面提到的都相似。

tablib 這種通用數據格式的特性解決了之前一些 Excel 操做庫的一些問題。json

操做 Excel 的幾個經常使用庫

  • xlrd
  • openpyxl

這些庫都是很是優秀的庫,限制性也有:api

一、xlrd 的問題。他只能讀,不能寫。要寫還得另外裝庫。markdown

二、openpyxl 的問題。只支持 xlsx 系列的讀寫。由於如今大多使用這種 Excel 格式,因此這個問題其實能夠忽略,但若是你的 office 軟件比較老,只能用 xls 格式,這個庫就用不了了。app

tablib 的安裝

一、安裝 pip install tablibpost

二、導入 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

下篇咱們將行列和數據操做,以及它的一些特性。

相關文章
相關標籤/搜索