スクリプトを実行した際、それが正確に意図したとおりに行われたことをどのように確認できますか?ファイルが削除されたり、サービスが停止されたりしたかもしれません。しかし、すべての環境、ユーザーセッション、または触れたすべてのマシンで完璧に行われたかどうかはわかりません。スクリプトが複数の場所に影響を与える場合、Pesterを使用したテストが最善の選択肢です。
Pesterは、強力なPowerShellモジュールであり、特定のドメイン言語(DSL)を使用して自動テストを記述するのに役立ちます。このチュートリアルでは、推測作業を排除し、スクリプトを検証するための堅牢なプロセスを作成する方法を学びます。
準備を整えて、Pesterがスクリプトの信頼性を向上させるのをお楽しみください!
Pesterのインストールと設定
Pesterを使用すると、スクリプトのアクションがすべての環境で期待通りに行われることを確認できます。Pesterを使用したテストは、PowerShellを使用してインフラストラクチャを管理するための必須スキルです。
しかし、まずはPesterをインストールして、Pesterのテストがどのように機能するかを確認するために、サーバーをプロビジョニングするスクリプトの周りにいくつかのテストを構築する必要があります。
PowerShell ギャラリーからPester
モジュールをダウンロードできます:
Install-Module Pester
警告が表示される場合は、Windows 10(以降)クライアントにはデフォルトで古いバージョンのPesterがインストールされている可能性があるためです。たとえば、バージョン3.4.0が事前にインストールされていることがよくあります。
競合を避けるために古いバージョンを削除してください:
$module = "C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0" takeown /F $module /A /R icacls $module /reset icacls $module /grant "*S-1-5-32-544:F" /inheritance:d /T Remove-Item -Path $module -Recurse -Force -Confirm:$false
このスクリプトは、Pester 3.4.0フォルダーの所有権を取得し、アクセス許可を更新して削除します。
最新バージョンのPesterをインストールするには、-Force
パラメーターを追加してください。
Install-Module Pester -Force
新しいバージョンの署名に関する別の警告が表示されるかもしれません。Microsoftはプリインストール版に署名しましたが、Pesterの管理者Jakubは最新バージョンに署名しました。
インストールされているバージョンを以下のコマンドで確認してください:
Get-Module -Name Pester -ListAvailable
Pesterテストファイルの作成
Pesterがインストールされたので、いくつかのテストを作成しましょう。デモ目的で、スクリプトがIIS Windows機能をインストールするタスクを担当していると仮定します。
ServerProvisioning.Tests.ps1という名前のPowerShellスクリプトを希望のディレクトリに作成します。たとえば、~\Documentsフォルダーにあるとしましょう。
次に、Invoke-Pester
コマンドレットを使用してPesterのテストを実行します:
cd ~\Documents Invoke-Pester
このコマンドをテストなしで実行すると、テストは実行されません。
Pesterの階層ブロック構造を使用していくつかのテストを追加しましょう。ここで:
describe
は、スクリプトの主要機能など、テストのカテゴリを表します。context
は、オプションでテストをサブカテゴリに整理します。it
は、個別のテストを定義します。
describe 'IIS' { context 'Windows features' { it 'installs the Web-Server Windows feature' { } } } describe 'RegistryTweaks' { } describe 'SoftwareInstalls' { }
テストの追加と実行
サーバーをプロビジョニングするスクリプトがあると仮定しますが、必要な機能を有効にするという重要なステップを見逃しています。この見落としは、チェックしないままだと本番環境で連鎖的な問題を引き起こす可能性があります。
サーバープロビジョニングスクリプトが実行されたと仮定し、Web-Server
機能がインストールされていることを確認するタスクがあります。そうであれば、手動で確認を行ってください。
次のコマンドを実行して、リモートサーバーにWeb-Server
機能(IIS)がインストールされているか手動で確認します。
Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed }
このコマンドは、機能がインストールされている場合はTrue
を返し、そうでない場合はFalse
を返します。
次に、このテストを自動化するためにit
ブロックに以下を追加します。should
演算子と-BeTrue
条件は、機能がインストールされていることを確認します。
describe 'IIS' { context 'Windows features' { it 'installs the Web-Server Windows feature' { Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed } | should -BeTrue } } }
最後に、テストを再実行します:
cd ~\documents Invoke-Pester
予想通り、機能がインストールされていない場合、テストは失敗します。
VS Codeには優れたPester統合もあります。Invoke-Pester
を実行する代わりに、VS Code内で個々のテストのRun Tests
項目をクリックできます。このアクションは特定のテストを実行します。
結論
このチュートリアルでは、Pesterを使用してPowerShellスクリプトのテストを自動化する方法を学びました。スクリプトを効果的に検証するための基本的なステップをカバーしました。これらのステップには、Pesterのインストールと設定、テストファイルの作成、および最初の自動テストの作成が含まれます。
この基盤の上に、PesterがAPIのテスト、コマンドのモック、またはデプロイ前後の検証などのより高度なシナリオをどのように処理できるかを探求してください。
Pesterをワークフローに統合することで、スクリプトを改善し、その信頼性を確信できるようになります—自信を持って自動化の取り組みを拡大しましょう!
Source:
https://adamtheautomator.com/powershell-pester-testing-guide/