PowerShell Pester 101: Практическое руководство для начинающих

Когда вы запускаете скрипт, как можно быть уверенным, что он сделал именно то, что вы задумали? Возможно, он удалил файл или остановил службу. Но сделал ли он это безупречно в каждой среде, сеансе пользователя или на каждой машине, с которой взаимодействовал? Если ваш скрипт воздействует на десятки — тестирование с помощью Pester — ваш лучший вариант.

Pester, мощный модуль PowerShell, помогает вам писать автоматизированные тесты, используя язык предметной области (DSL). В этом руководстве вы узнаете, как исключить догадки и создать надежный процесс для проверки ваших скриптов.

Приспособьтесь и позвольте Pester увеличить вашу уверенность в написании скриптов!

Установка и настройка Pester

Pester гарантирует, что действия вашего скрипта соответствуют вашим ожиданиям в любой среде. Тестирование с помощью Pester — важный навык для управления инфраструктурой с помощью PowerShell.

Но сначала нам нужно установить Pester, чтобы создать некоторые тесты вокруг скрипта, который предоставляет сервер, чтобы увидеть, как работают тесты Pester.

Вы можете загрузить модуль Pester из PowerShell Gallery:

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, Якуб, подписал последнюю версию.

Проверьте установленную версию с помощью следующей команды:

Get-Module -Name Pester -ListAvailable

Создание файла теста Pester

Теперь, когда Pester установлен, создадим некоторые тесты. Для демонстрационных целей предположим, что скрипт должен установить функцию Windows IIS.

Создайте сценарий PowerShell с именем ServerProvisioning.Tests.ps1 в выбранной вами директории; предположим, что это ваша папка ~\Documents.

Затем выполните тесты Pester с помощью командлета Invoke-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 вы можете нажать на элемент Run Tests непосредственно в VS Code для отдельных тестов. Это действие вызывает определенные тесты.


Вывод

В этом руководстве вы узнали, как использовать Pester для автоматизации тестирования ваших сценариев PowerShell. Вы изучили основные шаги для эффективной проверки ваших сценариев. Эти шаги включают установку и настройку Pester, создание файла теста и написание первого автоматизированного теста.

Постройте на этом фундаменте, изучая, как Pester может обрабатывать более сложные сценарии, такие как тестирование API, подмену команд или запуск проверок до и после развертывания.

Интегрируя Pester в свой рабочий процесс, вы улучшите свои сценарии и получите доверие в их надежность — уверенно масштабируйте свои усилия по автоматизации!

Source:
https://adamtheautomator.com/powershell-pester-testing-guide/