py.test plugin for writing simple functional tests with pexpect and docker.
pip install pytest-docker-pexpect
The plugin provides spawnu
fixture, that could be called like
spawnu(tag, dockerfile_content, command)
, it returns pexpect.spwanu
attached to command
runned inside a container that built with tag
and dockerfile
:
def test_echo(spawnu):
proc = spawnu(u'ubuntu', u'FROM ubuntu:latest', u'bash')
proc.sendline(u'ls')
Current working directory available inside the container in /src
.
It's also possible to pass arguments to docker run
with spawnu
:
spawnu(u'ubuntu', u'FROM ubuntu:latest', u'bash',
docker_run_arguments=[u'--expose', u'80'])
spawnu
provides pexpect API
and additional docker-specific API:
proc.docker_container_id
– container idproc.docker_inspect()
– decoded json output ofdocker inspect
proc.docker_stats()
– decoded json output ofdocker stats
Also the plugin provides TIMEOUT
fixture, that can be used for simple asserts, like:
assert proc.expect([TIMEOUT, u'1'])
run_without_docker
fixtures, that indicates that docker isn't used.
If you want to disable tests if docker isn't available, use @pytest.mark.skip_without_docker
.
If you want to run parametrized test only once without docker, use
@pytest.mark.once_without_docker
.
With flag --run-without-docker
tests can be run in environment without docker.
In this mode tests runs only for first container and docker initialization steps are skipped.
Be careful, in this mode all commands will be execute directly on local system!