import logging
import pytest
# Function that logs messages at different levels
def log_messages():
logger = logging.getLogger('test_logger')
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
def test_log_level_filtering(caplog):
logger = logging.getLogger('test_logger')
logger.setLevel(logging.INFO) # Set log level to INFO
with caplog.at_level(logging.INFO, logger='test_logger'):
log_messages()
# Extract captured log messages
messages = [record.getMessage() for record in caplog.records]
# Assertions
assert 'Debug message' not in messages, 'DEBUG messages should be filtered out'
assert 'Info message' in messages, 'INFO message should be captured'
assert 'Warning message' in messages, 'WARNING message should be captured'
assert 'Error message' in messages, 'ERROR message should be captured'
The log_messages function logs messages at four levels.
In the test test_log_level_filtering, we set the logger level to INFO to filter out DEBUG messages.
We use pytest's caplog fixture to capture logs during the function call.
After running the function, we collect all log messages and assert that DEBUG messages are not present, while INFO, WARNING, and ERROR messages are present.
This approach ensures the log level filtering works as expected.