python接口自動化第六篇--封裝Excel

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當作一個靜態方法使用,主要是怕寫入的數據回覆蓋之前的

發佈了29 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章