pytest-cache

py.test plugin with mechanisms for caching across test runs
Download

pytest-cache Ranking & Summary

Advertisement

  • Rating:
  • License:
  • GPL
  • Price:
  • FREE
  • Publisher Name:
  • Holger Krekel
  • Publisher web site:
  • http://twitter.com/hpk42

pytest-cache Tags


pytest-cache Description

pytest-cache is a py.test plugin with mechanisms for caching across test runs.Usageinstall via:pip install pytest-cacheafter which other plugins can access a new config.cache object which helps sharing values between py.test invocations.The plugin also introduces a new --lf option to rerun the last failing tests and a --clearcache option to remove cache contents ahead of a test run.The new --lf (rerun last failing) optionThe cache plugin introduces the --lf option to py.test which alows to rerun all test failures of a previous test run. If not tests failed, all tests will be run as normal. It is thus perfectly fine to always pass --lf.As an example, let's create 50 test invocation of which only 2 fail:# content of test_50.pyimport pytest@pytest.mark.parametrize("i", range(50))def test_num(i): if i in (17,25): pytest.fail("bad luck")If you run this for the first time you will see two failures:$ py.test -qcollecting ... collected 50 items.................F.......F........................================================= FAILURES =================================_______________________________ test_num _______________________________i = 17 @pytest.mark.parametrize("i", range(50)) def test_num(i): if i in (17,25):> pytest.fail("bad luck")E Failed: bad lucktest_50.py:6: Failed_______________________________ test_num _______________________________i = 25 @pytest.mark.parametrize("i", range(50)) def test_num(i): if i in (17,25):> pytest.fail("bad luck")E Failed: bad lucktest_50.py:6: Failed2 failed, 48 passed in 0.06 secondsIf you then run it with --lf you will re-run the last two failures:$ py.test -q --lfcollecting ... collected 50 itemsFF================================= FAILURES =================================_______________________________ test_num _______________________________i = 17 @pytest.mark.parametrize("i", range(50)) def test_num(i): if i in (17,25):> pytest.fail("bad luck")E Failed: bad lucktest_50.py:6: Failed_______________________________ test_num _______________________________i = 25 @pytest.mark.parametrize("i", range(50)) def test_num(i): if i in (17,25):> pytest.fail("bad luck")E Failed: bad lucktest_50.py:6: Failed======================== 48 tests deselected by '' =========================2 failed, 48 deselected in 0.01 secondsThe last line indicates that 48 tests have not been run.The new config.cache objectPlugins or conftest.py support code can get a cached value using the pytest config object. Here is a basic example plugin which implements a funcarg which re-uses previously created state across py.test invocations:# content of test_caching.pyimport timedef pytest_funcarg__mydata(request): val = request.config.cache.get("example/value", None) if val is None: time.sleep(9*0.6) # expensive computation :) val = 42 request.config.cache.set("example/value", val) return valdef test_function(mydata): assert mydata == 23If you run this command once, it will take a while because of the sleep:$ py.test -qcollecting ... collected 1 itemsF================================= FAILURES =================================______________________________ test_function _______________________________mydata = 42 def test_function(mydata):> assert mydata == 23E assert 42 == 23test_caching.py:12: AssertionError1 failed in 5.43 secondsIf you run it a second time the value will be retrieved from the cache and this will be quick:$ py.test -qcollecting ... collected 1 itemsF================================= FAILURES =================================______________________________ test_function _______________________________mydata = 42 def test_function(mydata):> assert mydata == 23E assert 42 == 23test_caching.py:12: AssertionError1 failed in 0.02 secondsConsult the pytest-cache API for more details.Inspecting Cache contentYou can always peek at the content of the cache using the --cache command line option:$ py.test --cache=========================== test session starts ============================platform linux2 -- Python 2.7.3 -- pytest-2.2.5.dev2cachedir: /home/hpk/tmp/doc-exec-257/.cache------------------------------- cache values -------------------------------cache/lastfailed contains: set()example/value contains: 42============================= in 0.01 seconds =============================Clearing Cache contentYou can instruct pytest to clear all cache files and values by adding the --clearcache option like this:py.test --clearcacheThis is recommended for invocations from Continous Integration servers where isolation and correctness is more important than speed.Product's homepage


pytest-cache Related Software