Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Back to top
View this page
Toggle table of contents sidebar

# What is Pytest Shell Utilities

> “When in doubt, shell out”

> —Thomas S. Hatch

This pytest plugin was extracted from pytest-salt-factories. If provides a basic fixture `shell` which basically uses `subprocess.Popen` to run commands against the running system on a shell while providing a nice assert’able return class.

## Install

Installing `pytest-shell-utilities` is as simple as:

    python -m pip install pytest-shell-utilities

And, that’s honestly it.

## Usage

Once installed, you can now use the `shell` fixture to run some commands and assert against the outcome.

    def test_assert_good_exitcode(shell):

        ret = shell.run("exit", "0")
        assert ret.returncode == 0

    def test_assert_bad_exitcode(shell):

        ret = shell.run("exit", "1")
        assert ret.returncode == 1

If the command outputs parseable JSON, the `shell` fixture can attempt loading that output as JSON which allows for asserting against the JSON loaded object.

    def test_against_json_output(shell):
        d = {"a": "a", "b": "b"}
        ret = shell.run("echo", json.dumps(d))
        assert ret.data == d

Additionally, the return object’s `.stdout` and `.stderr` can be line matched using pytest.pytester.LineMatcher:

    MARY_HAD_A_LITTLE_LAMB = """\
    Mary had a little lamb,
    Its fleece was white as snow;
    And everywhere that Mary went
    The lamb was sure to go.
    """

    def test_matcher_attribute(shell):
        ret = shell.run("echo", MARY_HAD_A_LITTLE_LAMB)
        ret.stdout.matcher.fnmatch_lines_random(
            [
                "*had a little*",
                "Its fleece was white*",
                "*Mary went",
                "The lamb was sure to go.",
            ]
        )

## Documentation

Please see Contents for full documentation, including installation and tutorials.

## Bugs/Requests

Please use the GitHub issue tracker to submit bugs or request features.

## Changelog

Consult the Changelog page for fixes and enhancements of each version.

Contents:

- Complete List of salt-analytics-framework
  - pytestshellutils

## Indices and tables

- Index

- Module Index

- Search Page