python接口自动化学习笔记(封装方法用于读取excel)

from collections import namedtuple
from openpyxl import load_workbook

# 1.如何将一些操作(Excel读写)进行封装?(写出封装的思路)
# a、加载excel文件,定位表单;
# b、定位单元格,读取所有用例数据;
# c、遍历所有单元格数据,或使用ddt;
# d、写入指定单元格数据,保存excel文件;

class ReadExcelData(object):
    """封装读取excel表单数据的工具类"""

    def __init__(self, file_path, sheet_name=None):
        """
        初始化openpy加载excel文件
        定位表单及初始化参数
        """
        self.file_path = file_path
        self.sheet_name = sheet_name
        # 打开已存在Excel文件
        self.wb = load_workbook(self.file_path) #打开指定的excel
        # 定位表单
        self.ws = self.wb[self.sheet_name] if self.sheet_name is not None else self.wb.active  # 获取第一个表单
        self.sheet_head_tuple = tuple(self.ws.iter_rows(max_row=self.ws.min_row, values_only=True))[0]
        self.cases_list = []  # 定义一个存放元组的对象
        self.Cases = namedtuple("cases", self.sheet_head_tuple)  # 创建一个命名元组类

    def get_all_cases(self):
        """
        获取excel所有测试用例
        """
        for tuple_data in self.ws.iter_rows(min_row=self.ws.min_row + 1, values_only=True):  # 每次遍历,返回由某行所有单元格值组成的一个元组
            self.cases_list.append(self.Cases(*tuple_data))
        return self.cases_list

    def get_one_case(self, row):
        """
        获取一条case
        :return一个case对象
        """
        if isinstance(row, int) and (self.ws.min_row + 1 <= row <= self.ws.max_row):
            return tuple(self.ws.iter_rows(min_row=row, max_row=row, values_only=True))[0]
        else:
            print("传入行号不正确,应为大于1的整数!")

    def write_file(self, row, actul_result, result_status):
        '''
        执行用例结果写入excel,并保存
        '''
        if isinstance(row, int) and (self.ws.min_row + 1 <= row < self.ws.max_row):
            self.ws.cell(row=row, column=self.ws.max_column - 1, value=actul_result)
            self.ws.cell(row=row, column=self.ws.max_column, value=result_status)
            self.wb.save(self.file_path)
        else:
            print("处理失败!")

if __name__ == '__main__':
    file_path = u'E:\heguanghua\python\接口自动化\api.xlsx'
    sheet_name = 'Sheet1'
    res = ReadExcelData(file_path,sheet_name).get_all_cases()
    print(res)
    print('================================================')
    re = ReadExcelData(file_path,sheet_name).get_one_case(2)
    print(re)
原文地址:https://www.cnblogs.com/hghua/p/13279308.html