Invocation¶
Test multiples hosts¶
By default Testinfra launch tests on local machine, but you can also test remotes systems using paramiko (a ssh implementation in python):
$ pip install paramiko
$ py.test -v --hosts=localhost,root@webserver:2222 test_myinfra.py
====================== test session starts ======================
platform linux -- Python 2.7.3 -- py-1.4.26 -- pytest-2.6.4
plugins: testinfra
collected 3 items
test_myinfra.py::test_passwd_file[localhost] PASSED
test_myinfra.py::test_nginx_is_installed[localhost] PASSED
test_myinfra.py::test_nginx_running_and_enabled[localhost] PASSED
test_myinfra.py::test_passwd_file[root@webserver:2222] PASSED
test_myinfra.py::test_nginx_is_installed[root@webserver:2222] PASSED
test_myinfra.py::test_nginx_running_and_enabled[root@webserver:2222] PASSED
=================== 6 passed in 8.49 seconds ====================
You can also set hosts per test module:
testinfra_hosts = ["localhost", "root@webserver:2222"]
def test_foo(host):
[....]
Parallel execution¶
If you have a lot of tests, you can use the pytest-xdist plugin to run tests using multiples process:
$ pip install pytest-xdist
# Launch tests using 3 processes
$ py.test -n 3 -v --host=web1,web2,web3,web4,web5,web6 test_myinfra.py
Advanced invocation¶
# Test recursively all test files (starting with `test_`) in current directory
$ py.test
# Filter function/hosts with pytest -k option
$ py.test --hosts=webserver,dnsserver -k webserver -k nginx
For more usages and features, see the Pytest documentation.