Geek-Side

<< < 1 > >>

Testinfra使ってみた


前回、ServerSpecを使ってインフラのテストを書いてみましたが、
同じ思想でpythonベースのプロダクトを教えてもらったので試してみました。

Testinfra aims to be a Serverspec equivalent in python 

インストール


pipが入っていれば簡単にインストールできちゃいます。

$ sudo pip install testinfra
Collecting testinfra
  Downloading testinfra-1.5.4-py2.py3-none-any.whl (60kB)
    100% |████████████████████████████████| 61kB 1.9MB/s 
Requirement already satisfied (use --upgrade to upgrade): six>=1.4 in /usr/lib64/python2.7/site-packages (from testinfra)
Collecting pytest!=3.0.2 (from testinfra)
  Downloading pytest-3.0.7-py2.py3-none-any.whl (172kB)
    100% |████████████████████████████████| 176kB 1.7MB/s 
Requirement already satisfied (use --upgrade to upgrade): py>=1.4.29 in /usr/lib64/python2.7/site-packages (from pytest!=3.0.2->testinfra)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib64/python2.7/site-packages (from pytest!=3.0.2->testinfra)
Installing collected packages: pytest, testinfra
Successfully installed pytest-3.0.7 testinfra-1.5.4

テストの実行


テストを書きます。
assertで書けるのはxunitの方が慣れている身としては書きやすいですね。

def test_apache_running_and_enabled(Service):
    apache = Service("apache2")
    assert apache.is_running
#    assert apache.is_enabled

実行してみます。
Ansibleのダイナミックインベントリをそのまま使えるのは便利ですね。
下記のようにNameタグの値でテスト対象を指定しています。

$ testinfra -v --connection=ansible --ansible-inventory=./ec2.py --hosts=tag_Name_gside_gentoo test.py
============================================================================== test session starts ===============================================================================
platform linux2 -- Python 2.7.12, pytest-3.0.7, py-1.4.30, pluggy-0.4.0 -- /usr/bin/python2.7
cachedir: .cache
rootdir: /home/hoge/Dropbox/ansible_private, inifile:
plugins: testinfra-1.5.4
collected 1 items 

test.py::test_apache_running_and_enabled[ansible://13.112.48.230] PASSED

============================================================================= pytest-warning summary =============================================================================
WP1 None Module already imported so can not be re-written: testinfra
================================================================== 1 passed, 1 pytest-warnings in 7.90 seconds ===================================================================

ランレベルに登録されているかのテストは、今回テスト対象だったGentooには対応していないようでした。
そこはServerSpecはきっちり対応してるのがすごい所ですね。

まとめ


assertで書ける、ansibleの接続設定がそのまま使えるところは非常に使いよいです。