Source code for jamb.pytest_plugin.log
"""Logging utilities for jamb test messages."""
import pytest
# Stash key for storing JambLog instances per test
JAMB_LOG_KEY = pytest.StashKey["JambLog"]()
[docs]
class JambLog:
"""
Collector for custom test messages to include in traceability matrix.
Usage in tests::
@pytest.mark.requirement("SRS001")
def test_something(jamb_log):
jamb_log.note("Custom verification note")
jamb_log.test_action("Entered valid credentials")
jamb_log.expected_result("Login succeeds")
result = do_something()
jamb_log.actual_result(f"Got: {result}")
assert something
"""
[docs]
def __init__(self) -> None:
self._notes: list[str] = []
self._test_actions: list[str] = []
self._expected_results: list[str] = []
self._actual_results: list[str] = []
[docs]
def note(self, msg: str) -> None:
"""
Log a custom note to be included in the traceability matrix.
Args:
msg: The note to log. Will appear in the matrix output
for any requirement markers on this test.
"""
self._notes.append(str(msg))
[docs]
def test_action(self, action: str) -> None:
"""
Log a test action to be included in the traceability matrix.
Args:
action: Description of a test action performed.
Will appear in the "Test Actions" column.
"""
self._test_actions.append(str(action))
[docs]
def expected_result(self, result: str) -> None:
"""
Log an expected result to be included in the traceability matrix.
Args:
result: Description of an expected result.
Will appear in the "Expected Results" column.
"""
self._expected_results.append(str(result))
[docs]
def actual_result(self, result: str) -> None:
"""
Log an actual result to be included in the traceability matrix.
Args:
result: Description of an actual result observed during test execution.
Will appear in the "Actual Results" column.
"""
self._actual_results.append(str(result))
@property
def notes(self) -> list[str]:
"""Return all logged notes."""
return self._notes.copy()
@property
def test_actions(self) -> list[str]:
"""Return all logged test actions."""
return self._test_actions.copy()
@property
def expected_results(self) -> list[str]:
"""Return all logged expected results."""
return self._expected_results.copy()
@property
def actual_results(self) -> list[str]:
"""Return all logged actual results."""
return self._actual_results.copy()