【Pytest框架参数化】识别EXCEL测试用例

Pytest进行数据驱动,进行参数化的时候如何能够识别EXCEL,且听分解

首先导入需要使用的模块:现在Python有很多识别EXCEL模块,例如:pandans,xlrd 本篇介绍xlrd

import xlrd
from xlutils import copy
class ReadExcel(object):
    # '''
    # 此类专门用于读取Excel
    # '''
    # __workbook用于存放excel文件的对象
    __workbook = None
    __sheet = None
    __print = False  # 用于开启全局打印

    def __init__(self, file_name, sheet_name):
        # '''
        # 类的初始化方法,在类似初始化的时候被调用
        # :param file_name: excel的文件名
        # :param sheet_name: excel中需要访问的sheet名
        # '''
        self.file_name = file_name
        ReadExcel.__workbook = xlrd.open_workbook(file_name)
        # 根据sheet名称获取sheet内容
        ReadExcel.__sheet = ReadExcel.__workbook.sheet_by_name(sheet_name)
    def get_number_of_rows(self):
        # '''
        #  获取表格中内容的最大行数
        # :return:__number_of_row
        # '''
        __rows_number = self.__sheet.nrows
        if ReadExcel.__print is True:
            print(__rows_number)
        return __rows_number
    def get_number_of_cols(self):
        # '''
        # 获取表格中内容最大的列数
        # :return: __number_of_cols
        # '''
        __cols_number = self.__sheet.ncols
        if ReadExcel.__print is True:
            print(__cols_number)
        return __cols_number
    def get_value_of_row(self, row_index):
        # """
        # 获取某一行的所有值构成列表
        # :param row_index: 行号
        # :return: 行内容组成的列表
        # """
        __row_value = self.__sheet.row_values(row_index)
        if ReadExcel.__print is True:
            print(__row_value)
        return __row_value
    def get_value_of_col(self, col_index):
        # """
        # 获取某一列的所有值构成的列表
        # :param col_index: 列号
        # :return: 列中内容组成的列表
        # """
        __col_value = self.__sheet.col_values(col_index)
        if ReadExcel.__print is True:
            print(__col_value)
        return __col_value
    def get_value_of_cell(self, row_index, col_index):
        # """
        # 获取某一个单元格中的值
        # :param row_index: 行号
        # :param col_index: 列号
        # :return: 单元格中的内容
        # """
        # 第row_index行 col_index列是内容
        __cell_value = self.__sheet.cell(row_index, col_index).value
        if ReadExcel.__print is True:
            print(__cell_value)
        return __cell_value
#实现从多少行到多少行识别EXCEL测试用例
    def get_dates(self, row_first: int, row_later: int):  # 获取想要行数对应列的值
        self.nrow = int(self.get_number_of_rows())
        self.row_first = row_first
        self.row_later = row_later
        self.row_index = self.get_value_of_row(0)
        if self.row_index == ['ID', 'NAME', 'URL', 'PATH', 'HEADERS', 'DATA', 'EXPECTED', 'ASSERT']:
            if type(self.row_first) == int and type(self.row_later) == int:
                if self.row_first > 0 or self.row_later <= self.nrow:
                    if self.row_first <= self.row_later:
                        data_list = []
                        for number in range(self.row_first, self.row_later + 1):
                            case_id = int(self.get_value_of_cell(number, 0))
                            case_name = self.get_value_of_cell(number, 1)
                            case_url = self.get_value_of_cell(number, 2)
                            case_path = self.get_value_of_cell(number, 3)
                            case_headers = (self.get_value_of_cell(number, 4))
                            case_data = self.get_value_of_cell(number, 5)
                            case_expected = self.get_value_of_cell(number, 6)
                            case_assert = self.get_value_of_cell(number, 7)
                            value = [case_id, case_name, case_url, case_path, case_headers, case_data, case_expected,
                                     case_assert]
                            res = tuple(value)
                            data_list.append(res)
                        return data_list
                        # print(data_list)
                    else:
                        return f"起始行:{row_first}不能大于最大行{row_later}"
                else:
                    return f"请检查数值大小应为:<=1<={self.nrow}"
            else:
                return f"请检查数据类型填写有误:{row_first}{row_later}应均为整型数据"
        else:
            return f"请不要更改测试用例模板,您的模板为{self.row_index},与预期不符"
    def write(self, sheet, row, col, value):
        # ''''
        # 将数值写入到执行excel单元格中
        # :param new_workbook: 写入表名称
        # :param w_sheet:sheet栏名称
        # :row:行
        # :col:列
        # '''
        new_workbook = copy.copy(ReadExcel.__workbook)
        w_sheet = new_workbook.get_sheet(sheet)
        w_sheet.write(row, col, value)
        new_workbook.save(self.file_name)  # 保存文件
# 写入Excel文件,重新创建一个每次都是新的
def write_excel(file=None, data_list=[], sheet="sheet1"):
    """
    不存在则创建一个文件写入
    :param file:
    :return:
    """
    data_path = DATAS_EXCEL_PATH
    file_path = data_path + file
    workbook = xlwt.Workbook(encoding="utf-8")  # 新创建一个工作区域
    sheet = workbook.add_sheet(sheet)  # 添加一个执行sheet
    """
    # 创建表头方法
    sheet.write(0, 0, label='用例ID')
    sheet.write(0, 1, label='用例名')
    sheet.write(0, 2, label='作者')
    sheet.write(0, 3, label='用例路径')
    sheet.write(0, 4, label='用例文件')
    sheet.write(0, 5, label='用例函数')
    """
    for i in range(len(data_list)):  # 这里不含表头,含表头需要 range(1,len(data_list+1))
        print(f"当前处理第几行数据:{i}")
        sheet.write(data_list[i][0], data_list[i][1], data_list[i][2])
    workbook.save(file_path)
# 写入Excel文件 先读取之前的内容  插入之前的  并保存新的
def write_add_excel(file=None, data_list=[], index=0):
    """
    写入一个存在的数据
    :param file:
    :return:
    """
    data_path = DATAS_EXCEL_PATH
    file_path = data_path + file
    # 读取已存在的 Excel 文件
    workbook = xlrd2.open_workbook(file_path)
    sheet = workbook.sheet_names()[index]
    _sheet = workbook.sheet_by_index(index)

    # 创建一个新的 Excel 文件
    new_workbook = xlwt.Workbook()
    new_sheet = new_workbook.add_sheet(sheet)

    # 写入已存在的数据
    for row in range(_sheet.nrows):
        for col in range(_sheet.ncols):
            new_sheet.write(row, col, _sheet.cell_value(row, col))

    # # 写入新的数据
    # new_sheet.write(sheet.nrows, 0, 'New Data 1')
    # new_sheet.write(sheet.nrows, 1, 'New Data 2')
    """
    # 创建表头方法
    sheet.write(0, 0, label='用例ID')
    sheet.write(0, 1, label='用例名')
    sheet.write(0, 2, label='作者')
    sheet.write(0, 3, label='用例路径')
    sheet.write(0, 4, label='用例文件')
    sheet.write(0, 5, label='用例函数')
    """
    for i in range(len(data_list)):  # 这里不含表头,含表头需要 range(1,len(data_list+1))
        print(f"当前处理第几行数据:{i}")
        new_sheet.write(data_list[i][0], data_list[i][1], data_list[i][2])
    new_workbook.save(file_path)
# 调用方法:
    write_excel(file='ceshi.xlsx', data_list=[[0, 0, '3']])
    write_add_excel(file='ceshi.xlsx', data_list=[[0, 2, '3'], [1, 1, 2], [1, 0, 2]])
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勒布朗-孟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值