ロールの作成が完了したので、Moleculeが意図したとおりに機能するかどうかをテストするように構成します。+`を変更してプラットフォーム仕様を追加することが含まれます。systemdサービスを設定および開始するロールをテストしているため、systemdが設定され、特権モードが有効になっているイメージを使用する必要があります。Hubで利用可能]を使用します。特権モードでは、コンテナをホストマシンのほぼすべての機能で実行できます。molecule/default/molecule.yml強調表示されたプラットフォーム情報を追加します。flake8完了したら、ファイルを保存して閉じます。テスト環境の構成が正常に完了したので、ロールの実行後にMoleculeがコンテナーに対して実行するテストケースの作成に移ります。ステップ5-テストケースの作成この役割のテストでは、次の条件を確認します。+`パッケージがインストールされていること。+`サービスが実行され、有効になっていること。+」サービスが有効になっていること。+`には、テンプレートファイルで指定されたものと同じデータが含まれています。これらすべてのテストに合格すると、ロールは意図したとおりに機能します。+`でデフォルトのテストを編集しましょう。Testinfraを使用して、Moleculeクラスを使用するPython関数としてテストケースを記述します。molecule/default/tests/test_default.pyファイルの内容を削除して、テストを最初から作成できるようにします。必要なPythonモジュールをインポートすることから始めます。testinfra.utils.ansible_runnerこれらのモジュールは次のとおりです。+:このビルトインPythonモジュールは、オペレーティングシステムに依存する機能を有効にし、Pythonが基になるオペレーティングシステムとインターフェイスできるようにします。+]モジュールはテストの作成を可能にします。backend]を使用します。モジュールのインポートの下で、Ansibleバックエンドを使用して現在のホストインスタンスを返す次のコードを貼り付けます。os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')Ansibleバックエンドを使用するようにテストファイルを構成したら、ユニットテストを作成してホストの状態をテストしましょう。+`がインストールされていることを確認します。`デコレーター]で始まります。テストの引数をパラメーター化します。+`パッケージの存在をテストします。」が実行され有効になっているかどうかを確認します。parametrize()`に渡されたファイルとコンテンツが存在することを確認します。False`を返します。完成したファイルは次のようになります。file.contains(content)テストケースを指定したので、役割をテストしましょう。ステップ6-分子で役割をテストするテストを開始すると、Moleculeはシナリオで定義したアクションを実行します。+」シナリオを再度実行して、デフォルトのテストシーケンスでアクションを実行し、それぞれを詳しく見ていきます。デフォルトのシナリオのテストを再度実行します。testこれにより、テスト実行が開始されます。初期出力では、デフォルトのテストマトリックスが出力されます。destroyリンティングから始めて、各テストアクションと期待される出力を見ていきましょう。+:このリンターは、ロールディレクトリに存在するすべてのYAMLファイルで実行されます。+:このPythonコードリンターは、Testinfra用に作成されたテストをチェックします。+:Ansibleプレイブック用のこのリンターは、すべてのシナリオで実行されます。+`ファイルを使用して実行されます。これは、新しく作成されたコンテナでロールをテストするために行われます。デフォルトでは、destroyは2回呼び出されます。テスト実行の開始時に、既存のコンテナを削除し、最後に、新しく作成されたコンテナを削除します。failed=0破棄アクションが完了すると、テストは_dependency_に進みます。+]から依存関係をプルできます。この場合、ロールは次のことを行いません。`プレイブックで実行されます。/home/sammy/ansible-apache/molecule/default/playbook.yml次に、テストは_create_アクションに進みます。+`ファイルを使用して、指定したDockerコンテナーを作成します。failed=0作成後、テストは_prepare_アクションに進みます。このアクションは準備プレイブックを実行し、収束を実行する前にホストを特定の状態にします。これは、ロールを実行する前にシステムの事前設定が必要な場合に役立ちます。繰り返しますが、これは私たちの役割には適用されません。`プレイブックを実行することにより、コンテナーでロールを実行します。failed=0カバレッジの後、テストは_idempotence_に進みます。このアクションは、多重呼び出しのプレイブックをテストして、複数の実行で予期しない変更が行われないことを確認します。successfully.次のテストアクションは_side-effect_アクションです。これにより、HAフェールオーバーなど、より多くのものをテストできる状況を作り出すことができます。デフォルトでは、Moleculeは副作用プレイブックを設定せず、タスクはスキップされます。configured.Moleculeは、デフォルトの検証ツールであるTestinfraを使用して_verifier_アクションを実行します。+`で作成したテストを実行します。すべてのテストに合格すると、成功メッセージが表示され、Moleculeは次のステップに進みます。===========================最後に、Moleculeはテスト中に完了したインスタンスを_destroys_し、それらのインスタンスに割り当てられたネットワークを削除します。failed=0これでテストアクションが完了し、ロールが意図したとおりに機能したことを確認します。結論この記事では、ApacheとFirewalldをインストールおよび構成するためのAnsibleロールを作成しました。次に、Moleculeが役割が正常に実行されたことを断定するために使用するTestinfraで単体テストを作成しました。非常に複雑な役割にも同じ基本的な方法を使用でき、CIパイプラインを使用したテストも自動化できます。Moleculeは、Dockerだけでなく、Ansibleがサポートするプロバイダーでロールをテストするために使用できる高度に構成可能なツールです。独自のインフラストラクチャに対するテストを自動化して、ロールが常に最新かつ機能していることを確認することもできます。documentation]は、Moleculeの使用方法を学ぶのに最適なリソースです。