ward


Nameward JSON
Version 0.68.0b0 PyPI version JSON
download
home_pagehttps://ward.readthedocs.io
SummaryA modern Python testing framework
upload_time2023-12-18 22:57:02
maintainerDarren Burns
docs_urlNone
authorDarren Burns
requires_python>=3.7.8,<4.0.0
licenseMIT
keywords test testing quality-assurance cli python3
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img src="https://user-images.githubusercontent.com/5740731/119056107-085c6900-b9c2-11eb-9699-f54ef4945623.png" width="350px">

[![Codecov](https://codecov.io/gh/darrenburns/ward/branch/master/graph/badge.svg)](https://codecov.io/gh/darrenburns/ward)
[![Documentation Status](https://readthedocs.org/projects/ward/badge/?version=latest)](https://ward.readthedocs.io/en/latest/?badge=latest)
[![PyPI version](https://badge.fury.io/py/ward.svg)](https://badge.fury.io/py/ward)

<hr>

_Ward_ is a Python testing framework with a focus on productivity and readability. It gives you the tools you need to write **well-documented** and **scalable** tests.

<img alt="Ward typical test output example" src="https://user-images.githubusercontent.com/5740731/118399779-a795ff00-b656-11eb-8fca-4ceb03151f3e.png">

## Features

See the full set of features in the [**documentation**](https://ward.readthedocs.io).

**Descriptive test names:** describe what your tests do using strings, not function names.
```python
@test("simple addition")  # you can use markdown in these descriptions!
def _():
    assert 1 + 2 == 3  # you can use plain assert statements!
```

**Modular test dependencies:** manage test setup/teardown code using fixtures that rely on Python's import system, not
name matching.
```python
@fixture
def user():
    return User(name="darren")


@test("the user is called darren")
def _(u=user):
    assert u.name == "darren"
```

**Support for asyncio**: define your tests and fixtures with `async def` and call asynchronous code within them.

```python
@fixture
async def user():
    u = await create_user()
    return await u.login()


@test("the logged in user has a last session date")
async def _(user=user):
    last_session = await get_last_session_date(user.id)
    assert is_recent(last_session, get_last_session_date)
```

**Powerful test selection:** limit your test run not only by matching test names/descriptions, but also on the code
contained in the body of the test.
```
ward --search "Database.get_all_users"
```
Or use tag expressions for more powerful filtering.
```
ward --tags "(unit or integration) and not slow"
```

**Parameterised testing:** write a test once, and run it multiple times with different inputs by writing it in a loop.
```python
for lhs, rhs, res in [
    (1, 1, 2),
    (2, 3, 5),
]:

    @test("simple addition")
    def _(left=lhs, right=rhs, result=res):
        assert left + right == result
```

**Cross platform:** Tested on Mac OS, Linux, and Windows.

**Speedy:** Ward's suite of ~320 tests run in less than half a second on my machine.

**Zero config:** Sensible defaults mean running `ward` with no arguments is enough to get started. Can be configured using `pyproject.toml` or the command line if required.

**Extendable:** Ward has a plugin system built with pluggy, the same framework used by pytest.

**Colourful, human readable output:** quickly pinpoint and fix issues with detailed output for failing tests.

<img alt="Ward failing test output example" src="https://user-images.githubusercontent.com/5740731/120125898-5dfaf780-c1b2-11eb-9acd-b9cd0ff24110.png">

## Getting Started

Have a look at the [**documentation**](https://ward.readthedocs.io)!

## How to Contribute

Contributions are very welcome and encouraged!

See the [contributing guide](.github/CONTRIBUTING.md) for information on how you can take part in the development of Ward.

            

Raw data

            {
    "_id": null,
    "home_page": "https://ward.readthedocs.io",
    "name": "ward",
    "maintainer": "Darren Burns",
    "docs_url": null,
    "requires_python": ">=3.7.8,<4.0.0",
    "maintainer_email": "darrenb900@gmail.com",
    "keywords": "test,testing,quality-assurance,cli,python3",
    "author": "Darren Burns",
    "author_email": "darrenb900@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/6b/d6/8e6ffa608e05ecc4c98f17272db67d00035a3d040671ce565ee6924c0d98/ward-0.68.0b0.tar.gz",
    "platform": null,
    "description": "<img src=\"https://user-images.githubusercontent.com/5740731/119056107-085c6900-b9c2-11eb-9699-f54ef4945623.png\" width=\"350px\">\n\n[![Codecov](https://codecov.io/gh/darrenburns/ward/branch/master/graph/badge.svg)](https://codecov.io/gh/darrenburns/ward)\n[![Documentation Status](https://readthedocs.org/projects/ward/badge/?version=latest)](https://ward.readthedocs.io/en/latest/?badge=latest)\n[![PyPI version](https://badge.fury.io/py/ward.svg)](https://badge.fury.io/py/ward)\n\n<hr>\n\n_Ward_ is a Python testing framework with a focus on productivity and readability. It gives you the tools you need to write **well-documented** and **scalable** tests.\n\n<img alt=\"Ward typical test output example\" src=\"https://user-images.githubusercontent.com/5740731/118399779-a795ff00-b656-11eb-8fca-4ceb03151f3e.png\">\n\n## Features\n\nSee the full set of features in the [**documentation**](https://ward.readthedocs.io).\n\n**Descriptive test names:** describe what your tests do using strings, not function names.\n```python\n@test(\"simple addition\")  # you can use markdown in these descriptions!\ndef _():\n    assert 1 + 2 == 3  # you can use plain assert statements!\n```\n\n**Modular test dependencies:** manage test setup/teardown code using fixtures that rely on Python's import system, not\nname matching.\n```python\n@fixture\ndef user():\n    return User(name=\"darren\")\n\n\n@test(\"the user is called darren\")\ndef _(u=user):\n    assert u.name == \"darren\"\n```\n\n**Support for asyncio**: define your tests and fixtures with `async def` and call asynchronous code within them.\n\n```python\n@fixture\nasync def user():\n    u = await create_user()\n    return await u.login()\n\n\n@test(\"the logged in user has a last session date\")\nasync def _(user=user):\n    last_session = await get_last_session_date(user.id)\n    assert is_recent(last_session, get_last_session_date)\n```\n\n**Powerful test selection:** limit your test run not only by matching test names/descriptions, but also on the code\ncontained in the body of the test.\n```\nward --search \"Database.get_all_users\"\n```\nOr use tag expressions for more powerful filtering.\n```\nward --tags \"(unit or integration) and not slow\"\n```\n\n**Parameterised testing:** write a test once, and run it multiple times with different inputs by writing it in a loop.\n```python\nfor lhs, rhs, res in [\n    (1, 1, 2),\n    (2, 3, 5),\n]:\n\n    @test(\"simple addition\")\n    def _(left=lhs, right=rhs, result=res):\n        assert left + right == result\n```\n\n**Cross platform:** Tested on Mac OS, Linux, and Windows.\n\n**Speedy:** Ward's suite of ~320 tests run in less than half a second on my machine.\n\n**Zero config:** Sensible defaults mean running `ward` with no arguments is enough to get started. Can be configured using `pyproject.toml` or the command line if required.\n\n**Extendable:** Ward has a plugin system built with pluggy, the same framework used by pytest.\n\n**Colourful, human readable output:** quickly pinpoint and fix issues with detailed output for failing tests.\n\n<img alt=\"Ward failing test output example\" src=\"https://user-images.githubusercontent.com/5740731/120125898-5dfaf780-c1b2-11eb-9acd-b9cd0ff24110.png\">\n\n## Getting Started\n\nHave a look at the [**documentation**](https://ward.readthedocs.io)!\n\n## How to Contribute\n\nContributions are very welcome and encouraged!\n\nSee the [contributing guide](.github/CONTRIBUTING.md) for information on how you can take part in the development of Ward.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A modern Python testing framework",
    "version": "0.68.0b0",
    "project_urls": {
        "Documentation": "https://ward.readthedocs.io",
        "Homepage": "https://ward.readthedocs.io",
        "Repository": "https://github.com/darrenburns/ward"
    },
    "split_keywords": [
        "test",
        "testing",
        "quality-assurance",
        "cli",
        "python3"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f0dd6999a6f4b01ab01bd5d8bc926d34d8224c232dce1f7353f746e93b482449",
                "md5": "2e694b1b8af2d2c285ec4fe928f2fe25",
                "sha256": "0847e6b95db9d2b83c7d1b9cea9bcb7ac3b8e8f6d341b8dc8920d6afb05458b1"
            },
            "downloads": -1,
            "filename": "ward-0.68.0b0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2e694b1b8af2d2c285ec4fe928f2fe25",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7.8,<4.0.0",
            "size": 43416,
            "upload_time": "2023-12-18T22:56:59",
            "upload_time_iso_8601": "2023-12-18T22:56:59.434389Z",
            "url": "https://files.pythonhosted.org/packages/f0/dd/6999a6f4b01ab01bd5d8bc926d34d8224c232dce1f7353f746e93b482449/ward-0.68.0b0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6bd68e6ffa608e05ecc4c98f17272db67d00035a3d040671ce565ee6924c0d98",
                "md5": "34de9b9aadbc6b3915b4a3ed1178d844",
                "sha256": "d8aafa4ddb81f4d5787d95bdb2f7ba69a2e89f183feec78d8afcc64b2cd19ee9"
            },
            "downloads": -1,
            "filename": "ward-0.68.0b0.tar.gz",
            "has_sig": false,
            "md5_digest": "34de9b9aadbc6b3915b4a3ed1178d844",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7.8,<4.0.0",
            "size": 38657,
            "upload_time": "2023-12-18T22:57:02",
            "upload_time_iso_8601": "2023-12-18T22:57:02.054288Z",
            "url": "https://files.pythonhosted.org/packages/6b/d6/8e6ffa608e05ecc4c98f17272db67d00035a3d040671ce565ee6924c0d98/ward-0.68.0b0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-18 22:57:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "darrenburns",
    "github_project": "ward",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ward"
}
        
Elapsed time: 0.20110s