Skip to main content

hammett is a fast python test runner

Project description

Hammett is a fast python test runner that aims to be compatible with pytest (unless that conflicts with the goal of being fast).

How much faster is hammett? This will depend on how fast your test suite is. Hammett isn’t magic, it’s just a runner made by someone who cares about performance a lot. It aims to have minimal startup overhead and minimal overhead for each test. I have written some bench marks for measuring this overhead which you can find at https://github.com/boxed/test-benchmarks (TL;DR if your test suite is < 1s in pytest you will see VAST improvements, if it’s minutes or hours, not so much).

A real world example is running the test suite of tri.declarative:

  • pytest: ~860 ms

  • hammett: ~160 ms

Or iommi:

  • pytest: ~10 s

  • hammett: ~8 s

But even if your test suite is big and slow you can still get some big improvements out of hammett if you often run just one file or one test:

In iommi, running “-k test_render_attrs_none”

  • pytest: ~1.3 s

  • hammett: ~0.6 s

Stuff that works

  • pytest.mark

  • parametrized tests

  • fixtures

  • with pytest.raises

Some plugins work, but you have to specify to load them in setup.cfg:

[hammett]
plugins=
    pytest_django

Notable missing features

  • no support for class based tests

Usage

First install: pip install hammett

Then run hammett: python -m hammett

Hopefully it will run your entire test suite!

hammett works with some pytest plugins, most notably pytest-django, at least for some projects.

License

BSD

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hammett-0.6.0.tar.gz (13.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page