• python3.6+requests实现接口自动化5


    逐步完善中…

    本篇记录使用logging模块

    目录

    1、封装log类

    2、应用log类

    1、封装log类

    网上很多已经封装好的log类可直接保存到common中

    import logging, time
    import os
    # log_path是存放日志的路径
    cur_path = os.path.dirname(os.path.realpath(__file__))
    log_path = os.path.join(os.path.dirname(cur_path), 'logs')
    # 如果不存在这个logs文件夹,就自动创建一个
    if not os.path.exists(log_path):os.mkdir(log_path)
    
    class Log():
        def __init__(self):
            # 文件的命名
            self.logname = os.path.join(log_path, '%s.log'%time.strftime('%Y_%m_%d'))
            self.logger = logging.getLogger()
            self.logger.setLevel(logging.DEBUG)
            # 日志输出格式
            self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')
    
        def __console(self, level, message):
            # 创建一个FileHandler,用于写到本地
            fh = logging.FileHandler(self.logname, 'a', encoding='utf-8')  # 追加模式
            fh.setLevel(logging.DEBUG)
            fh.setFormatter(self.formatter)
            self.logger.addHandler(fh)
    
            # 创建一个StreamHandler,用于输出到控制台
            ch = logging.StreamHandler()
            ch.setLevel(logging.DEBUG)
            ch.setFormatter(self.formatter)
            self.logger.addHandler(ch)
    
            if level == 'info':
                self.logger.info(message)
            elif level == 'debug':
                self.logger.debug(message)
            elif level == 'warning':
                self.logger.warning(message)
            elif level == 'error':
                self.logger.error(message)
            # 这两行代码是为了避免日志输出重复问题
            self.logger.removeHandler(ch)
            self.logger.removeHandler(fh)
            # 关闭打开的文件
            fh.close()
    
        def debug(self, message):
            self.__console('debug', message)
    
        def info(self, message):
            self.__console('info', message)
    
        def warning(self, message):
            self.__console('warning', message)
    
        def error(self, message):
            self.__console('error', message)
    
    if __name__ == "__main__":
       log = Log()
       log.info("---执行步骤----")
    

     以上文件,主要是在控制台输出,以及在logs文件中以日期生成log文件

     

    2、应用log类

    场景一:接口请求执行失败时,希望针对性用error输出结果

    	def test_login_01(self):
    		"登录成功"
    		result_a=self.m.login("libai","opmsopms1231")
    		try:
    			self.self.assertIn(result_a,"贺喜你,登录成功")
    			log.info("登录成功了")
    		except Exception as e:
    			log.error("登录失败了:%s"%result_a)
    

      

    场景二:一条用例执行执行成功,希望知道是接口url和body信息等,可以使用info来输出到日志中

    比如我这里希望输出我的接口信息,则在接口中调用log里面的info方法来用日志记录:

    class my_login():
    	def login(self,user,password):
    		self.s=requests.session()
    
    		login_header={
                "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
                    }
    		login_url="http://111:8089/login"
    		login_body={"username":user,
                        "password":password}
    		p=self.s.post(url=login_url,headers=login_header,data=login_body)
    		log.info("url:%s"%login_url)
    		return p.json()['message']
    

      

  • 相关阅读:
    常用MIME类型(Flv,Mp4的mime类型设置)
    iOS完全自学手册——[一]Ready?No!
    iOS开发总结--三方平台开发之微信支付
    iOS开发总结--三方平台开发之分享
    SVN图形客户端上传静态库.a文件失败
    iOS开发--应用国际化,应用内切换语言
    iOS开发总结——项目目录结构
    iOS开发总结——协议代理的认识
    iOS 学习笔记
    iOS mark list
  • 原文地址:https://www.cnblogs.com/weizhideweilai/p/13246856.html
Copyright © 2020-2023  润新知