python日志模块的使用

学习一下python的日志模块logging,可以参考如下博客,写得很详细

https://www.cnblogs.com/yyds/p/6901864.html

https://www.cnblogs.com/goodhacker/p/3355660.html

https://cuiqingcai.com/6080.html

 

实践:把日志模块加到requests+excel接口测试框架中

新建一个logs文件夹,用来存放输出的日志文件;然后在utils工具中创建一个logger.py,封装日志调用方法

logger.py的内容如下

# -*- coding:utf-8 -*-
import logging
import os
from utils import getcwd


log_path = os.path.dirname(getcwd.get_cwd())
print(log_path)
class Logger:
    def __init__(self,loggername):

        #创建一个logger
        self.logger = logging.getLogger(loggername)
        self.logger.setLevel(logging.DEBUG)

        #创建一个handler,用于写入日志文件
        log_path = os.path.dirname(getcwd.get_cwd())+"/logs/" # 指定文件输出路径,注意logs是个文件夹,一定要加上/,不然会导致输出路径错误,把logs变成文件名的一部分了
        logname = log_path + 'out.log' #指定输出的日志文件名
        fh = logging.FileHandler(logname,encoding = 'utf-8')  # 指定utf-8格式编码,避免输出的日志文本乱码
        fh.setLevel(logging.DEBUG)

        #创建一个handler,用于将日志输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)

        # 定义handler的输出格式
        formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        # 给logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)


    def get_log(self):
"""定义一个函数,回调logger实例"""
return self.logger if __name__ == '__main__': t = Logger("hmk").get_log().debug("User %s is loging" % 'jeck')

 

在主函数run_main.py中使用日志

# coding: utf-8
# author: hmk

from base.main import RunMethod
from get_datas.get_data import GetData
from utils.handle_excel import HandleExcel
import json
from utils.logger import Logger


class RunMain:
    def __init__(self):
        """实例化写好的类,备用"""
        self.run_method = RunMethod()
        self.get_data = GetData()
        self.excel = HandleExcel()
        self.logger = Logger(__name__)

    def run(self):
        count = self.get_data.get_nrows()
        # print(count)
        for i in range(1, count):
            priority = self.get_data.get_priority(i)  # 获取用例的优先级priority
            url = self.get_data.get_url(i)  # 获取用例的url
            method = self.get_data.get_method(i)  # 获取请求方法
            params = self.get_data.get_params(i)  # 获取参数(此处取出来的数据是字符串格式)
            params_load = json.loads(params)  # 将获取到的参数反序列化,即转化为字典
            except_value = self.get_data.get_except_value(i)  # 获取预期结果值
            if priority == 'H':
                r = self.run_method.run_main(method, url, params_load, header=None)  # 如果是高优先级用例,则执行
                # print(r)
                self.logger.get_log().debug('第'+str(i)+'个接口的返回结果为:%s',r) # 输出接口响应内容
                # print(type(r))
                if except_value in r:
                    # print(self.get_data.get_caseSeq(i) + '测试通过')
                    self.logger.get_log().debug('第' + str(i) + '接口测试通过')
                    # self.get_data.write_values(i, 'PASS')  # 调用get_data.py文件中的write_values()方法
                    self.excel.write_value(i, 11, 'pass')  # 调用handle_excel.py文件中的write_value()方法
                else:
                    # print(self.get_data.get_caseSeq(i) + '执行失败')
                    self.logger.get_log().debug('第' + str(i) + '接口测试不通过')
                    # self.get_data.write_values(i, 'FAIL')
                    self.excel.write_value(i, 11, 'fail')


if __name__ == '__main__':
    t = RunMain()
    t.run()

打印出的日志内容

这样就可以替代用print来查看代码运行的输出内容了

 

posted @ 2019-02-28 10:56  我是冰霜  阅读(29374)  评论(1编辑  收藏  举报