Skip to content

pytest-tmux

PyPI version

Python versions

A pytest plugin that enables tmux driven tests

This plugin is intend to help users who want to test interrative cli.

When using tmux fixture it basically :

  • creates a tmux server (socket created in pytest tmpdir)
  • creates a session automatically
  • attach to the window automatically
  • attach to the pane automatically

Warnings

Until a stable release, it is greatly encouraged to specify a strict version if you use this tool in your CI since it is in its early development and could be greatly changed between version.

Docs

https://pytest-tmux.readthedocs.io/

Features

  • Enable tmux driven tests
  • Enable screen assertion with retry
  • Enable row assertion with retry
  • Allow to debug tests interactively

Requirements

  • python >= 3.7
  • pytest
  • tmux

Installation

You can install "pytest-tmux" via pip from PyPI:

$ pip install pytest-tmux

Configuration capabilities

Configuration could be set on different level (in order of precedence):

  • Server
    • by overriding tmux_server_config (scope='session') fixture
    • env var
    • cli args (see --tmux-* switch with pytest --help)
  • Session
    • by overriding tmux_session_config fixture
    • at the test level with tmux_session_cfg marker
    • dynamically inside test with tmux.config.session
    • env var
    • cli args (see --tmux-* switch with pytest --help)
  • Assertion
    • by overriding tmux_assertion_config fixture
    • at the test level with tmux_assertion_cfg marker
    • dynamically inside test with tmux.config.session
    • when calling tmux.screen() / tmux.row() with timeout / delay argument
    • env var
    • cli args (see --tmux-* switch with pytest --help)

Usage

Basic example

import pytest
from inspect import cleandoc

def test_assert(tmux):
    # Set some options before session / windows is started
    tmux.config.session.window_command='env -i PS1="$ " TERM="xterm-256color" /usr/bin/env bash --norc --noprofile'
    assert tmux.screen() == '$'
    tmux.send_keys(r'printf "  Hello World  .\n\n"')
    expected=r"""
    $ printf "  Hello World  .\n\n"
      Hello World  .

    $
    """
    assert tmux.screen() == cleandoc(expected)

License

Distributed under the terms of the MIT license, "pytest-tmux" is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.