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 と組み合わせて現在のプロジェクトに合ったテスト フレームワークを設計する方法