BDD - Python Behave log 日志

2024-01-01 21:44
文章标签 python 日志 log bdd behave

本文主要是介绍BDD - Python Behave log 日志,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BDD - Python Behave log 日志

  • 引言
  • Behave log
    • Behave log 项目准备
      • feature 文件
      • step 文件
      • environment.py 文件
    • Behave log 执行
      • log_capture 模式
        • log_capture 开模式
        • log_capture 关模式即普通模式
      • logging-filter
      • logging-level
        • logcapture 模式
        • no-logcapture 模式
      • logging_format
        • log_capture 模式
        • no-logcapture 模式

引言

日志在整个测试运行中是非常重要的,帮助我们定位问题。也许你习惯用 Print。。。。,尽管效果差不多,但是显得不那么专业了,也不方便日志管理。今天我们来了解一下 Behave 日志机制。

想了解更多 Behave 相关的文章,欢迎阅读《Python BDD Behave 系列》,持续更新中。

Behave log

Behave 使用 Python 的标准 logging 模块进行日志记录。这意味着 Behave 继承了 Python 的日志机制,可以使用相同的配置和方法。

Behave log 项目准备

举个简单的实例

feature 文件

创建 log.feature 文件,准备一些 log 记录,一个运行会失败的 Scenario, 一个运行会成功的 Scenario

# log.featureFeature: Log ExampleScenario: PassingGiven I create log records with:| category | level   | message || root     |  FATAL  | Hello Alice  || foo      |  ERROR  | Hello Bob    || foo.bar  |  WARN   | Hello Charly || bar      |  INFO   | Hello Dora   || baz      |  DEBUG  | Hello Emily  |When another step passesScenario: FailingGiven I create log records with:| category | level   | message || root     |  FATAL  | Hello Alice  || foo      |  ERROR  | Hello Bob    || foo.bar  |  WARN   | Hello Charly || bar      |  INFO   | Hello Dora   || baz      |  DEBUG  | Hello Emily  |When another step fails

step 文件

# log_steps.pyfrom behave import *
from behave.configuration import LogLevel
import loggingdef make_log_record(category, level, message):if category in ("root", "__ROOT__"):category = Nonelogger = logging.getLogger(category)logger.log(level, message)@Given('I create log records with')
def step_I_create_logrecords_with_table(context):assert context.table, "REQUIRE: context.table"context.table.require_columns(["category", "level", "message"])for row in context.table.rows:category = row["category"]if category == "__ROOT__":category = Nonelevel = LogLevel.parse_type(row["level"])message = row["message"]make_log_record(category, level, message)# -----------------------------------------------------------------------------
# STEPS FOR: passing
# -----------------------------------------------------------------------------
@When('{word:w} step passes')
def step_passes(context, word):"""Step that always passes, mostly needed in examples."""pass# -----------------------------------------------------------------------------
# STEPS FOR: failing
# -----------------------------------------------------------------------------
@when(u'{word:w} step fails')
def step_fails(context, word):"""Step that always fails, mostly needed in examples."""assert False, "EXPECT: Failing step"

environment.py 文件

context.config.setup_logging() 简单地全局配置日志记录系统的基本配置,以设置默认的日志处理器、日志级别、格式等参数。

# environment.pyfrom behave import *def before_all(context):pass# print("Before all tests")context.before_all = "before all"# -- SAME-AS:# import logging# logging.basicConfig(level=context.config.logging_level)context.config.setup_logging()

Behave log 执行

log_capture 模式

  • Behave 默认 log_capture 模式是开的
  • log_capture 模式可通过命令行方式设置
  • log_capture 模式也可在 behave 配置文件 behave.ini 中设置
  • log_capture 模式只有在 Scenario 运行失败时才会捕获 log 记录
log_capture 开模式

所以执行命令 behave -f plain --logcapturebehave -f plain 效果是一样的,只有在 Scenario 运行失败时才会捕获 log 记录(看到 Captured logging: 部分

PS C:\Automation\Test\bdd> behave -f plain   
Feature: Log ExampleScenario: PassingGiven I create log records with ... passed in 0.000s| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step passes ... passed in 0.001sScenario: FailingGiven I create log records with ... passed in 0.001s| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step fails ... failed in 0.001s
Assertion Failed: EXPECT: Failing step
Captured logging:
CRITICAL:root:Hello Alice
ERROR:foo:Hello Bob
WARNING:foo.bar:Hello Charly
INFO:bar:Hello DoraFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.003s
log_capture 关模式即普通模式

命令行选项 --no-logcapture 普通模式,运行成功的 Scenario 也会输出 log

也可以在配置文件 behave.ini 设置,只需执行命令 behave -f plain
[behave]
log_capture = false

PS C:\Automation\Test\bdd> behave -f plain  --no-logcapture
Feature: Log ExampleScenario: Passing
CRITICAL:root:Hello Alice
ERROR:foo:Hello Bob
WARNING:foo.bar:Hello Charly
INFO:bar:Hello DoraGiven I create log records with ... passed in 0.000s| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step passes ... passed in 0.000sScenario: Failing
CRITICAL:root:Hello Alice
ERROR:foo:Hello Bob
WARNING:foo.bar:Hello Charly
INFO:bar:Hello DoraGiven I create log records with ... passed in 0.013s| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step fails ... failed in 0.000s
Assertion Failed: EXPECT: Failing stepFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.013s

logging-filter

根据 log catalog 来过滤 log 记录,只输出想要的 log 信息,前提条件是 log_capture 模式下
e.g.
过滤出包含 foo catalog 的日志记录: behave --logcapture --logging-filter=foo
过滤出包含子类 foo.bar catalog 的日志记录:behave --logcapture --logging-filter=foo.bar
过滤出包含非 foo catalog 的日志记录:behave --logcapture --logging-filter=-foo
过滤出包含 foo 或 bar catalog 的日志记录:behave --logcapture --logging-filter=foo,bar

过滤出包含 foo.bar 或不包含 bar catalog 的日志记录:behave --logcapture --logging-filter=foo.bar,-bar
所以会包含下面这些 log 记录
root --》 非 bar
foo.bar–》foo.bar

  Captured logging:CRITICAL:root:Hello Alice  ERROR:foo:Hello BobWARNING:foo.bar:Hello Charly
PS C:\ForKelly\Automation\Test\bdd> behave --logcapture --logging-filter=foo.bar,-bar
Feature: Log Example # Features/log/log.feature:1Scenario: Passing                 # Features/log/log.feature:3Given I create log records with # steps/log_steps.py:13| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step passes        # steps/log_steps.py:30Scenario: Failing                 # Features/log/log.feature:13Given I create log records with # steps/log_steps.py:13| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step fails         # steps/log_steps.py:40Assertion Failed: EXPECT: Failing stepCaptured logging:CRITICAL:root:Hello AliceERROR:foo:Hello BobWARNING:foo.bar:Hello CharlyFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.001s

logging-level

日志级别(logging level)用于指定日志消息的严重程度。不同的级别对应不同的常量(debug,info, warning, error),logcapture 模式和 logcapture 模式都可以应用.

logcapture 模式
PS C:\Automation\Test\bdd> behave -f plain -T --logging-level=WARN
Feature: Log ExampleScenario: PassingGiven I create log records with ... passed| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step passes ... passedScenario: FailingGiven I create log records with ... passed| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step fails ... failed
Assertion Failed: EXPECT: Failing step
Captured logging:
CRITICAL:root:Hello Alice
ERROR:foo:Hello Bob
WARNING:foo.bar:Hello CharlyFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.000s
no-logcapture 模式
PS C:Automation\Test\bdd> behave -f plain -T --logging-level=WARN --no-logcapture
Feature: Log ExampleScenario: Passing
CRITICAL:root:Hello Alice
ERROR:foo:Hello Bob
WARNING:foo.bar:Hello CharlyGiven I create log records with ... passed| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step passes ... passedScenario: Failing
CRITICAL:root:Hello Alice
ERROR:foo:Hello Bob
WARNING:foo.bar:Hello CharlyGiven I create log records with ... passed| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step fails ... failed
Assertion Failed: EXPECT: Failing stepFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.003s

logging_format

logging.Formatter 类用于配置日志的输出格式。通过使用格式化字符串,您可以指定日志消息的显示方式,包括日期、日志级别、消息内容等。
behave -f plain -T --logging-format=‘LOG.%(levelname)-8s %(name)-10s: %(message)s’

也可以通过配置文件设置:
[behave]
logging_format = %(asctime)s LOG.%(levelname)-8s %(name)s: %(message)s
logging_datefmt = %Y-%m-%dT%H:%M:%S

log_capture 模式
 [behave]
# config for log
log_capture = true
logging_level = WARN
logging_format = %(asctime)s  LOG.%(levelname)-8s %(name)s: %(message)s
logging_datefmt = %Y-%m-%dT%H:%M:%S
PS C:\Automation\Test\bdd> behave
Feature: Log Example # Features/log/log.feature:1Scenario: Passing                 # Features/log/log.feature:3Given I create log records with # steps/log_steps.py:13| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step passes        # steps/log_steps.py:30Scenario: Failing                 # Features/log/log.feature:13Given I create log records with # steps/log_steps.py:13| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |When another step fails         # steps/log_steps.py:40Assertion Failed: EXPECT: Failing stepCaptured logging:2024-01-01T20:51:36  LOG.CRITICAL root: Hello Alice2024-01-01T20:51:36  LOG.ERROR    foo: Hello Bob2024-01-01T20:51:36  LOG.WARNING  foo.bar: Hello CharlyFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.002s
no-logcapture 模式
 [behave]
# config for log
log_capture = false
logging_level = WARN
logging_format = %(asctime)s  LOG.%(levelname)-8s %(name)s: %(message)s
logging_datefmt = %Y-%m-%dT%H:%M:%S
PS C:\Automation\Test\bdd> behave
Feature: Log Example # Features/log/log.feature:1Scenario: Passing                 # Features/log/log.feature:3Given I create log records with # steps/log_steps.py:13| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |
2024-01-01T20:53:25  LOG.CRITICAL root: Hello Alice
2024-01-01T20:53:25  LOG.ERROR    foo: Hello Bob
2024-01-01T20:53:25  LOG.WARNING  foo.bar: Hello CharlyWhen another step passes        # steps/log_steps.py:30Scenario: Failing                 # Features/log/log.feature:13Given I create log records with # steps/log_steps.py:13| category | level | message      || root     | FATAL | Hello Alice  || foo      | ERROR | Hello Bob    || foo.bar  | WARN  | Hello Charly || bar      | INFO  | Hello Dora   || baz      | DEBUG | Hello Emily  |
2024-01-01T20:53:25  LOG.CRITICAL root: Hello Alice
2024-01-01T20:53:25  LOG.ERROR    foo: Hello Bob
2024-01-01T20:53:25  LOG.WARNING  foo.bar: Hello CharlyWhen another step fails         # steps/log_steps.py:40Assertion Failed: EXPECT: Failing stepFailing scenarios:Features/log/log.feature:13  Failing0 features passed, 1 failed, 0 skipped
1 scenario passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 0 skipped, 0 undefined
Took 0m0.003s

这篇关于BDD - Python Behave log 日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560599

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以