allure-framework / allure-framework/allure-python
Integration with python/pytest logging functionality
- Ngôn ngữ chính
- Python
- Star
- 814
- Fork
- 260
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
#### 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:

Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu bằng việc xem xét các điểm tích hợp của pytest và các ví dụ hookwrapper của conftest.py trong issue, sau đó lần theo cách các sự kiện trong vòng đời kiểm thử trở thành dữ liệu báo cáo Allure. Sử dụng logging handler được cung cấp và bài kiểm thử mẫu để kiểm tra xem các bản ghi logging của Python có xuất hiện trong báo cáo trong khi vẫn tuân theo các chuyển đổi mức log của pytest hay không; hoàn thành nghĩa là quá trình tích hợp hoạt động mà không cần handler tùy chỉnh.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- testing
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100