allure-framework / allure-framework/allure-python

Integration with python/pytest logging functionality

オープン
#209 コメント 4 件 リアクション 11 件 担当者 0 名 GitHub で見る
theme:core type:enhancement
主要言語
Python
スター
814
フォーク
260
PR マージ指標
30日以内にマージされた PR はありません

説明

#### I'm submitting a ...
- [x] feature request

#### What is the current behavior?
logger calls from python logging module are not shown on the report.

#### What is the expected behavior?
they be shown on the report

#### What is the motivation / use case for changing the behavior?
the report should contain as much info as possible. Log calls are very relevant information.

#### Please tell us about your environment:

- Allure version: 2.6.0
- Test framework: pytest@3.4
- Allure adaptor: allure-pytest@2.3.2b1

#### Other information

I actually have a simple working workaround for this, by defining a custom logging handler for Allure (you can use it on conftest.py or as a plugin):

```
import logging
import allure

class AllureLoggingHandler(logging.Handler):
def log(self, message):
with allure.step('Log {}'.format(message)):
pass

def emit(self, record):
self.log("({}) {}".format(record.levelname, record.getMessage()))

class AllureCatchLogs:
def __init__(self):
self.rootlogger = logging.getLogger()
self.allurehandler = AllureLoggingHandler()
def __enter__(self):
if self.allurehandler not in self.rootlogger.handlers:
self.rootlogger.addHandler(self.allurehandler)
def __exit__(self, exc_type, exc_value, traceback):
self.rootlogger.removeHandler(self.allurehandler)

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_setup():
with AllureCatchLogs():
yield

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_call():
with AllureCatchLogs():
yield

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_teardown():
with AllureCatchLogs():
yield
```

Then you can test with a simple test:

```
def test_print():
logging.info("Logging an info message")
logging.debug("Logging a DEBUG message")
logging.warning("Sample time is too low!")
raise Exception
```
It can be added for the test like this example or easily added also in the config section of a custom pytest plugin. Not sure if this could be merged into allure pytest plugin though.

It is still missing more complete formatting (module name). Also the handler log level is not dynamically adjusted as done in the pytest logging plugin, but it seems to work fine like this because pytest sets both the handler and the logger to the same level.

It even works with pytest logging switches. For instance, if we run this test with --log_level=INFO, the debug log record won't appear:

![image](https://user-images.githubusercontent.com/20566367/36359007-e2fdffc8-1516-11e8-9c81-d06b704c18f3.png)

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

まず、issue にある pytest の統合ポイントと conftest.py の hookwrapper の例を確認し、次にテストライフサイクルのイベントがどのように Allure レポートデータになるかを追跡します。提供された logging handler とサンプルテストを使用して、pytest のログレベル切り替えを尊重しながら Python の logging レコードがレポートに表示されるかを確認します;カスタム handler なしで統合が動作すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
testing
issue の種類
機能追加
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。