En interne, les tests de serveur semblent être effectués manuellement, je voudrais donc introduire un mécanisme d'automatisation pour améliorer l'efficacité. Dans mon ancien lieu de travail, j'ai essayé d'utiliser Ruby's Serverspec et Infrataster comme outils de test de serveur, mais je voulais les unifier avec les outils de gestion de la configuration de Python, Ansible et Fabric. Quand je l'ai recherché, j'ai trouvé un outil de test appelé Testinfra. Même sur le site officiel, Testinfra a été écrit comme un outil comme Ruby's Serverspec, alors j'ai essayé de l'utiliser. Cette fois, j'ai décrit la procédure de la partie d'introduction de la construction de l'environnement au test de fonctionnement.
L'environnement suivant est créé
$ pip install testinfra
$ cd $HOME/.ssh $ ssh-keygen -t rsa -f test_server
$ scp test_server.pub [email protected]:/var/tmp/
$ ssh -i $HOME/.ssh/test_server [email protected]
$ vi $HOME/.ssh/ssh_config
Ici, le nom d'hôte du serveur distant est "redmine"
Host redmine HostName 192.168.1.31 Port 22 User permit IdentityFile ~/.ssh/test_server
$ useradd -m permit -G wheel $ passwd permit
$ mkdir $HOME/.ssh $ mv /var/tmp/test_server.pub $HOME/.ssh/ $ cd $HOME/.ssh/ $ cat test_server.pub >> authorized_keys $ chmod 600 authorized_keys $ rm test_server.pub
$ vi test.py
Exemple de code de test
def test_passwd_file(File):
passwd = File("/etc/passwd")
assert passwd.contains("root")
assert passwd.user == "root"
assert passwd.group == "root"
assert passwd.mode == 0o644
$ testinfra -v test.py
=================================== test session starts ====================================
platform linux2 -- Python 2.7.9, pytest-3.0.1, py-1.4.31, pluggy-0.3.1 -- /usr/local/bin/python2.7
cachedir: .cache
rootdir: /root, inifile:
plugins: testinfra-1.4.2, pep8-1.0.6
collected 1 items
test.py::test_passwd_file[local] PASSED
================================== pytest-warning summary ==================================
WP1 None Modules are already imported so can not be re-written: testinfra
======================= 1 passed, 1 pytest-warnings in 0.03 seconds ========================
$ testinfra test.py --connection=ssh --hosts=permit@redmine --ssh-config=/root/.ssh/ssh_config
=================================== test session starts ====================================
platform linux2 -- Python 2.7.9, pytest-3.0.1, py-1.4.31, pluggy-0.3.1 -- /usr/local/bin/python2.7
cachedir: .cache
rootdir: /root, inifile:
plugins: testinfra-1.4.2, pep8-1.0.6
collected 1 items
test.py::test_passwd_file[ssh://redmine] PASSED
================================== pytest-warning summary ==================================
WP1 None Modules are already imported so can not be re-written: testinfra
======================= 1 passed, 1 pytest-warnings in 0.66 seconds ========================