ログ アーキテクチャ (基本)

1.ログ

1. ログ:

ソフトウェアの実行中に発生するイベントを追跡する方法

2. ログの役割:

情報照会、サービス診断、データ分析

3. ログレベル:

5段階:(小から大まで)

デバッグ デバッグ情報

情報には重要な情報が記載されています

警告 警告メッセージ

エラーエラー例外情報

クリティカルな重大なエラー

2.Pythonでログを生成する方法

1.ロギングモジュール

Python 組み込みモジュールは、ログ レベル、ログ パス、ログ ファイルのロールバックなどの設定を含むログを生成できます。

1.1logging には 4 つの主要コンポーネントが含まれています。

1) ロガーロガーはアプリケーションプログラムのインターフェースを提供します。

2) Handler プロセッサは Logger を介して別の場所にログを出力します。

3) フォーマッタは、ログがどの種類の CCTV に表示されるかを決定します。

4) 出力を記録する必要があり、破棄する必要があるフィルタ フィルタ

1. 2logging の基本操作:

(1) コンソールにログを出力する

import logging


class DemoLog:
    def log(self):
        #创建一个日志器
        logger=logging.getLogger("logger")
        #设置日志输出的最低等级,低于当前等级就会被忽略
        logger.setLevel(logging.INFO)
        #创建处理器
        sh=logging.StreamHandler()
        #创建一个格式器s字符串d数字
        formator=logging.Formatter(fmt="%(asctime)s%(filename)s%(levelname)s%(message)s",datefmt="%Y%m%d%X")
        sh.setFormatter(formator)
        logger.addHandler(sh)
        logger.debug("debug信息")
        logger.error("erroe信息")
        logger.info("info信息")
        logger.warning("warning信息")
        logger.critical("critical信息")
    
        DemoLog().log()

操作結果:

(2) ログをファイルに出力する

import logging
import time


class DemoLog:
    def log(self):
        #创建一个日志器
        logger=logging.getLogger("logger")
        #设置日志输出的最低等级,低于当前等级就会被忽略
        #针对日志器设置,而不是logging模块
        logger.setLevel(logging.INFO)
        #创建处理器
        sh=logging.StreamHandler()
        #创建文件处理器,新建一个存放日志的包
        fh=logging.FileHandler(filename="Log/{}_log".format(time.strftime("%Y_%m_%d_%H_%M_%S",time.localtime())),
        encoding="utf-8")
        #创建一个格式器s字符串d数字
        formator=logging.Formatter(fmt="%(asctime)s%(filename)s%(levelname)s%(message)s",datefmt="%Y%m%d%X")
        sh.setFormatter(formator)
        logger.addHandler(sh)
        #添加日志对象
        logger.addHandler(fh)
        logger.debug("debug信息")
        logger.error("erroe信息")
        logger.info("info信息")
        logger.warning("warning信息")
        logger.critical("critical信息")
        
        
        DemoLog().log()

 操作結果:

(3) ログはすべてのイベントを追跡する必要がある

import logging

import time





class DemoLog:

    def log(self):
        
        #创建一个日志器
        
        logger=logging.getLogger("logger")
        
        #设置日志输出的最低等级,低于当前等级就会被忽略
        
        #针对日志器设置,而不是logging模块
        
        logger.setLevel(logging.INFO)
        
        #创建处理器
        
        sh=logging.StreamHandler()
        
        #创建文件处理器,新建一个存放日志的包
        
        fh=logging.FileHandler(filename="Log/{}_log".format(time.strftime("%Y_%m_%d_%H_%M_%S",time.localtime())),
        
        encoding="utf-8")
        
        #创建一个格式器s字符串d数字
        
        formator=logging.Formatter(fmt="%(asctime)s%(filename)s%(levelname)s%(message)s",datefmt="%Y%m%d%X")
        
        sh.setFormatter(formator)
        
        logger.addHandler(sh)
        
        #添加日志对象
        
        logger.addHandler(fh)
        
        return logger
        
        
        
        #logger.debug("debug信息")
        
        #logger.error("erroe信息")
        
        #logger.info("info信息")
        
        #logger.warning("warning信息")
        
        #logger.critical("critical信息")



    def sum(self,a,b):
    
        try:
        
        sum=a+b
        
        #记录描述
        
        self.log().info("正确计算出{}+{}之和".format(a,b))
        
        returnsum
        
        exceptExceptionaserror:
        
        self.log().error("{}+{}之和计算错误:{}".format(a,b,error))
        
        
        
        
        
        DemoLog().sum(1,2)

 操作結果:

 

重複したログが表示され、冗長性が表示される

解決:

import logging
import time


class DemoLog:
    def log(self):
        #创建一个日志器
        logger=logging.getLogger("logger")
        #设置日志输出的最低等级,低于当前等级就会被忽略
        #针对日志器设置,而不是logging模块
        logger.setLevel(logging.INFO)
        #如果没有日志对象的处理器
        if not logger.handlers:
            #创建处理器
            sh=logging.StreamHandler()
            #创建文件处理器,新建一个存放日志的包
            fh=logging.FileHandler(filename="Log/{}_log".format(time.strftime("%Y_%m_%d_%H_%M_%S",time.localtime())),
            encoding="utf-8")
            #创建一个格式器s字符串d数字
            formator=logging.Formatter(fmt="%(asctime)s%(filename)s%(levelname)s%(message)s",datefmt="%Y%m%d%X")
            sh.setFormatter(formator)
            logger.addHandler(sh)
            #添加日志对象
            logger.addHandler(fh)

            return logger

        #logger.debug("debug信息")
        #logger.error("erroe信息")
        #logger.info("info信息")
        #logger.warning("warning信息")
        #logger.critical("critical信息")

    def sum(self,a,b):
        try:
            sum=a+b
            #记录描述
            self.log().info("正确计算出{}+{}之和".format(a,b))
            return sum
        except Exception as error:
            self.log().error("{}+{}之和计算错误:{}".format(a,b,error))

    def test(self):
        sum1=self.sum(3,4)
        #sum1在执行时,会产生一个日志对象的处理器,所以当sum2执行时,会有两个日志对象logger的处理器
        sum2=self.sum(1,"a")

        DemoLog().test()

操作結果:

複数のログ オブジェクトを定義することはお勧めできません

pytest -s --html=パス

pytestによるhtml生成のテストレポート機能(Web版)

ルレディルのテストレポート

pytest ./Demo_1029/demo_log.py --lluredir=./Demo_1029/Log/xml

XMLを生成する

allure 生成 --clean ./Demo_1029/Log/xml -o ./Demo_1029/Log/xml

-o 出力

xml ファイルをカバーするアリュール ファイルを生成する

円グラフ、樹形図表示

3. 知識のポイント

次のように変更することはできません。

sh=logging.StreamHandler( fmt = "%(asctime)s%(filename)s%(levelname)s%(message)s" , datefmt = "%Y%m%d%X" )

 

自動化フレームワークに必要なスキル:

簡単なログ出力

フレーム内に封入

現在主流のpoモードとどう組み合わせるかなど、アイデアが最も重要

データのカプセル化、データ駆動型、キーワード駆動型、uitest、pytest と組み合わせて現在のプロジェクトに合ったテスト フレームワークを設計する方法

おすすめ

転載: blog.csdn.net/Lynn1111111/article/details/122587111