Serverspecテストコード実例の紹介とコード記述の際のポイント

第1回では、Serverspecの概要とテストコードを書くまでの事前準備についてご紹介しました。第2回では、より具体的な環境を例として、実際に即したServerspecのテストコードの書き方をご紹介します。テストコードを記述する際のポイント等をまとめ、テストコードの記述をスムーズに実施できるようにな

池田 大輔

2014年8月22日 3:00

第1回では、Serverspecの概要とテストコードを書くまでの事前準備についてご紹介しました。第2回では、より具体的な環境を例として、実際に即したServerspecのテストコードの書き方をご紹介します。テストコードを記述する際のポイント等をまとめ、テストコードの記述をスムーズに実施できるようになることを目的として解説します。

LAMP構成のシステムのテスト

具体的なシステムとして、LAMP(Linux、Apache HTTP server、MySQL、PHP)構成の環境を想定し、この環境に対するテストコードの一例を紹介します。

LAMPの構成を採るシステムの例として、今回は統合監視ソフトウェアのZabbixを稼働させるための環境を取り上げます。LAMP環境のベースとなるLinuxは、CentOS 6.5を想定しています。

図1: テスト対象環境の概要図

稼働状況のテストとして、大まかに以下の4つの部分に分けて各部分の稼働状況に対するテストコードを見ていきます。

  • OS(Linux)部分
  • Webサーバ(Apache HTTP server)部分
  • DB(MySQL)部分
  • アプリケーション(PHP)部分

今回の例で紹介するServerspecのテストコードでは、次の表に掲載したResourceTypeを利用します。

表1: LAMP構成のテストに利用するリソースタイプResourceType

ResourceType種別概要利用可能なMatcherの例
packageパッケージがインストールされているかのテストを実施。
rpmやdeb、rubyのgemパッケージに対応。バージョン確認も可能。
be_installed等
serviceサービスの稼働状況のテストを実施。
稼働状態や初期起動の設定状態の確認が可能。
be_running、be_enabled等
file指定したファイルの存在確認や権限、所有者の確認、ファイルの中身の確認が可能。be_file、be_directory、be_owned_by、be_writable等
command任意のコマンドの実行結果の確認が可能。return_stdout、return_stderr、return_exit_status等
selinuxSELinuxの状態の確認が可能。be_disabled、be_enforcing、be_permissive
iptablesiptablesの設定状態の確認が可能。have_rule
hostホストの名前解決が可能かどうかの確認やホストに到達可能かどうかの確認が可能。be_resolvable、be_reachable等
portTCP、UDPのポートの稼働状態の確認が可能。be_listening
php_configPHPの設定状態の確認が可能。-

【ポイント】
IPアドレス等、実行対象の環境毎に変わる値については変数として外に出し、テストコードの実行処理部分で変数展開するように書くことで、テストコードの使い回しが行いやすくなります。上記の例では、テストコード内で直接変数を定義してテストコード部分で展開していますが、設定情報だけを別ファイルとして管理することも可能です。その方法については第3回で紹介するTipsの中で解説します。

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30