METADATA 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. Metadata-Version: 2.1
  2. Name: pytest-rerunfailures
  3. Version: 10.2
  4. Summary: pytest plugin to re-run tests to eliminate flaky failures
  5. Home-page: https://github.com/pytest-dev/pytest-rerunfailures
  6. Author: Leah Klearman
  7. Author-email: lklrmn@gmail.com
  8. License: Mozilla Public License 2.0 (MPL 2.0)
  9. Keywords: py.test pytest rerun failures flaky
  10. Platform: UNKNOWN
  11. Classifier: Development Status :: 5 - Production/Stable
  12. Classifier: Framework :: Pytest
  13. Classifier: Intended Audience :: Developers
  14. Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
  15. Classifier: Operating System :: POSIX
  16. Classifier: Operating System :: Microsoft :: Windows
  17. Classifier: Operating System :: MacOS :: MacOS X
  18. Classifier: Topic :: Software Development :: Quality Assurance
  19. Classifier: Topic :: Software Development :: Testing
  20. Classifier: Topic :: Utilities
  21. Classifier: Programming Language :: Python :: 3
  22. Classifier: Programming Language :: Python :: 3.6
  23. Classifier: Programming Language :: Python :: 3.7
  24. Classifier: Programming Language :: Python :: 3.8
  25. Classifier: Programming Language :: Python :: 3.9
  26. Classifier: Programming Language :: Python :: 3.10
  27. Classifier: Programming Language :: Python :: 3 :: Only
  28. Classifier: Programming Language :: Python :: Implementation :: CPython
  29. Classifier: Programming Language :: Python :: Implementation :: PyPy
  30. Requires-Python: >= 3.6
  31. Requires-Dist: setuptools (>=40.0)
  32. Requires-Dist: pytest (>=5.3)
  33. .. contents::
  34. pytest-rerunfailures
  35. ====================
  36. pytest-rerunfailures is a plugin for `pytest <https://pytest.org>`_ that
  37. re-runs tests to eliminate intermittent failures.
  38. .. image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg
  39. :target: https://github.com/pytest-dev/pytest-rerunfailures/blob/master/LICENSE
  40. :alt: License
  41. .. image:: https://img.shields.io/pypi/v/pytest-rerunfailures.svg
  42. :target: https://pypi.python.org/pypi/pytest-rerunfailures/
  43. :alt: PyPI
  44. .. image:: https://github.com/pytest-dev/pytest-rerunfailures/workflows/Test/badge.svg
  45. :target: https://github.com/pytest-dev/pytest-rerunfailures/actions
  46. :alt: GitHub Actions
  47. Requirements
  48. ------------
  49. You will need the following prerequisites in order to use pytest-rerunfailures:
  50. - Python 3.6, up to 3.10, or PyPy3
  51. - pytest 5.3 or newer
  52. This plugin can recover from a hard crash with the following optional
  53. prerequisites:
  54. - pytest-xdist 2.3.0 or newer
  55. This package is currently tested against the last 5 minor pytest releases. In
  56. case you work with an older version of pytest you should consider updating or
  57. use one of the earlier versions of this package.
  58. Installation
  59. ------------
  60. To install pytest-rerunfailures:
  61. .. code-block:: bash
  62. $ pip install pytest-rerunfailures
  63. Recover from hard crashes
  64. -------------------------
  65. If one or more tests trigger a hard crash (for example: segfault), this plugin
  66. will ordinarily be unable to rerun the test. However, if a compatible version of
  67. pytest-xdist is installed, and the tests are run within pytest-xdist using the `-n`
  68. flag, this plugin will be able to rerun crashed tests, assuming the workers and
  69. controller are on the same LAN (this assumption is valid for almost all cases
  70. because most of the time the workers and controller are on the same computer).
  71. If this assumption is not the case, then this functionality may not operate.
  72. Re-run all failures
  73. -------------------
  74. To re-run all test failures, use the ``--reruns`` command line option with the
  75. maximum number of times you'd like the tests to run:
  76. .. code-block:: bash
  77. $ pytest --reruns 5
  78. Failed fixture or setup_class will also be re-executed.
  79. To add a delay time between re-runs use the ``--reruns-delay`` command line
  80. option with the amount of seconds that you would like wait before the next
  81. test re-run is launched:
  82. .. code-block:: bash
  83. $ pytest --reruns 5 --reruns-delay 1
  84. Re-run all failures matching certain expressions
  85. ------------------------------------------------
  86. To re-run only those failures that match a certain list of expressions, use the
  87. ``--only-rerun`` flag and pass it a regular expression. For example,
  88. the following would only rerun those errors that match ``AssertionError``:
  89. .. code-block:: bash
  90. $ pytest --reruns 5 --only-rerun AssertionError
  91. Passing the flag multiple times accumulates the arguments, so the following
  92. would only rerun those errors that match ``AssertionError`` or ``ValueError``:
  93. .. code-block:: bash
  94. $ pytest --reruns 5 --only-rerun AssertionError --only-rerun ValueError
  95. Re-run individual failures
  96. --------------------------
  97. To mark individual tests as flaky, and have them automatically re-run when they
  98. fail, add the ``flaky`` mark with the maximum number of times you'd like the
  99. test to run:
  100. .. code-block:: python
  101. @pytest.mark.flaky(reruns=5)
  102. def test_example():
  103. import random
  104. assert random.choice([True, False])
  105. Note that when teardown fails, two reports are generated for the case, one for
  106. the test case and the other for the teardown error.
  107. You can also specify the re-run delay time in the marker:
  108. .. code-block:: python
  109. @pytest.mark.flaky(reruns=5, reruns_delay=2)
  110. def test_example():
  111. import random
  112. assert random.choice([True, False])
  113. You can also specify an optional ``condition`` in the re-run marker:
  114. .. code-block:: python
  115. @pytest.mark.flaky(reruns=5, condition=sys.platform.startswith("win32"))
  116. def test_example():
  117. import random
  118. assert random.choice([True, False])
  119. You can use ``@pytest.mark.flaky(condition)`` similarly as ``@pytest.mark.skipif(condition)``, see `pytest-mark-skipif <https://docs.pytest.org/en/6.2.x/reference.html#pytest-mark-skipif>`_
  120. .. code-block:: python
  121. @pytest.mark.flaky(reruns=2,condition="sys.platform.startswith('win32')")
  122. def test_example():
  123. import random
  124. assert random.choice([True, False])
  125. # totally same as the above
  126. @pytest.mark.flaky(reruns=2,condition=sys.platform.startswith("win32"))
  127. def test_example():
  128. import random
  129. assert random.choice([True, False])
  130. Note that the test will re-run for any ``condition`` that is truthy.
  131. Output
  132. ------
  133. Here's an example of the output provided by the plugin when run with
  134. ``--reruns 2`` and ``-r aR``::
  135. test_report.py RRF
  136. ================================== FAILURES ==================================
  137. __________________________________ test_fail _________________________________
  138. def test_fail():
  139. > assert False
  140. E assert False
  141. test_report.py:9: AssertionError
  142. ============================ rerun test summary info =========================
  143. RERUN test_report.py::test_fail
  144. RERUN test_report.py::test_fail
  145. ============================ short test summary info =========================
  146. FAIL test_report.py::test_fail
  147. ======================= 1 failed, 2 rerun in 0.02 seconds ====================
  148. Note that output will show all re-runs. Tests that fail on all the re-runs will
  149. be marked as failed.
  150. Compatibility
  151. -------------
  152. * This plugin may *not* be used with class, module, and package level fixtures.
  153. * This plugin is *not* compatible with pytest-xdist's --looponfail flag.
  154. * This plugin is *not* compatible with the core --pdb flag.
  155. Resources
  156. ---------
  157. - `Issue Tracker <https://github.com/pytest-dev/pytest-rerunfailures/issues>`_
  158. - `Code <https://github.com/pytest-dev/pytest-rerunfailures/>`_
  159. Development
  160. -----------
  161. * Test execution count can be retrieved from the ``execution_count`` attribute
  162. in test ``item``'s object. Example:
  163. .. code-block:: python
  164. @hookimpl(tryfirst=True)
  165. def pytest_runtest_makereport(item, call):
  166. print(item.execution_count)
  167. Changelog
  168. =========
  169. 10.2 (2021-09-17)
  170. -----------------
  171. Features
  172. ++++++++
  173. - Allow recovery from crashed tests with pytest-xdist.
  174. - Add support for Python 3.10 (as of Python 3.10.rc2).
  175. (Thanks to `@hugovk <https://github.com/hugovk>`_ for the PR.)
  176. 10.1 (2021-07-02)
  177. -----------------
  178. Features
  179. ++++++++
  180. - Allows using a ``str`` as condition for
  181. ``@pytest.mark.flaky(condition)``
  182. which gets evaluated dynamically similarly to
  183. ``@pytest.mark.skipif(condition)``.
  184. (`#162 <https://github.com/pytest-dev/pytest-rerunfailures/pull/162>`_
  185. provided by `@15klli <https://github.com/15klli>`_)
  186. 10.0 (2021-05-26)
  187. -----------------
  188. Backwards incompatible changes
  189. ++++++++++++++++++++++++++++++
  190. - Drop support for Python 3.5.
  191. - Drop support for pytest < 5.3.
  192. Features
  193. ++++++++
  194. - Add ``condition`` keyword argument to the re-run marker.
  195. (Thanks to `@BeyondEvil`_ for the PR.)
  196. - Add support for Python 3.9.
  197. (Thanks to `@digitronik`_ for the PR.)
  198. - Add support for pytest 6.3.
  199. (Thanks to `@bluetech`_ for the PR.)
  200. - Add compatibility with ``pytest-xdist >= 2.0``.
  201. (Thanks to `@bluetech`_ for the PR.)
  202. Other changes
  203. +++++++++++++
  204. - Check for the resultlog by feature and not by version as pytest master does
  205. not provide a consistent version.
  206. .. _@BeyondEvil: https://github.com/BeyondEvil
  207. .. _@digitronik: https://github.com/digitronik
  208. .. _@bluetech: https://github.com/bluetech
  209. 9.1.1 (2020-09-29)
  210. ------------------
  211. Compatibility fix.
  212. ++++++++++++++++++
  213. - Ignore ``--result-log`` command line option when used together with ``pytest
  214. >= 6.1.0``, as it was removed there. This is a quick fix, use an older
  215. version of pytest, if you want to keep this feature for now.
  216. (Thanks to `@ntessore`_ for the PR)
  217. - Support up to pytest 6.1.0.
  218. .. _@ntessore: https://github.com/ntessore
  219. 9.1 (2020-08-26)
  220. ----------------
  221. Features
  222. ++++++++
  223. - Add a new flag ``--only-rerun`` to allow for users to rerun only certain
  224. errors.
  225. Other changes
  226. +++++++++++++
  227. - Drop dependency on ``mock``.
  228. - Add support for pre-commit and add a linting tox target.
  229. (`#117 <https://github.com/pytest-dev/pytest-rerunfailures/pull/117>`_)
  230. (PR from `@gnikonorov`_)
  231. .. _@gnikonorov: https://github.com/gnikonorov
  232. 9.0 (2020-03-18)
  233. ----------------
  234. Backwards incompatible changes
  235. ++++++++++++++++++++++++++++++
  236. - Drop support for pytest version 4.4, 4.5 and 4.6.
  237. - Drop support for Python 2.7.
  238. Features
  239. ++++++++
  240. - Add support for pytest 5.4.
  241. - Add support for Python 3.8.
  242. 8.0 (2019-11-18)
  243. ----------------
  244. Backwards incompatible changes
  245. ++++++++++++++++++++++++++++++
  246. - Drop support for pytest version 3.10, 4.0, 4.1, 4.2 and 4.3
  247. - Drop support for Python 3.4.
  248. Features
  249. ++++++++
  250. - Add support for pytest version 4.4, 4.5, 4.6, 5.0, 5.1 and 5.2.
  251. Bug fixes
  252. +++++++++
  253. - Explicitly depend on setuptools to ensure installation when working in
  254. environments without it.
  255. (`#98 <https://github.com/pytest-dev/pytest-rerunfailures/pull/98>`_)
  256. (PR from `@Eric-Arellano`_)
  257. .. _@Eric-Arellano: https://github.com/Eric-Arellano
  258. 7.0 (2019-03-28)
  259. ----------------
  260. Backwards incompatible changes
  261. ++++++++++++++++++++++++++++++
  262. - Drop support for pytest version 3.8 and 3.9.
  263. Features
  264. ++++++++
  265. - Add support for pytest version 4.2 and 4.3.
  266. Bug fixes
  267. +++++++++
  268. - Fixed #83 issue about ignored ``pytest_runtest_logfinish`` hooks.
  269. (`#83 <https://github.com/pytest-dev/pytest-rerunfailures/issues/83>`_)
  270. (PR from `@KillAChicken`_)
  271. .. _@KillAChicken: https://github.com/KillAChicken
  272. 6.0 (2019-01-08)
  273. ----------------
  274. Backwards incompatible changes
  275. ++++++++++++++++++++++++++++++
  276. - Drop support for pytest version 3.6 and 3.7.
  277. Features
  278. ++++++++
  279. - Add support for pytest version 4.0 and 4.1.
  280. Bug fixes
  281. +++++++++
  282. - Fixed #77 regression issue introduced in 4.2 related to the ``rerun``
  283. attribute on the test report.
  284. (`#77 <https://github.com/pytest-dev/pytest-rerunfailures/issues/77>`_)
  285. (Thanks to `@RibeiroAna`_ for the PR).
  286. .. _@RibeiroAna: https://github.com/RibeiroAna
  287. 5.0 (2018-11-06)
  288. ----------------
  289. - Drop support for pytest versions < 3.6 to reduce the maintenance burden.
  290. - Add support up to pytest version 3.10. Thus supporting the newest 5 pytest
  291. releases.
  292. - Add support for Python 3.7.
  293. - Fix issue can occur when used together with `pytest-flake8`
  294. (`#73 <https://github.com/pytest-dev/pytest-rerunfailures/issues/73>`_)
  295. 4.2 (2018-10-04)
  296. ----------------
  297. - Fixed #64 issue related to ``setup_class`` and ``fixture`` executions on
  298. rerun (Thanks to `@OlegKuzovkov`_ for the PR).
  299. - Added new ``execution_count`` attribute to reflect the number of test case
  300. executions according to #67 issue. (Thanks to `@OlegKuzovkov`_ for the PR).
  301. .. _@OlegKuzovkov: https://github.com/OlegKuzovkov
  302. 4.1 (2018-05-23)
  303. ----------------
  304. - Add support for pytest 3.6 by using ``Node.get_closest_marker()`` (Thanks to
  305. `@The-Compiler`_ for the PR).
  306. .. _@The-Compiler: https://github.com/The-Compiler
  307. 4.0 (2017-12-23)
  308. ----------------
  309. - Added option to add a delay time between test re-runs (Thanks to `@Kanguros`_
  310. for the PR).
  311. - Added support for pytest >= 3.3.
  312. - Drop support for pytest < 2.8.7.
  313. .. _@Kanguros: https://github.com/Kanguros
  314. 3.1 (2017-08-29)
  315. ----------------
  316. - Restored compatibility with pytest-xdist. (Thanks to `@davehunt`_ for the PR)
  317. .. _@davehunt: https://github.com/davehunt
  318. 3.0 (2017-08-17)
  319. ----------------
  320. - Add support for Python 3.6.
  321. - Add support for pytest 2.9 up to 3.2
  322. - Drop support for Python 2.6 and 3.3.
  323. - Drop support for pytest < 2.7.
  324. 2.2 (2017-06-23)
  325. ----------------
  326. - Ensure that other plugins can run after this one, in case of a global setting
  327. ``--rerun=0``. (Thanks to `@sublee`_ for the PR)
  328. .. _@sublee: https://github.com/sublee
  329. 2.1.0 (2016-11-01)
  330. ------------------
  331. - Add default value of ``reruns=1`` if ``pytest.mark.flaky()`` is called
  332. without arguments.
  333. - Also offer a distribution as universal wheel. (Thanks to `@tltx`_ for the PR)
  334. .. _@tltx: https://github.com/tltx
  335. 2.0.1 (2016-08-10)
  336. -----------------------------
  337. - Prepare CLI options to pytest 3.0, to avoid a deprecation warning.
  338. - Fix error due to missing CHANGES.rst when creating the source distribution
  339. by adding a MANIFEST.in.
  340. 2.0.0 (2016-04-06)
  341. ------------------
  342. - Drop support for Python 3.2, since supporting it became too much of a hassle.
  343. (Reason: Virtualenv 14+ / PIP 8+ do not support Python 3.2 anymore.)
  344. 1.0.2 (2016-03-29)
  345. ------------------
  346. - Add support for `--resultlog` option by parsing reruns accordingly. (#28)
  347. 1.0.1 (2016-02-02)
  348. ------------------
  349. - Improve package description and include CHANGELOG into description.
  350. 1.0.0 (2016-02-02)
  351. ------------------
  352. - Rewrite to use newer API of pytest >= 2.3.0
  353. - Improve support for pytest-xdist by only logging the final result.
  354. (Logging intermediate results will finish the test rather rerunning it.)