python接口自动化测试框架设计( 第二章)-封装Excel方法

如果你不太明白这篇文章是做什么的,点击下方进入介绍篇:

python接口自动化测试框架结构 ( 第一章)

点击跳转到第一章,你可以知道框架结构!!

前方高能!!正文开始!!

1、在utlis.py封装Excel读写方法 (文件位置跳转第一章看代码结构)

大家需要知道,读取Excel分两种情况,一种是写入,当然还有读取Excel

class Excel:
    """
    初始化方法 参数type:为r是读取excel,为w是写入excel,参数file_name是w文件路径
    """
    def __init__(self, type, file_name):
        """
        :param type: r:读 w:写
        :param file_name: 读取文件路径
        """
        # 读取excel
        if type == 'r':
            # 打开文件
            self.workbook = xlrd.open_workbook(file_name)
            # 获取到所有的sheet_names获取到所有,得到的是一个list
            self.sheet_names = self.workbook.sheet_names()
            # 装载所有数据的list
            self.list_data = []
        # 写入excel
        elif type == 'w':
            self.filename = file_name
            self.wb = load_workbook(self.filename) #读取存在文件
            self.ws = self.wb.active 

2、创建testcase.xlsx文件(文件位置跳转第一章看代码结构)

文件内容如下:
在这里插入图片描述
创建成功后新增read方法:

    def read(self)->list:
        # 根据sheet_name去读取用例,并获取文件的总行数获取到每行的内容
        for sheet_name in self.sheet_names:
            # 通过每个sheetname获取到每个页的内容
            sheet = self.workbook.sheet_by_name(sheet_name)
            # 获取总行数
            max_ros = sheet.nrows
            # 根据总行数进行读取
            for i in range(0, max_ros):
                rowvalues = sheet.row_values(i)
                # 每一行的内容添加进去
                self.list_data.append(rowvalues)
        #返回ex数据,格式为list
        return self.list_data

在utils.py底部加入如下代码:

if __name__ == '__main__':
    file = '../database/testcase.xlsx'
    e = Excel('r', file)
    list_read=e.read()
    for i in list_read:
        print(i)

输出结果为:
在这里插入图片描述
3、需进一步优化将ex表内表头修改为英文,并将每一行数据转换成一个个字典新建方法excel_dict:

def excel_dict(data):
    """
    1.将excel头部替换成英文的
    2.处理成dict格式
    """
    header = {
        '用例编号': 'id',
        '请求类型': 'get_type',
        '测试url': 'url',
        '测试接口': 'interface',
        '用例标题': 'title',
        '测试数据': 'data',
        '预期结果': 'expected',
        '请求头': 'header',
        '响应数据状态/json返回数据的code': 'code',
        '状态码': 'status',
        '响应状态': 'msg'
    }
    head = []
    list_dict_data = []
    for d in data[1]:
        # 获取到英文的头部内容如果为中文,则替换成英文 进行改成一个k
        # 传入两个参数的作用是 查到则返回查到的数据查不到则返回传入的原数据
        d = header.get(d, d)
        # 将去除的头部英文装进list中
        head.append(d)
    # 获取到数据进行切片处理,0坐标为标题,1坐标是头部
    for b in data[2:]:
        # 头部和内容拼接为json串
        dict_data = {}
        for i in range(len(head)):
            # 之所以判断类型,如果不进行判断会出现str的错误,strip去除空格也有转str的用法
            if isinstance(b[i], str):
                dict_data[head[i]] = b[i].strip()
            else:
                dict_data[head[i]] = b[i]
        # list里面是字典格式
        list_dict_data.append(dict_data)
    return list_dict_data

在utils.py底部加入如下代码:

if __name__ == '__main__':
    file = '../database/testcase.xlsx'
    e = Excel('r', file)
    list_read = e.read()
    a = excel_dict(list_read)
    print(a)
    print(a[0]['get_type']) # 获取列表内第一个字典的get_type的值

运行结果如下:
在这里插入图片描述

4、实现写入功能,新增方法write:

    def write(self, data):
        """
        数据写入ex表内
        :param data: 需要写入的数据:list
        :return:
        """
        self.ws.append(data)
        self.wb.save(self.filename)

在utils.py底部加入如下代码:

if __name__ == '__main__':
    # file = '../database/testcase.xlsx'
    file = '../results/results.xlsx'
    e = Excel('w', file)
    a = [1,2,3,4,5,6,7,8]
    e.write(a)

运行结果如下:
在这里插入图片描述
成功写入文件,需注意需写入的内容为list格式。

5、写入格式必须为例表格式、新增方法write_result,将所有要写入的内容处理成列表,代码如下:

返回为列表格式(可能多此一举,其余方法实现便可、这边考虑方便后续管控)

def write_result(value1=None, value2=None, value3=None,
                 value4=None, value5=None, value6=None,
                 value7=None, value8=None) -> list:
    """
    将写入的值返回:为list格式
    :param value1: 值1 - 编号
    :param value2: 值2 - 测试接口名字
    :param value3: 值3 - 测试用例标题
    :param value4: 值4 - 测试url地址
    :param value6: 值5 - 测试数据/json
    :param value6: 值6 - 预计结果
    :param value7: 值7 - 实际结果
    :param value8: 值8 - 执行情况
    :return:
    """
    result_list = []
    result_list.append(value1)
    result_list.append(value2)
    result_list.append(value3)
    result_list.append(value4)
    result_list.append(value5)
    result_list.append(value6)
    result_list.append(value7)
    result_list.append(value8)
    return result_list

在utils.py底部加入如下代码:

if __name__ == '__main__':
    # file = '../database/testcase.xlsx'
    file = '../results/results.xlsx'
    e = Excel('w', file)
    e.write(write_result(1,2,3,4,5,6,7,8))

运行成功后结果如下:
在这里插入图片描述
写入数据成功!!

完整版代码如下:

"""公共方法类"""
import logging
import xlrd
from openpyxl import load_workbook


class Excel:
    """
    初始化方法 参数type:为r是读取excel,为w是写入excel获取不同的实例,参数file_name是将要读取的文件
    """

    def __init__(self, type, file_name):
        """
        :param type: r:读 w:写
        :param file_name: 文件路径
        """
        # 读取excel
        if type == 'r':
            # 打开文件
            self.workbook = xlrd.open_workbook(file_name)
            # 获取到所有的sheet_names,sheet1,sheet2获取到所有,获取到的是一个list
            self.sheet_names = self.workbook.sheet_names()
            # 装载所有数据的list
            self.list_data = []
        # 写入excel
        elif type == 'w':
            self.filename = file_name
            self.wb = load_workbook(self.filename)
            self.ws = self.wb.active

    def read(self) -> list:
        # 根据sheet_name去读取用例,并获取文件的总行数获取到每行的内容
        for sheet_name in self.sheet_names:
            # 通过每个sheetname获取到每个页的内容
            sheet = self.workbook.sheet_by_name(sheet_name)
            # 获取总行数
            rosw = sheet.nrows
            # 根据总行数进行读取
            for i in range(0, rosw):
                rowvalues = sheet.row_values(i)
                # 讲每一行的内容添加进去
                self.list_data.append(rowvalues)
            #     去除大标题第一行进行切割处理
        # 将得到的excel数据返回进行处理
        return self.list_data

    def write(self, data):
        """
        数据写入ex表内
        :param data: 需要写入的数据:list
        :return:
        """
        self.ws.append(data)
        self.wb.save(self.filename)
        logging.info('测试数据写入结果: 成功写入')


def excel_dict(data):
    """
    1.将excel头部替换成英文的
    2.处理成json/dict格式
    """
    header = {
        '用例编号': 'id',
        '请求类型': 'get_type',
        '测试url': 'url',
        '测试接口': 'interface',
        '用例标题': 'title',
        '测试数据': 'data',
        '预期结果': 'expected',
        '请求头': 'header',
        '响应数据状态/json返回数据的code': 'code',
        '状态码': 'status',
        '响应状态': 'msg'
    }
    head = []
    list_dict_data = []
    for d in data[1]:
        # 获取到英文的头部内容如果为中文,则替换成英文 进行改成一个k
        # 传入两个参数的作用是 查到则返回查到的数据查不到则返回传入的原数据
        d = header.get(d, d)
        # 将去除的头部英文装进list中
        head.append(d)
    # 获取到数据进行切片处理,0坐标为标题,1坐标是头部
    for b in data[2:]:
        # 头部和内容拼接为json串
        dict_data = {}
        for i in range(len(head)):
            # 之所以判断类型,如果不进行判断会出现str的错误,strip去除空格也有转str的用法
            if isinstance(b[i], str):
                dict_data[head[i]] = b[i].strip()
            else:
                dict_data[head[i]] = b[i]
        # list里面是字典格式
        list_dict_data.append(dict_data)
    return list_dict_data


def write_result(value1=None, value2=None, value3=None,
                 value4=None, value5=None, value6=None,
                 value7=None, value8=None) -> list:
    """
    将写入的值返回:为list格式
    :param value1: 值1 - 编号
    :param value2: 值2 - 测试接口名字
    :param value3: 值3 - 测试用例标题
    :param value4: 值4 - 测试url地址
    :param value6: 值5 - 测试数据/json
    :param value6: 值6 - 预计结果
    :param value7: 值7 - 实际结果
    :param value8: 值8 - 执行情况
    :return:
    """
    result_list = []
    result_list.append(value1)
    result_list.append(value2)
    result_list.append(value3)
    result_list.append(value4)
    result_list.append(value5)
    result_list.append(value6)
    result_list.append(value7)
    result_list.append(value8)
    return result_list


if __name__ == '__main__':
    # file = '../database/testcase.xlsx'
    file = '../results/results.xlsx'
    e = Excel('w', file)
    e.write(write_result(1, 2, 3, 4, 5, 6, 7, 8))

点击不迷路,python接口自动化测试框架结构 ( 第三章)
非常感谢您的阅读,第一次写博客文章,写的不好的地方多度包含,欢迎大佬指出代码中的不足,共同提升、共同进步!(要源代码 点赞关注后+VX dengwoi )

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值