python自动填日志_【python自动化框架搭建】logging模块日志模块和单元测试课程总结(第16天课堂笔记)...

一、logging模块日志级别介绍

日志一共分成5个等级,从低到高分别是:

DEBUG      输出详细的运行情况,主要用于调试

INFO        确认一切预期运行,一般用于输出重要运行情况

WARNING    一些意想不到的事情发生了(例如:"警告内存不足"),但是这个软件还能按预期工作,在不久                               将来会出现问题

ERROR    发生了错误,软件没能执行一些功能,还可以继续执行

CRITICAL   一个严重的错误,表明程序本身可能无法继续运行

这5个等级,也分别对应5种打日志的方法:debug、info、warning、error、critical,默认的是WARNING、当在WARNING或之上时才被跟踪

# 开始使用log功能

logging.debug("这是DEBUG等级的信息")

logging.info("这是INFO等级的信息")

logging.warning("这是WARNING等级的信息")

logging.error("这是ERROR等级的信息")

logging.critical("这是CRITICAL等级的信息")

importunittestimporttest_casesfrom HTMLTestRunnerNew importHTMLTestRunnerfrom mylogger importlog#创建测试套件

suite =unittest.TestSuite()

log.info("测试套件创建成功")#加载用例用例到套件

loader =unittest.TestLoader()

suite.addTest(loader.loadTestsFromModule(test_cases))

log.info("测试套件加载完毕")

with open('zy_report.html', 'wb') as fb:#创建测试运行程序

runner = HTMLTestRunner(stream=fb,

title='柠檬班测试报告',

description='这是我们21期的第一份报告作业',

tester='MuSen')#执行测试套件中的用例

runner.run(suite)

importtimeimportunittestfrom register importregisterfrom read_excle02 importReadExclefrom Day16_2020_03_10.project_V1.ddt importddt, datafrom mylogger importlog"""ddt:能够实现数据驱动:通过用例数据,自动生成测试用例

自动遍历用例数据,去生成测试用例,

没遍历出来一条用例的数据,会当成一个参数,传到生成的用例中去"""@ddtclassRegisterTestCase(unittest.TestCase):

excle= ReadExcle("cases.xlsx", 'register')

cases=excle.read_data_obj()

@data(*cases)deftest_register(self, case):#第一步 准备用例数据

#获取用例的行号

row = case.case_id + 1

#获取预期结果,eval字符串换行为列表

excepted =eval(case.excepted)#获取用例入参

data =eval(case.data)#第二步: 调用功能函数,获取实际结果

res = register(*data)#第三步:比对预期结果和实际结果

try:

self.assertEqual(excepted, res)exceptAssertionError as e:

log.info("用例:{}执行未通过".format(case.title))

self.excle.write_data(row=row, column=5, value="未通过")

log.error(e)raiseeelse:

log.info("用例:{}执行通过".format(case.title))

self.excle.write_data(row=row, column=5, value="通过")

importopenpyxlclassCaseData:"""测试用例数据类,专门用来创建对象,存放用例数据"""

pass

classReadExcle(object):def __init__(self, filename, sheetname):

self.filename=filename

self.sheetname=sheetnamedefopen(self):"""打开工作表和表单"""self.wb=openpyxl.load_workbook(self.filename)

self.sh=self.wb[self.sheetname]defread_data(self):"""读取数据的方法"""

#打开工作簿和表单

self.open()#将表单中的内容,按行获取所有的格子

rows =list(self.sh.rows)#创建一个空列表,用例存放所有的用例数据

cases =[]#获取表头,放到一个列表中

title = [c.value for c inrows[0]]#获取除表头以外的其他行中的数据

for r in rows[1:]:#每遍历一行,创建一个列表,用例存放该行的数据

data = [c.value for c inr]#将表头和该行的数据进行聚合打包,转换字典

case_data =dict(zip(title, data))#将该行的用例数据加入到cases这个列表中

cases.append(case_data)#关闭工作簿对象

self.wb.close()#将读取好的数据返回出去

returncasesdefread_data_obj(self):"""读取数据的方法,数据返回的是列表嵌套对象的形式"""

#打开工作簿和表单

self.open()#将表单中的内容,按行获取所有的格子

rows =list(self.sh.rows)#创建一个空列表,用例存放所有的用例数据

cases =[]#通过列表推导式获取表头,放到一个列表中

title = [c.value for c inrows[0]]#获取除表头以外的其他行中的数据

for r in rows[1:]:#通过列表推导式,获取改行的数据,放到一个列表中

data = [c.value for c inr]#创建一个用例数据对象

case =CaseData()#将表头和该行的数据进行聚合打包,然后进行遍历

for i inzip(title, data):#通过反射机制,将表头设为对象属性,对应值设为对象的属性值

setattr(case, i[0], i[1])#将该行的用例数据加入到cases这个列表中

cases.append(case)#关闭工作薄

self.wb.close()#将读取好的数据返回出去

returncasesdefwrite_data(self, row, column, value):"""写入数据"""

#打开工作簿和表单

self.open()#写入内容

self.sh.cell(row=row, column=column, value=value)#保存文件

self.wb.save(self.filename)#关闭工作簿

self.wb.close()if __name__ == '__main__':

read= ReadExcle('cases.xlsx', 'register')#读取

#data = read.read_data_obj()

#print(data)

#read.write_data(2, 4, '通过')

#read.write_data(3, 4, '未通过')

封装日志类信息

importloggingclassMyLoger(object):#设置类方法

@classmethoddefcreate_log(cls):"""创建日志收集器"""

#创建一个日志收集器

my_log = logging.getLogger("my_log")#设置日志收集器的收集的输入等级

my_log.setLevel("DEBUG")#设置日志输出的格式:等级,时间,模块,

formater = logging.Formatter("%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s")#日志的输出

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

sh =logging.StreamHandler()

sh.setLevel("DEBUG")#设置日志输出的格式输出到:控制台

sh.setFormatter(formater)#设置输出到渠道的日志格式

my_log.addHandler(sh)#创建一个输出到文件的渠道

fh = logging.FileHandler(filename="test.log", encoding="utf8")

fh.setLevel("DEBUG")#设置输出到文件的日志格式

fh.setFormatter(formater)

my_log.addHandler(fh)returnmy_log

log=MyLoger.create_log()if __name__ == "__main__":

log=MyLoger.create_log()

log.info("hello world")

"""单元测试

unittest:四大核心概念

- 测试用例

- TestCase:测试用例类

- 测试用例中test开头的方法就是一个测试用例

- 测试套件

- TestSuite:创建测试套件

- 添加用例到套件:单条 类 模块

- 测试运行程序

- HTMLTestRunnerNew:创建运行程序,可以生成测试报告

- 测试环境的初始化和恢复

- setUP:每条用例执行前执行

- TearDown:每条用例执行之后执行

## openpyxl

- load_workbook:打开一个工作薄(传入一个excel文件)

- wb[表单名]:选择表单

- 表单对象.cell(row,column)

## ddt

- ddt

- 在测试用例类上@ddt

- data

- 测试用例方法上@data(*data)

## logging

- 创建日志收集器对象

- 设置收集等级

- 创建日志输出渠道:

- 输出到控制台(设置等级)

- 输出到文件(设置等级)

- 创建日志输出格式

- 把输出格式添加到输出渠道上

- 将收集器输出渠道添加到收集器上"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值