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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章