Metadata-Version: 2.0 Name: pytest-html Version: 1.15.2 Summary: pytest plugin for generating HTML reports Home-page: https://github.com/pytest-dev/pytest-html Author: Dave Hunt Author-email: dhunt@mozilla.com License: Mozilla Public License 2.0 (MPL 2.0) Keywords: py.test pytest html report Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Framework :: Pytest Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) Classifier: Operating System :: POSIX Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: MacOS :: MacOS X Classifier: Topic :: Software Development :: Quality Assurance Classifier: Topic :: Software Development :: Testing Classifier: Topic :: Utilities Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.6 Requires-Dist: pytest (>=3.0) Requires-Dist: pytest-metadata pytest-html =========== pytest-html is a plugin for `pytest `_ that generates a HTML report for the test results. .. image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg :target: https://github.com/pytest-dev/pytest-html/blob/master/LICENSE :alt: License .. image:: https://img.shields.io/pypi/v/pytest-html.svg :target: https://pypi.python.org/pypi/pytest-html/ :alt: PyPI .. image:: https://img.shields.io/travis/pytest-dev/pytest-html.svg :target: https://travis-ci.org/pytest-dev/pytest-html/ :alt: Travis .. image:: https://img.shields.io/github/issues-raw/pytest-dev/pytest-html.svg :target: https://github.com/pytest-dev/pytest-html/issues :alt: Issues .. image:: https://img.shields.io/requires/github/pytest-dev/pytest-html.svg :target: https://requires.io/github/pytest-dev/pytest-html/requirements/?branch=master :alt: Requirements Requirements ------------ You will need the following prerequisites in order to use pytest-html: - Python 2.7, 3.6, PyPy, or PyPy3 Installation ------------ To install pytest-html: .. code-block:: bash $ pip install pytest-html Then run your tests with: .. code-block:: bash $ pytest --html=report.html ANSI codes ---------- Note that ANSI code support depends on the `ansi2html `_ package. Due to the use of a less permissive license, this package is not included as a dependency. If you have this package installed, then ANSI codes will be converted to HTML in your report. Creating a self-contained report -------------------------------- In order to respect the `Content Security Policy (CSP) `_, several assets such as CSS and images are stored separately by default. You can alternatively create a self-contained report, which can be more convenient when sharing your results. This can be done in the following way: .. code-block:: bash $ pytest --html=report.html --self-contained-html Images added as files or links are going to be linked as external resources, meaning that the standalone report HTML-file may not display these images as expected. The plugin will issue a warning when adding files or links to the standalone report. Enhancing reports ----------------- Environment ~~~~~~~~~~~ The *Environment* section is provided by the `pytest-metadata `_, plugin, and can be accessed via the :code:`pytest_configure` hook: .. code-block:: python def pytest_configure(config): config._metadata['foo'] = 'bar' Extra content ~~~~~~~~~~~~~ You can add details to the HTML reports by creating an 'extra' list on the report object. Here are the types of extra content that can be added: ========== ============================================ Type Example ========== ============================================ Raw HTML ``extra.html('
Additional HTML
')`` `JSON`_ ``extra.json({'name': 'pytest'})`` Plain text ``extra.text('Add some simple Text')`` URL ``extra.url('http://www.example.com/')`` Image ``extra.image(image, mime_type='image/gif', extension='gif')`` Image ``extra.image('/path/to/file.png')`` Image ``extra.image('http://some_image.png')`` ========== ============================================ **Note**: When adding an image from file, the path can be either absolute or relative. **Note**: When using ``--self-contained-html``, images added as files or links may not work as expected, see section `Creating a self-contained report`_ for more info. There are also convenient types for several image formats: ============ ==================== Image format Example ============ ==================== PNG ``extra.png(image)`` JPEG ``extra.jpg(image)`` SVG ``extra.svg(image)`` ============ ==================== The following example adds the various types of extras using a :code:`pytest_runtest_makereport` hook, which can be implemented in a plugin or conftest.py file: .. code-block:: python import pytest @pytest.mark.hookwrapper def pytest_runtest_makereport(item, call): pytest_html = item.config.pluginmanager.getplugin('html') outcome = yield report = outcome.get_result() extra = getattr(report, 'extra', []) if report.when == 'call': # always add url to report extra.append(pytest_html.extras.url('http://www.example.com/')) xfail = hasattr(report, 'wasxfail') if (report.skipped and xfail) or (report.failed and not xfail): # only add additional html on failure extra.append(pytest_html.extras.html('
Additional HTML
')) report.extra = extra You can also specify the :code:`name` argument for all types other than :code:`html` which will change the title of the created hyper link: .. code-block:: python extra.append(pytest_html.extras.text('some string', name='Different title')) Modifying the results table ~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can modify the columns by implementing custom hooks for the header and rows. The following example :code:`conftest.py` adds a description column with the test function docstring, adds a sortable time column, and removes the links column: .. code-block:: python from datetime import datetime from py.xml import html import pytest @pytest.mark.optionalhook def pytest_html_results_table_header(cells): cells.insert(2, html.th('Description')) cells.insert(0, html.th('Time', class_='sortable time', col='time')) cells.pop() @pytest.mark.optionalhook def pytest_html_results_table_row(report, cells): cells.insert(2, html.td(report.description)) cells.insert(1, html.td(datetime.utcnow(), class_='col-time')) cells.pop() @pytest.mark.hookwrapper def pytest_runtest_makereport(item, call): outcome = yield report = outcome.get_result() report.description = str(item.function.__doc__) You can also remove results by implementing the :code:`pytest_html_results_table_row` hook and removing all cells. The following example removes all passed results from the report: .. code-block:: python import pytest @pytest.mark.optionalhook def pytest_html_results_table_row(report, cells): if report.passed: del cells[:] The log output and additional HTML can be modified by implementing the :code:`pytest_html_results_html` hook. The following example replaces all additional HTML and log output with a notice that the log is empty: .. code-block:: python import pytest @pytest.mark.optionalhook def pytest_html_results_table_html(report, data): if report.passed: del data[:] data.append(html.div('No log output captured.', class_='empty log')) Screenshots ----------- .. image:: https://cloud.githubusercontent.com/assets/122800/11952194/62daa964-a88e-11e5-9745-2aa5b714c8bb.png :target: https://cloud.githubusercontent.com/assets/122800/11951695/f371b926-a88a-11e5-91c2-499166776bd3.png :alt: Enhanced HTML report Contributing ------------ Fork the repository and submit PRs with bug fixes and enhancements, contributions are very welcome. Tests can be run locally with `tox`_, for example to execute tests for Python 2.7 and 3.6 execute:: tox -e py27,py36 .. _`tox`: https://tox.readthedocs.org/en/latest/ Resources --------- - `Release Notes `_ - `Issue Tracker `_ - `Code `_ .. _JSON: http://json.org/