1、Excel封裝是爲了框架中讀取測試數據,打開我們設置寫好的用例Excel文件
該類裏邊最常用的就是read方法,經驗所得最好以字典的方式進行讀取
舉個例子,下圖是我的測試用例,我們可以將第一行當作字典的‘key',比如:{‘caseid’:'1,2'}
如果是採取列表方式,則後續可能我們對文件進行插入列的時候,就需要更改test_case文件的一些參數,很麻煩
2、
from openpyxl import load_workbook
class ExcelHandler:
'''Excel封裝'''
def __init__(self,file_name):
self.file_name = file_name
self.wb = load_workbook(file_name)
def choose_sheet(self,sheet_name):
'''選擇表單
如果sheet name是整數就根據索引獲取
如果sheet name是字符串就用名字獲取
'''
if isinstance(sheet_name,int):
return self.wb.worksheets[sheet_name]
return self.wb.get_sheet_by_name(sheet_name)
def read_line(self,sheet_name,line):
'''獲取行'''
sheet = self.choose_sheet(sheet_name)
sheet_data = sheet[line] #取出來的是元祖(Cell(1,1),Cell(1,2))
#把裏邊的數據取出來
data = []#用列表接收比較靈活
for c in sheet_data:
data.append(c.value)
return data
#以列表形式的讀取
# def read(self,sheet_name,start_row=2,start_column = 1):
# '''獲取所有數據'''
# sheet = self.choose_sheet(sheet_name)
# #max_row max_column
# data = []
# for row in range(start_row,sheet.max_row+1):
# row_data=[]
# for cell in range(start_column,sheet.max_column+1): # 遍歷一行中從start_column 到 max_column + 1所有的列號賦值給cell
# row_data.append(sheet.cell(row,cell).value) # 通過行號和列號獲取對應的cell的value append到row_data裏
# data.append(row_data)
# return data
#以字典方式的讀取
def read(self,sheet_name,start_row=2, start_column=1):
"""獲取所有的數據"""
sheet = self.choose_sheet(sheet_name)
#獲取第一行的內容(字典中的key)
# header = []
# for column in sheet[0]:
# header.append(column.value)
header = [c.value for c in sheet[1]]#用擴展內容將上邊幾行代碼直接精簡化
data = []
for row in range(start_row, sheet.max_row + 1):
row_data = []
for column in range(start_column, sheet.max_column + 1):
row_data.append(sheet.cell(row, column).value)
row_data = dict(zip(header, row_data))#使用zip函數將列表轉化爲字典,將header和data兩個列表拼裝成一個字典
data.append(row_data)
return data
def read_cell(self,sheet_name,row,column):#row:行 column:列
sheet = self.choose_sheet(sheet_name)
return sheet.cell(row,column).value
def write(self,sheet_name,row,column,data):
sheet = self.choose_sheet(sheet_name)
sheet.cell(row, column).value=data
self.save()
def save(self):
self.wb.save(self.file_name)
self.wb.close()
@staticmethod
def write(file_name, sheet_name, row, column, data):
wb = load_workbook(file_name)
sheet = wb.get_sheet_by_name(sheet_name)
sheet.cell(row, column).value = data
#保存、關閉
wb.save(file_name)
wb.close()
這裏邊說明下,sheet_name 沒有放在init屬性是因爲我的一個Excel裏邊會存放多個sheet_name,同時也是爲了自己使用思路方便,這個就是具體項目環境具體靈活更改,ExcelHandler裏邊最常用到的就是讀取數據方法,其他都不大長用,可能是在回寫Excel文件時回用到write方法,這裏把write當作一個靜態方法使用,主要是怕寫入的數據回覆蓋之前的