{ "info": { "author": "Chris Beaumont", "author_email": "chrisnbeaumont@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "## Smother\n\n![logo](docs/_static/smother.png)\n\n[![Build Status](https://travis-ci.org/ChrisBeaumont/smother.svg?branch=master)](https://travis-ci.org/ChrisBeaumont/smother)\n\nSmother is a wrapper utility around [coverage.py](https://coverage.readthedocs.io/en/coverage-4.1/) that measures code coverage\nseparately for each test in a test suite. Its main features include:\n\n * Fast and reliable coverage tracking using [coverage.py](https://coverage.readthedocs.io/en/coverage-4.1/).\n * Ability to lookup which tests visit an arbitrary section of your application code.\n * Ability to convert version control diffs into a subset of affected tests to rerun.\n\n## Demo\n\nSmother contains plugins for nose and pytest, and behaves similarly to coverage.py:\n\n```\npy.test --smother=my_module test_suite/\nor\nnosetests --with-smother --smother-package=my_module test_suite/\n```\n\nThese commands create a `.smother` file that can be queried by the `smother` CLI\n\n```\nsmother lookup foo.bar # which tests visited module foo.bar?\nsmother lookup foo.bar:120-122 # or just some lines in that file?\nsmother lookup foo.bar:baz # or just the `baz` function?\n\nsmother diff # given local modifications to my repo, what tests might have broken?\nsmother diff | xargs py.test # just run them!\n\nsmother to_coverage # build a vanilla .coverage file from a .smother file\nsmother csv test.csv # dump all (application, test) pairs to a file\n```\n\n## Why?\n\nSmother was designed to make it easier to work with legacy codebases. Such codebases often have several properties that make rapid iteration difficult:\n\n * **Long-running test suites.** The initial codebase that smother was designed for took nearly 24 hours of CPU time to run its 11K tests. `smother diff` makes it easier to select a (hopefully much) smaller subset of\n tests to re-run to quickly identify possible regressions.\n * **Many different subsystems** -- most of which any single developer is unfamiliar with. `smother lookup` can be used to explore how and where particular modules are invoked in a test suite. These tests often reveal implicit contracts about code behavior that are not obvious from documentation alone.\n * **Scope creep**. Over time the abstractions in codebases become leakier,\n and logic between different subsystems becomes more heavily coupled. `smother csv` catalogs the coupling between source code units (lines, functions, or classes) and tests. Exploring this data often yields insights about\n which subsystems are well-encapsulated, and which would benefit from refactoring.\n\n## Full Documentation\n\n[Read the Docs](http://smother.readthedocs.io/en/latest/)\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrisbeaumont/smother", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "smother", "package_url": "https://pypi.org/project/smother/", "platform": "", "project_url": "https://pypi.org/project/smother/", "project_urls": { "Homepage": "https://github.com/chrisbeaumont/smother" }, "release_url": "https://pypi.org/project/smother/0.2/", "requires_dist": null, "requires_python": "", "summary": "An abundance of coverage data", "version": "0.2" }, "last_serial": 2883572, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "68830576d2f374232c0dfa9377bd98be", "sha256": "b9676443d7c4ea213e274fff73dc858285be9813bba36901ae98397913f3e3fa" }, "downloads": -1, "filename": "smother-0.1.tar.gz", "has_sig": false, "md5_digest": "68830576d2f374232c0dfa9377bd98be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17403, "upload_time": "2016-07-20T18:22:19", "url": "https://files.pythonhosted.org/packages/10/7b/00d76a2133767f8475c6b81d0497dac01c2e3e6ce5e18c9b5995a57eb672/smother-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "65879f311a7200ed32bb645ab1132eae", "sha256": "54de0cdb98519d2a7af526fcb698e2d61c5e1d31b63a7572542d987e8870538d" }, "downloads": -1, "filename": "smother-0.2.tar.gz", "has_sig": false, "md5_digest": "65879f311a7200ed32bb645ab1132eae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17907, "upload_time": "2017-05-18T16:25:59", "url": "https://files.pythonhosted.org/packages/ad/6b/b366398d93b9aae208e3146a3190a1463933a9e9c582ab58f7d66ec281e9/smother-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "65879f311a7200ed32bb645ab1132eae", "sha256": "54de0cdb98519d2a7af526fcb698e2d61c5e1d31b63a7572542d987e8870538d" }, "downloads": -1, "filename": "smother-0.2.tar.gz", "has_sig": false, "md5_digest": "65879f311a7200ed32bb645ab1132eae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17907, "upload_time": "2017-05-18T16:25:59", "url": "https://files.pythonhosted.org/packages/ad/6b/b366398d93b9aae208e3146a3190a1463933a9e9c582ab58f7d66ec281e9/smother-0.2.tar.gz" } ] }