Skip to main content

一个 pytest 插件,用于通过 fluentd 提供日志

项目描述

pytest 流利的

一个 Python 包,用于通过流利的日志记录扩展 pytest

描述

Pytest 是最强大的测试套件之一,具有许多功能和许多插件。Fluentd 是一个成熟的日志收集器,用于许多现代 Web 架构。那么,为什么不将这两个世界放在一起以获得对分布式测试运行的实时日志访问。

pytest-fluent 使您能够将您的测试数据从遍布您的基础设施的任何节点立即转发到您喜欢的日志接收器。流式数据可用于每个 pytest 阶段,并以 JSON 格式格式化。

每个 pytest 会话都获得分配的唯一标识符 (UID) 以及每个执行的测试用例。使用这些 UID,您可以轻松过滤会话和测试用例数据条目,例如在您最喜欢的数据库中。

安装

该软件包在 pypi.rsint.net 上可用,可以通过键入安装

pip install pytest-fluent

用法

pytest-fluent-logging 将元数据从 pytest 转发到 Fluentd 以进行进一步处理。元数据是

  • 唯一的会话 ID
  • 唯一的测试 ID
  • 会话状态分别测试用例
  • 测试用例名称
  • 试验结果
  • record_property条目
  • 自定义测试用例信息
  • 自定义会话信息

此外,可以扩展 Python 日志记录实例以转发测试用例运行时日志记录。

from logging import getLogger

def test_my_runtime_log():
    value = 1
    getLogger().info(f"Setting value to {value}")
    assert value == 1

或者

from logging import getLogger

def test_my_runtime_log():
    value = 1
    getLogger('fluent').info(f"Setting value to {value}")
    assert value == 1

夹具

为了创建您自己的记录器,请求以下夹具

def test_my_runtime_log(get_logger):
    logger = get_logger('my.Logger')
    value = 1
    logger.info(f"Setting value to {value}")
    assert value == 1

如果要获取当前的 UID,请使用以下固定装置

def test_unique_identifier(session_uid, test_uid):
    logger = get_logger('fluent')
    logger.info(f"Session ID: {session_uid}")
    logger.info(f"Test ID: {test_uid}")
    value = 1
    assert value == 1

回调

如果您想将自定义数据添加到pytest_sessionstartpytest_runtest_logstart阶段的数据集,请使用以下装饰器装饰您的回调函数。

from pytest_fluent import (
    additional_session_information_callback,
    additional_test_information_callback
)

@additional_session_information_callback
def provide_more_session_information() -> dict:
    return {
        "more": "session information"
    }

@additional_test_information_callback
def provide_more_test_information() -> dict:
    return {
        "more": "test information"
    }

pytest CLI 扩展

可以使用以下参数调用 pytest CLI 以配置 fluent-logging。

争论 描述 默认
--session-uuid 使用自定义的外部创建的 UUID,例如将 CI 作业与 pytest 会话链接。
--fluentd-主机 Fluentd 主机地址。如果未提供,将调用本地 Fluentd 实例。
--fluentd端口 流畅的主机端口 24224
--fluentd标签 设置自定义 Fluentd 标签 '测试'
--fluentd标签 设置自定义 Fluentd 标签 'pytest'
--扩展日志记录 使用 Fluent 处理程序扩展 Python 日志记录 错误的

发送什么数据?

pytest-fluent 将任何信息(例如阶段信息或来自测试用例的日志记录)作为单个块发送。例如,从test_addoptions.py测试中收集的数据如下所示

[
    {
        "status": "start",
        "stage": "session",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0"
    },
    {
        "status": "start",
        "stage": "testcase",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0",
        "testId": "6b444275-4450-4eff-b5d9-8355f0f99ab0",
        "name": "test_fluentd_logged_parameters.py::test_base"
    },
    {
        "type": "logging",
        "host": "myComputer",
        "where": "test_fluentd_logged_parameters.test_base",
        "level": "INFO",
        "stack_trace": "None",
        "message": "Logged from test_base",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0",
        "testId": "6b444275-4450-4eff-b5d9-8355f0f99ab0",
        "stage": "testcase"
    },
    {
        "type": "logging",
        "host": "myComputer",
        "where": "test_fluentd_logged_parameters.test_base",
        "level": "INFO",
        "stack_trace": "None",
        "message": "Logged from test_base",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0",
        "testId": "6b444275-4450-4eff-b5d9-8355f0f99ab0",
        "stage": "testcase"
    },
    {
        "name": "test_fluentd_logged_parameters.py::test_base",
        "outcome": "passed",
        "duration": 0.0013457999999999526,
        "markers": {
            "test_base": 1,
            "test_fluentd_logged_parameters.py": 1,
            "test_fluentd_logged_parameters0": 1
        },
        "stage": "testcase",
        "when": "call",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0",
        "testId": "6b444275-4450-4eff-b5d9-8355f0f99ab0"
    },
    {
        "status": "finish",
        "stage": "testcase",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0",
        "testId": "6b444275-4450-4eff-b5d9-8355f0f99ab0",
        "name": "test_fluentd_logged_parameters.py::test_base"
    },
    {
        "status": "finish",
        "stage": "session",
        "sessionId": "d8f01de3-8416-4801-9406-0ea3d5cfe3c0"
    }
]

其中数组中的每个对象都是通过 Fluentd 独立发送的。

变更日志

变更日志。

贡献

我们欢迎任何贡献、增强和错误修复。在Github上打开一个问题提交一个拉取请求

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pytest-fluent-0.1.0.tar.gz (18.3 kB 查看哈希)

已上传 source

内置分布

pytest_fluent-0.1.0-py3-none-any.whl (10.1 kB 查看哈希

已上传 py3