1. 程式人生 > >python介面自動化測試 - openpyxl基本使用

python介面自動化測試 - openpyxl基本使用

前言

  • 當你做介面自動化測試時,測試用例逐漸變多情況下,如果所有測試用例都通過程式碼管理將會使得程式碼十分臃腫,而且維護成本會很高;
  • 所以我們一般會通過Excel去管理所有的測試用例,而openpyxl庫提供了訪問Excel的方法

 

openpyxl簡單介紹

  • 一個Python庫,用於讀取/寫入Excel 2010  xlsx 、xlsm 、xltx 、xltm 檔案
  • 不能操作 xls 檔案

 

openpyxl簡單概念

  • Workbook:excel工作表
  • Sheet:工作表中的一張表
  • Cell:其中的一個單元格
  • 簡單步驟:開啟Workbook,選中Sheet,操作Cell

 

openpyxl簡單使用

 1 import openpyxl
 2 
 3 if __name__ == '__main__':
 4     path = 'F:/imocInterface/case/imooc.xlsx'
 5     # 讀取excel檔案
 6     workbook = openpyxl.load_workbook(path)
 7     # 讀取所有sheet
 8     sheet = workbook.get_sheet_names()
 9     # 獲取某個sheet
10     sheet = workbook[sheet[0]]
11     # 獲取某個cell的值
12     cell_val = sheet.cell(row=2, column=2).value
13     print(cell_val)

包含知識點

  • 呼叫 load_workbook() 等同於呼叫 open() 
  • 第8、10行程式碼可能濃縮成一行程式碼 workbook.get_sheet_by_name("sheet的名字") ,前提是你得知道sheet的命名
  •  cell(row, column, value=None) 三個引數分別是:行,列,值;若設定了value相當於賦值操作,會覆蓋原本的值

 

openpyxl操作單元格

訪問單個cell

1     # 方式一:獲取A4單元格的值
2     cell_val = sheet['A4'].value
3     # 方式二:獲取第二行,第二列的單元格的值
4     cell_val = sheet.cell(row=2, column=2).value

 

訪問多個cell

 1     # A1-B3的單元格 共6個
 2     cell_range = sheet['A1':'B3']
 3 
 4     # A1-A3的單元格 共3個
 5     cell_range = sheet['A1:A3']
 6 
 7     # 第十行的單元格
 8     cell_range = sheet[10]
 9 
10     # 第1、2行的單元格
11     cell_range = sheet[1:2]

 注意:以上方法返回的是都是cell物件組成tuple

 

獲取指定範圍的cell

1     # 返回行
2     for col in sheet.iter_rows(min_row=1, min_col=1, max_col=3, max_row=2):
3         for cell in col:
4             print(cell)
5 
6     # 返回列
7     for col in sheet.iter_cols(min_row=1, min_col=1, max_col=3, max_row=2):
8         for cell in col:
9             print(cell)

獲取指定範圍cell的測試結果

# 返回行
<Cell 'Sheet1'.A1>
<Cell 'Sheet1'.B1>
<Cell 'Sheet1'.C1>
<Cell 'Sheet1'.A2>
<Cell 'Sheet1'.B2>
<Cell 'Sheet1'.C2>

# 返回列
<Cell 'Sheet1'.A1>
<Cell 'Sheet1'.A2>
<Cell 'Sheet1'.B1>
<Cell 'Sheet1'.B2>
<Cell 'Sheet1'.C1>
<Cell 'Sheet1'.C2>

官方提醒:出於效能考慮, sheet.iter_cols() 方法不支援在只讀模式使用

 

獲取sheet內所有行和列的cell

 1     # 以列的形式,獲取sheet的全部cell
 2     data = tuple(sheet.columns)
 3 
 4     # 以行的形式,獲取sheet的全部cell
 5     data = tuple(sheet.rows)
 6 
 7     # 獲取所有資料
 8     data = tuple(sheet.values)
 9     # 指定返回某一行資料
10     print(data[2])

注意: sheet.rows 返回的是一個物件,需要用 tuple() 才能將物件轉換成tuple

官方提醒:出於效能考慮, sheet.cloumns 方法不支援在只讀模式使用

 

獲取sheet的行數、列數

 1     # 獲取sheet最大行
 2     data = sheet.max_row
 3 
 4     # 獲取sheet最多列
 5     data = sheet.max_column
 6 
 7     # 獲取sheet最小行
 8     data = sheet.min_row
 9 
10     # 獲取sheet最小列
11     data = sheet.min_column

 

openpyxl寫入資料

1     workbook = openpyxl.load_workbook(path)
2     sheet = workbook.active
3     sheet.cell(row=2, col=2, value="213")
4     workbook.save(filename=path)

包含知識點

  • 寫入資料的檔案需要是可寫檔案,需要已關閉;若開啟著excel的話無法寫入會報 PermissionError: [Errno 13] Permission denied: 'XXXXX.xlsx' 
  • 其實就是四部曲:獲取excel - 執行 workbook.active - 賦值操作 - 儲存檔案
  • 賦值操作還可以是  sheet["B2"] = "213" ,等價於上面第三行程式碼
  •  save() 會覆蓋原有檔案,不會有提醒

&n