Testinfraでサーバーのテスト

概要

Python製のサーバーテストツールTestinfraを試してみました。
GitHub philpep/testinfra: Testinfra test your infrastructures

インストール

pip install testinfra


テストファイルを用意

test_docker.pyといったファイル名で用意します。

# Docker
def test_docker_engine_is_installed(Package):
    docker_engine = Package("docker-engine")
    assert docker_engine.is_installed
    assert docker_engine.version.startswith("1.13.1")

def test_docker_engine_running_and_enabled(Service):
    docker_engine = Service("docker")
    assert docker_engine.is_running
    assert docker_engine.is_enabled

# td-agent
def test_td_agent_is_installed(Package):
    td_agent = Package("td-agent")
    assert td_agent.is_installed

def test_td_agent_running_and_enabled(Service):
    td_agent = Service("td-agent")
    assert td_agent.is_running
    assert td_agent.is_enabled

関数名はtest_から始める必要があります。

実行

testinfra -v test_docker.py --connection=ssh --hosts=example.com

-vテスト結果を詳細に出すオプションです。

実行例

td-agentを自動起動設定していない状態で実行してみます。
td-agentを自動起動設定のテストだけ失敗するはずです。

plugins: testinfra-1.5.3
collected 4 items

test_docker.py::test_docker_engine_is_installed[ssh://example.com] PASSED
test_docker.py::test_docker_engine_running_and_enabled[ssh://example.com] PASSED
test_docker.py::test_td_agent_is_installed[ssh://example.com] PASSED
test_docker.py::test_td_agent_running_and_enabled[ssh://example.com] FAILED

===== FAILURES =====
_____ test_td_agent_running_and_enabled[ssh://example.com] _____

Service = <class 'testinfra.modules.base.SystemdService'>

    def test_td_agent_running_and_enabled(Service):
        td_agent = Service("td-agent")
        assert td_agent.is_running
>       assert td_agent.is_enabled
E       assert False
E        +  where False = <service td-agent>.is_enabled

test_docker.py:20: AssertionError
===== pytest-warning summary =====
WP1 None Module already imported so can not be re-written: testinfra
===== 1 failed, 3 passed, 1 pytest-warnings in 10.92 seconds =====

1個だけテストが失敗している様子が分かります。