스크립트를 실행할 때, 정확히 의도한 대로 작동했는지 어떻게 확신할 수 있을까요? 파일을 제거하거나 서비스를 중지했을 수도 있습니다. 그러나 해당 스크립트가 손을 대는 모든 환경, 사용자 세션 또는 기기 전반에 완벽하게 작동했는지 확인할 수 있었나요? 수십 개의 영향을 미치는 스크립트를 테스트하는 가장 좋은 방법은 Pester를 사용하는 것입니다.
Pester는 강력한 PowerShell 모듈로, 도메인별 언어(DSL)를 사용하여 자동화된 테스트를 작성하는 데 도움이 됩니다. 이 자습서에서는 추측을 제거하고 스크립트를 검증하는 튼튼한 프로세스를 만드는 방법을 배우게 될 것입니다.
준비를 마치고 Pester로 스크립팅 자신감을 높여보세요!
Pester 설치 및 구성
Pester는 모든 환경에서 스크립트의 동작이 기대한 대로 일치하는지 확인합니다. Pester와 함께 테스트하는 것은 PowerShell을 사용하여 인프라를 관리하는 필수 기술입니다.
그러나 먼저, 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 폴더 소유권을 가져와 권한을 업데이트하고 제거합니다.
-Force
매개변수를 추가하여 Pester의 최신 버전을 설치하세요:
Install-Module Pester -Force
새 버전 서명에 관한 다른 경고 메시지를 볼 수 있습니다. 마이크로소프트는 사전 설치된 버전에 서명을 했지만 Pester의 유지 관리자인 Jakub은 최신 버전에 서명했습니다.
다음 명령을 사용하여 설치된 버전을 확인하세요:
Get-Module -Name Pester -ListAvailable
Pester 테스트 파일 만들기
Pester가 설치되었으므로 몇 가지 테스트를 만들어 봅시다. 데모를 위해, 스크립트가 IIS Windows 기능을 설치하는 작업을 수행한다고 가정해 보겠습니다.
원하는 디렉토리에 ServerProvisioning.Tests.ps1이라는 PowerShell 스크립트를 만들어 보세요. 예를 들어, ~\문서 폴더에 만들어 보겠습니다.
그런 다음, Invoke-Pester
cmdlet을 사용하여 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
항목을 클릭할 수 있습니다. 이 작업은 특정 테스트를 호출합니다.
결론
이 튜토리얼에서는 PowerShell 스크립트에 대한 테스트 자동화를 위해 Pester를 사용하는 방법을 배웠습니다. 스크립트를 효과적으로 유효성 검사하는 기본 단계를 다루었습니다. 이러한 단계에는 Pester를 설치하고 구성하는 것, 테스트 파일을 만드는 것, 그리고 첫 번째 자동화 테스트를 작성하는 것이 포함됩니다.
이 기초를 토대로 Pester가 API 테스트, 명령 모의, 또는 사전 및 사후 배포 유효성 검사와 같은 더 고급 시나리오를 처리하는 방법을 탐색하여 발전시키십시오.
Pester를 워크플로에 통합함으로써 스크립트를 개선하고 신뢰할 수 있는 신뢰성을 얻게 될 것입니다 — 자신 있게 자동화 작업을 확장하세요!
Source:
https://adamtheautomator.com/powershell-pester-testing-guide/