[파이썬] pytest 테스트 결과 출력 형식화

Testing is an integral part of software development, and pytest is a popular testing framework in Python. When running pytest tests, it provides detailed information about the test results, including passed, failed, and skipped tests. However, the default output format may not always be the most readable or visually appealing.

Fortunately, pytest allows us to customize the test result output format. In this blog post, we will explore different ways to format and enhance the output of pytest test results to improve readability and provide additional information.

1. Using pytest built-in options

Pytest has several command-line options that allow us to modify the output format of the test results. Some of these options include:

By using these command-line options, we can adjust the output format of pytest on the fly based on our preferences and requirements.

2. Customizing pytest output with plugins

Pytest also allows us to extend its capabilities with various plugins, including those that focus on output formatting. One such popular plugin is pytest-html, which generates an HTML report of the test results.

To use pytest-html, we need to install it first by running the following command:

pip install pytest-html

After installing the plugin, we can generate an HTML report of our test results by running pytest with the --html=report.html option. This command will generate an HTML file called report.html containing detailed test results, including summaries, failure details, and even screenshots if provided.

pytest --html=report.html

Additionally, there are other pytest plugins available that provide different output formatting options, such as pytest-verbose-parametrize to enhance the output of parametrized tests or pytest-emoji to add emojis to the test result output.

3. Writing custom test result formatters

For more fine-grained control over the pytest test result output, we can create custom formatters using pytest’s hook system. By implementing the pytest_terminal_summary hook, we can modify, enhance, or completely change the way the test results are displayed.

Here’s an example of a custom test result formatter that prints test results in a different format:

import pytest

def pytest_terminal_summary(terminalreporter):
    passed = len(terminalreporter.stats.get('passed', []))
    failed = len(terminalreporter.stats.get('failed', []))
    skipped = len(terminalreporter.stats.get('skipped', []))

    print(f"Test results: Passed={passed} Failed={failed} Skipped={skipped}")

    # You can further customize the output format or add additional information

pytest.main()

When executing this script, the custom formatter will replace the default pytest test result output with the formatted text specified within the pytest_terminal_summary function. This way, we have full control over the output format and can add any additional information we need.

Conclusion

In this blog post, we explored different ways to format and enhance the output of pytest test results in Python. By using pytest’s built-in options, plugins, or writing custom formatters, we can improve the readability and visual appeal of the test results. Depending on our requirements, we can choose the method that suits our needs best.

Remember that clear and well-formatted test result output plays a significant role in understanding the test execution status and allows for better tracking and debugging during the software development process.