Visitar URL original
Implement Allure listeners · Issue #855 · allure-framework/allure-python · GitHub
Skip to content

Implement Allure listeners #855

Description

@delatrie

Context

People often need to somehow post-process Allure results according to their needs. Examples would be:

  • filtering data they don't want in the report (parameters/labels/fixtures)
  • customizing the default names, existing parameters, etc
  • sending the results somewhere on the fly

Many such requirements are user-specific, and there is no point in implementing them here. Often, it's not even possible because many such requirements contradict each other.

Instead, it would be reasonable to have an easy-to-use extension mechanism that users may utilize for their purposes.

Existing solution

Currently, users can register custom plugins in allure_commons.plugin_manager. For example:

from allure_commons import hookimpl
from allure_commons import plugin_manager

class MyListener:
    @hookimpl(tryfirst=True)
    def report_result(self, result):
        # post-process the result here
        ...

def pytest_configure(config):

    def cleanup():
        name = plugin_manager.get_name(listener)
        plugin_manager.unregister(name=name)

    listener = MyListener()
    plugin_manager.register(listener)
    config.add_cleanup(cleanup)

While covering many cases, the solution has some drawbacks:

  • Verbose API:
    • tryfirst is necessary to make sure the hook implementation is called after the default logger's one.
    • The cleanup needs to be added separately.
  • Limited hook spec:
    • No steps and fixtures post-processing (only at the test result level, which complicates the processing).
    • Limited support for attachments post-processing.
    • No hooks for pre-processing.

Implementation

Lifecycle listeners can be implemented with pluggy as a plugin manager + hook specs + user-friendly API on top of this. We already use pluggy to implement the Allure API, so it's just a matter of defining one or more hook specs, calling them via the existing allure_commons.plugin_manager or a separate one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions