{ "info": { "author": "Gastrofix GmbH", "author_email": "tech@gastrofix.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Pytest", "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Testing" ], "description": "=======================\npytest-failed-to-verify\n=======================\n\n.. image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg\n :target: https://github.com/pytest-dev/pytest-rerunfailures/blob/master/LICENSE\n :alt: License\n\n.. image:: https://travis-ci.org/gastrofix-gmbh/pytest-failed-to-verify.svg?branch=master\n :target: https://travis-ci.org/gastrofix-gmbh/pytest-failed-to-verify\n :alt: See Build Status on Travis CI\n\n.. image:: https://img.shields.io/pypi/v/pytest-failed-to-verify.svg\n :target: https://pypi.org/project/pytest-failed-to-verify\n :alt: PyPI version\n\n.. image:: https://img.shields.io/pypi/pyversions/pytest-failed-to-verify.svg\n :target: https://pypi.org/project/pytest-failed-to-verify\n :alt: Python versions\n\nA pytest plugin that helps better distinguishing real test failures from setup flakiness.\n\n\nFeatures\n--------\n\n* Re-running only the setup-phase on failure\n* Additional test-outcome: ``FAILED_TO_VERIFY`` if a failure happened in setup phase and prevented the actual test-logic from executing.\n\nInstallation\n------------\n\nYou can install the plugin using the following command:\n\n.. code-block:: console\n\n $ pip install pytest-failed-to-verify\n\n\nUsage\n-----\nBased on the existing `pytest-rerunfailures `_ plugin we changed functionality to the following:\n\nOnce installed the plugin provides an additional test outcome `failed-to-verify` in case a test fails in the setup-phase, additionaly you are able to control the amount of re-runs specifically for the setup phase:\n\n.. code-block:: console\n\n $ pytest --rerun-setup 1\n\nWhat's the idea behind it?\n--------------------------\n\nA pytest test consists of three phases (setup, call, teardown). Usually only the call phase contains the actual tested business logic and the outcome of this phase gives the most valuable result.\n\nThe setup phase is used to provide the pre-conditions for the test and might be even larger than the test.\n\nAssuming that the flakiness of a test is evenly distributed between the lines of code a test is executing, having a large setup phase means an error due to flakiness is most likely to happen there. If that's the case a test fails but is leaving you with no relevant test-outcome: the actual test did not happen. \n\nSo if the setup fails the result of a test will be `failed-to-verify` rather than failed.\n\nAdditionally re-running only the setup phase is a mechanism that assures the code that is testing the actual business logic (call-phase) is actually executed and provides you a valid test outcome without suffering from a flaky setup phase.\n\n\nCredits\n------------\n\nCredits to https://github.com/pytest-dev as some of the code was taken and re-used from the `pytest-rerunfailures `_ plugin. We used it as a starting point to implement the needed functionality.\n\nKnown issues\n------------\n\nBecause of the similarity it does not work well together with pytest-rerunfailures. If you still need to be able to rerun the complete test on case of an error you can do this as well using this plugin.\n\nContributing\n------------\nContributions are very welcome. Tests can be run with `tox`_, please ensure\nthe coverage at least stays the same before you submit a pull request.\n\n\nIssues\n------\n\nIf you encounter any problems, please `file an issue`_ along with a detailed description.\n\n----\n\nThis `pytest`_ plugin was generated with `Cookiecutter`_ along with `@hackebrot`_'s `cookiecutter-pytest-plugin`_ template.\n\n.. _`Cookiecutter`: https://github.com/audreyr/cookiecutter\n.. _`@hackebrot`: https://github.com/hackebrot\n.. _`BSD-3`: http://opensource.org/licenses/BSD-3-Clause\n.. _`GNU GPL v3.0`: http://www.gnu.org/licenses/gpl-3.0.txt\n.. _`Apache Software License 2.0`: http://www.apache.org/licenses/LICENSE-2.0\n.. _`cookiecutter-pytest-plugin`: https://github.com/pytest-dev/cookiecutter-pytest-plugin\n.. _`file an issue`: https://github.com/gastrofix/pytest-gfix/issues\n.. _`pytest`: https://github.com/pytest-dev/pytest\n.. _`tox`: https://tox.readthedocs.io/en/latest/\n.. _`pip`: https://pypi.org/project/pip/\n.. _`PyPI`: https://pypi.org/project\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gastrofix-gmbh/pytest-failed-to-verify", "keywords": "", "license": "MPL", "maintainer": "Gastrofix GmbH", "maintainer_email": "tech@gastrofix.com", "name": "pytest-failed-to-verify", "package_url": "https://pypi.org/project/pytest-failed-to-verify/", "platform": "", "project_url": "https://pypi.org/project/pytest-failed-to-verify/", "project_urls": { "Homepage": "https://github.com/gastrofix-gmbh/pytest-failed-to-verify" }, "release_url": "https://pypi.org/project/pytest-failed-to-verify/0.1.5/", "requires_dist": [ "pytest (>=4.1.0)" ], "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "summary": "A pytest plugin that helps better distinguishing real test failures from setup flakiness.", "version": "0.1.5" }, "last_serial": 5651915, "releases": { "0.1.3": [ { "comment_text": "", "digests": { "md5": "bb77e13f4b42c24cbe1505c28e6e1236", "sha256": "b905d48602c21254f6ac0994eac0b2a84e660c5a724f5c68b67edf38a846bcd5" }, "downloads": -1, "filename": "pytest-failed-to-verify-0.1.3.tar.gz", "has_sig": false, "md5_digest": "bb77e13f4b42c24cbe1505c28e6e1236", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 12156, "upload_time": "2019-04-04T17:58:04", "url": "https://files.pythonhosted.org/packages/02/4b/166d9d9a16680ee8793f2e6ca0353977365b8cefd964b9c4da2d2b78bc16/pytest-failed-to-verify-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "075d72af37d6712fb92bd38f7caa7373", "sha256": "4f0dbff8b922cc4dac30baa65525ba86a9a90536e9956796f572617917a37df0" }, "downloads": -1, "filename": "pytest-failed-to-verify-0.1.4.tar.gz", "has_sig": false, "md5_digest": "075d72af37d6712fb92bd38f7caa7373", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 12114, "upload_time": "2019-04-10T16:26:03", "url": "https://files.pythonhosted.org/packages/31/56/29887d49c7e5af3b358c27ba7c8f27a6ebe0e0617a93adbc172e25711fb9/pytest-failed-to-verify-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "7fcaf70d0e32e93645e1dc3b1dd23bf2", "sha256": "72b48bcda84d707797b1335c17f3614c8709d767ac2a5d290a647ace75ba29c3" }, "downloads": -1, "filename": "pytest_failed_to_verify-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "7fcaf70d0e32e93645e1dc3b1dd23bf2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 11678, "upload_time": "2019-08-08T19:26:23", "url": "https://files.pythonhosted.org/packages/5f/7c/836ba7f8ec4b40a41d57dabe7ca4c2506b61e33a8c39eb2e4e085c7d175d/pytest_failed_to_verify-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4272ed68cb3e8dd0f56fa8997b8a0b14", "sha256": "ad23abe11117c1dd5a10d50f2d3f36bad19ae66e9c0dfc172f41468ba445c670" }, "downloads": -1, "filename": "pytest-failed-to-verify-0.1.5.tar.gz", "has_sig": false, "md5_digest": "4272ed68cb3e8dd0f56fa8997b8a0b14", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 11112, "upload_time": "2019-08-08T19:26:25", "url": "https://files.pythonhosted.org/packages/d8/6c/93429e8b78b3f216ddeba46f2b565f6b1cdb04546be360862ff855111fcf/pytest-failed-to-verify-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7fcaf70d0e32e93645e1dc3b1dd23bf2", "sha256": "72b48bcda84d707797b1335c17f3614c8709d767ac2a5d290a647ace75ba29c3" }, "downloads": -1, "filename": "pytest_failed_to_verify-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "7fcaf70d0e32e93645e1dc3b1dd23bf2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 11678, "upload_time": "2019-08-08T19:26:23", "url": "https://files.pythonhosted.org/packages/5f/7c/836ba7f8ec4b40a41d57dabe7ca4c2506b61e33a8c39eb2e4e085c7d175d/pytest_failed_to_verify-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4272ed68cb3e8dd0f56fa8997b8a0b14", "sha256": "ad23abe11117c1dd5a10d50f2d3f36bad19ae66e9c0dfc172f41468ba445c670" }, "downloads": -1, "filename": "pytest-failed-to-verify-0.1.5.tar.gz", "has_sig": false, "md5_digest": "4272ed68cb3e8dd0f56fa8997b8a0b14", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 11112, "upload_time": "2019-08-08T19:26:25", "url": "https://files.pythonhosted.org/packages/d8/6c/93429e8b78b3f216ddeba46f2b565f6b1cdb04546be360862ff855111fcf/pytest-failed-to-verify-0.1.5.tar.gz" } ] }