封装excel数据层代码,log模块导入

封装excel操作代码,提高复用率

整体封装思想阐述:

表内用例格式构建

表头,case_id,title,data,expected

表体,测试用例数据

首先获取表体第一行的数据组成的列表

之后获取由二行开始的所有数据,

之后逐条将表头与数据zip封包,之后转换为字典。

注意点:

从excel中读取的数据,除了数值,其他不管保存的时候什么格式,读取出来都是str

解决该问参考使用eval()方法,本篇不赘述

上代码

class HandleExcel:
    """用来操作excel文件的类="""

    def __init__(self, filename, sheetname):
        """
        初始化对象属性
        :param filename: excel文件路径
        :param sheetname: 表单名
        """
        self.filename = filename
        self.sheetname = sheetname

    def read_data(self):
        """读取excel中的数据"""
        # 获取工作簿对象
        wb = openpyxl.load_workbook(self.filename)
        # 选择表单
        sh = wb[self.sheetname]
        # 按行获取所有的数据,转换为列表
        rows_data = list(sh.rows)
        # 创建一个空列表用来保存所有的用例数据
        cases_data = []
        # 获取表单中的表头数据,放入title这个列表中
        title = []
        for i in rows_data[0]:
            title.append(i.value)

        # 获取除表头之外的其他行数据
        for item in rows_data[1:]:
            # 每遍历出来一行数据,就创建一个空列表,来存放该行数据
            values = []
            for i in item:
                values.append(i.value)
            # 将该行的数据和表头进行打包,转换为字典
            case = dict(zip(title, values))
            # 将该行数据打包的字典,放入cases_data中
            cases_data.append(case)
        # 返回读取出来的所有数据
        return cases_data

    def write_data(self, row, column, value):
        """
        写入数据
        :param row: 行
        :param column: 列表
        :param value: 写入的值
        :return:
        """
        # 获取工作簿对象
        wb = openpyxl.load_workbook(self.filename)
        # 选择表单
        sh = wb[self.sheetname]
        # 根据行、列去写入内容
        sh.cell(row=row, column=column, value=value)
        # 把工作簿保存为文件
        wb.save(self.filename)

方法封装成类,并且通过类的init方法来实现参数化。

调用时只需要实例化Handle类,并传入相应filename,sheetname即可实现对用例数据读取,并且可根据需要扩展写入操作。

尝试调用

@ddt
class RegisterTestCase(unittest.TestCase):
    excel = HandleExcel("cases.xlsx", "register")
    cases = excel.read_data()

    @data(*cases)
    def test_register(self, case):
        # 1、准备用例参数
        # 2,调用被测功能函数,传参,得到实际结果
        # 3,断言

至此,基于python操作excel整理用例数据的自动化雏形实现。

LOG日志模块引入

为什么引入?

记录用例执行,抛出异常,方便测试后回溯

简单介绍

import logging

logging.debug("这是一条debug级别的日志")
logging.info("这是一条info级别的日志")
logging.warning("这是一条warning级别的日志")
logging.error("这是一条error级别的日志")
logging.critical("这是一条critical级别的日志")

使用步骤

创建一个日志收集器

名字自定义,在团队中使用个人姓名即可

log = logging.getLogger("addicated")  # loger的名字,根据自己喜好来玩

设置收集器手机的log等级

log.setLevel("DEBUG")

 

创建一个输出到文件的输出渠道及输出的log等级

fh = logging.FileHandler("logname.log",encoding='utf-8')
fh.setLevel('DEBUG')
log.addHandler(fh)  # 创建输出渠道之后要将其作为参数添加到log对象中
# 上面这步容易遗忘,

创建一个输出到控制台的输出渠道

sh = logging.StreamHandler()
sh.setLevel('ERROR')  # 设置输出到控制台的输出等级
log.addHandler(sh)  # 创建输出渠道之后要将其作为参数添加到log对象中

设置日志的输出格式

可在网上找一个恰当美观的格式引入。

formats='%(asctime)s -- [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
# 创建一个输出格式对象
form = logging.Formatter(formats)
# 将输出格式添加到输出渠道
fh.setFormatter(form)
sh.setFormatter(form)

输出日志

# 输出日志
# 注意点:自己创建的的日志收集器收集,要使用收集器取记录,不能直接使用logging去记录
# logging.error("----------------error----------")

log.info("-------------info等级的日志-------------")
log.error("-------------error等级的日志-------------")

日志的轮转

创建一个按时间进行轮转的文件输出渠道

# fh = TimedRotatingFileHandler("user.log",encoding="utf8",when="S",interval=1,backupCount=7)
# fh.setLevel("DEBUG")
# log.addHandler(fh)

或者按照文件大小进行轮转

fh = RotatingFileHandler("musen.log",encoding="utf8",maxBytes=1024*1024*20,backupCount=7)
fh.setLevel("DEBUG")
log.addHandler(fh)

和之前的用法相同,添加到llog对象中即可

最后封装成方法,将log对象返回即可方便在其他类中调用使用。

完整代码如下

def create_logger():
    """
    创建日志收集器
    :return: 日志收集器
    """
    # 第一步:创建一个日志收集器
    log = logging.getLogger("addicated")

    # 第二步:设置收集器收集的等级
    log.setLevel("DEBUG")

    # 第三步:设置输出渠道以及输出渠道的等级
    fh = logging.FileHandler("mylog.log", encoding="utf8")
    fh.setLevel("DEBUG")
    log.addHandler(fh)

    sh = logging.StreamHandler()
    sh.setLevel("WARNING")
    log.addHandler(sh)

    # 第四步:设置输出格式
    formats = '%(asctime)s -- [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
    # 创建一个输出格式对象
    form = logging.Formatter(formats)
    # 将输出格式添加到输出渠道
    fh.setFormatter(form)
    sh.setFormatter(form)

    return log



log = create_logger()
原文地址:https://www.cnblogs.com/addicated/p/13194391.html