Проверьте свою инфраструктуру с помощью Pester и избегайте сбоя PowerShell
Прежде чем запускать любой разработанный вами код PowerShell, вы должны точно знать, какое влияние он окажет на вашу инфраструктуру. Пестер может помочь вам сделать это. Pester — это среда модульного тестирования с открытым исходным кодом, позволяющая создавать тесты для проверки сценариев PowerShell. Он основан на модуле PowerShell, созданном Скоттом Мачем, и разрабатывается и поддерживается на GitHub сообществом PowerShell. Джефф Кросби поддерживает Wiki для фреймворка, и вы можете прочитать его обзор здесь, если вы еще не знакомы с Pester.
Будучи автором, я задавался вопросом, есть ли какие-нибудь хорошие книги для изучения того, как использовать Pester, и оказалось, что есть действительно хорошая книга, недавно написанная моим коллегой Адамом Бертрамом. Книга называется «Книга Пестера: универсальное руководство по пониманию и написанию тестов для PowerShell», и вы можете купить ее непосредственно у издателя Leanpub. Адам уже писал в блоге о Pester и о том, как использовать фреймворк для проверки того, делает ли ваш код PowerShell то, что вы от него ожидаете, и ни больше, ни меньше, и его новая книга значительно расширяет возможности использования Pester для обеспечения качества ваших приложений. Код собственной разработки. И Адам, безусловно, знает свое дело — он ветеран ИТ с 20-летним стажем и опытный профессионал в области онлайн-бизнеса, который работал предпринимателем, влиятельным лицом в области ИТ, Microsoft MVP, блоггером, тренером, автором и писателем по контент-маркетингу для нескольких технологических компаний. Адам также является основателем популярной платформы для развития карьеры в сфере ИТ TechSnips и часто публикует статьи на своем сайте adamtheautomator.com. Вы можете связаться с ним в LinkedIn или подписаться на него в Twitter на @adbertram. Адам любезно поделился со мной одной из глав своей книги, и ниже я привожу отрывки из этой главы. Глава посвящена тестированию инфраструктуры и начинается с объяснения, почему такой инструмент, как Pester, нужен организациям, которые разрабатывают и используют код PowerShell в своей среде. Глава начинается так:
Тестирование инфраструктуры
Поскольку Pester — это среда тестирования, некоторые люди, занимающиеся ИТ-операциями, не видят ее преимуществ. Они видят ссылки на насмешки, тестирование выходных данных функций и утверждения о том, что были выброшены исключения, и автоматически предполагают, что это к ним не относится. Они считают, что Pester предназначен только для тестирования . Я бы сказал, что модульное тестирование по-прежнему важно для ИТ-администратора, который пишет сценарии; но помимо моего явного презрения к «отсутствию модульного тестирования», есть еще один вид тестирования, который возможен с помощью Pester: или .
Тестирование инфраструктуры — относительно новая концепция в мире тестирования. С тех пор, как все это движение DevOps закрепилось, многие ИТ-специалисты пытались найти способы адаптировать традиционные концепции разработчиков к инфраструктуре; таким образом родилось . Тестирование инфраструктуры представляет собой комбинацию более традиционной , ориентированной на разработчиков программного обеспечения, и тестирования.
Тестирование инфраструктуры — это не тестирование кода; речь идет о тестировании изменений кода в среде. Некоторые даже утверждают, что код вообще не нужен!
Тестирование инфраструктуры — это просто определение практики, которой вы занимались годами. Вместо того, чтобы вручную оценивать результаты того, что ваш сценарий должен был изменить в среде, тестирование инфраструктуры берет шаги, которые вы прошли в своем мозгу, и преобразует их в код. Как только эти этапы проверки будут реализованы в коде, вы сможете автоматизировать тестирование и унаследовать все преимущества автоматизации.
Тестирование инфраструктуры — это не тестирование кода; речь идет о тестировании изменений кода в среде.
Если вы каким-либо образом изменяете свою инфраструктуру с помощью кода, вы что он работает? Я не имею в виду: «Он не выдал сообщение об ошибке и не заполнил консоль красным текстом». Я имею в виду, вы на 100% уверены, что он сделал то, что, по вашему мнению, должен был сделать?
- Он создал этого пользователя Active Directory?
- Изменилось ли это значение ключа реестра?
- Он перезапустил эту виртуальную машину?
Сценарии могут быть сложными и содержать множество различных способов выполнения кода. Например, одна простая ошибка в одной конструкции может пропустить целые разделы вашего скрипта, даже если вы этого не заметите. Очень важно иметь надзирателя, чтобы гарантировать, что изменения инфраструктуры, которые вы намеревались внести, соответствуют ожиданиям. На этой должности надзирателя вступают Пестер и тестирование инфраструктуры.
Pester — это инструмент, который позволяет вам писать код, который не только гарантирует, что код написан правильно, но и то, что код именно то, что вы ожидали. Как это делается? Это то, о чем эта глава.
Дальнейшие выдержки
Адам продолжает свою главу, предоставляя читателям простой пример использования тестирования инфраструктуры в Pester. Пример, который он выбрал, чтобы проиллюстрировать мощь Pester, — это задача, которую часто выполняют корпоративные администраторы Windows, а именно получение пакета информации об учетной записи пользователя из CSV-файла или базы данных и использование PowerShell для заполнения этой информации в Active Directory. Проблема, конечно, когда вы делаете что-то подобное, заключается в том, что вы, вероятно, найдете сценарий PowerShell где-нибудь в Интернете и используете или настраиваете его для выполнения своей задачи. Но откуда вы знаете, что сценарий, который вы используете, проверяет каждый из атрибутов каждой учетной записи, которую он обрабатывает? И проверяет ли ваш скрипт сначала, чтобы убедиться, что учетные записи, которые вы добавляете, еще не находятся в Active Directory? Ошибки и упущения, подобные этим, могут привести ко всевозможным проблемам, включая повреждение информации об использовании, которую вы храните в каталоге, поэтому использование такой платформы, как Pester, необходимо для предотвращения подобных вещей.
К сожалению, полное пошаговое руководство по примеру Адама, включая весь код и образец вывода, слишком длинное, чтобы мы могли включить его в эту краткую статью, но я могу обрисовать шаги, которые Адам выполняет в своем пошаговом руководстве, а вы можете пройти через все пошаговое руководство и многое другое. купив книгу Адама! Во всяком случае, то, что Адам представляет в своем пошаговом руководстве по тестированию инфраструктуры, таково:
- Анализ кода
- Получение тестовых зависимостей на месте
- Прототипы тестов инфраструктуры
- Оценка текущей среды
- Написание тестов инфраструктуры
Затем Адам продолжает, подчеркивая важную разницу между модульными тестами, которые являются самодостаточными и не «касаются» вашей производственной среды, и инфраструктурными тестами, которые «касаются» вашей среды, потому что, когда вы выполняете тест инфраструктуры, сделанные вами предположения относительно вашего окружения проверены реальностью. А когда резина отправится в путь, могут выявиться неожиданные зависимости. Затем Адам продолжает пошаговое руководство по тестированию инфраструктуры, демонстрируя выполнение следующих задач для своего примера кода:
- Создание кода обнаружения зависимостей
- Добавление проверки зависимостей в тесты
- Создание структуры зависимостей
- Два способа лечения зависимостей
Адам завершает кратким обзором модуля PowerShell Operational Validation Framework (OVF), который использует Pester для предоставления предметно-ориентированного языка (DSL), специально предназначенного для тестирования инфраструктуры, и который, по словам Адама, вы можете использовать, «если вам нужно создавать тесты инфраструктуры с помощью Приставать, но не обязательно создавать решение с нуля». В заключение Адам сказал: «Несмотря на то, что Pester не был специально разработан для тестирования инфраструктуры, он все же может выполнять свою работу. Поскольку Pester построен с помощью PowerShell, а PowerShell достаточно гибок, чтобы работать со всеми видами компонентов инфраструктуры, это только помогает, поскольку Pester тоже может это делать. Я лично использовал Pester для тестирования кода инфраструктуры, — говорит Адам, — а также в качестве рудиментарной платформы для тестирования и могу искренне рекомендовать ее».
И, начав немного играться с Пестером, я тоже могу его порекомендовать. И я также рекомендую книгу Адама?