allure-framework / allure-framework/allure-python
Implement Allure listeners
- 主要言語
- Python
- スター
- 814
- フォーク
- 260
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
### 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:
```python
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](https://pluggy.readthedocs.io/en/stable/) 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.
コントリビューションガイド
調査の方向性
まず、既存の allure_commons.plugin_manager と pluggy ベースの Allure API 実装を確認します。ここで説明する hook specs とユーザー向け API を中心に、listener のスコープとライフサイクルを定義します。ユーザーが手動で順序付けやクリーンアップを行わずに listener を登録でき、処理の前後で結果、ステップ、fixture、添付ファイルを処理できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- testing, tooling
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100