Тестовая кухня
Используйте Test Kitchen, чтобы автоматически тестировать кулинарные книги на любом сочетании платформ и наборов тестов:
- Наборы тестов определяются в файле kitchen.yml. См. документацию по конфигурации для получения информации об опциях и синтаксисе.
- Поддерживает тестирование кулинарных книг на многих облачных поставщиках и технологиях виртуализации.
- Использует исчерпывающий набор базовых образов операционных систем из проекта Bento компании Chef.
Основные понятия Test Kitchen:
- Платформа — это операционная система или целевая среда, на которой будет протестирована кулинарная книга
- Набор — это конфигурация Chef Infra Client, Policyfile или список запусков, а также (необязательно) атрибуты узла
- Экземпляр — это комбинация определенной платформы и определенного набора, и каждому экземпляру присваивается автоматически сгенерированное имя
- Драйвер — это жизненный цикл, который реализует действия, связанные с конкретным экземпляром: создание экземпляра, выполнение необходимых действий для схождения на этом экземпляре (например, установка Chef Infra Client, загрузка кулинарных книг, запуск выполнения Chef Infra Client и т. д.), настройка всего необходимого для тестирования, проверка одного (или нескольких) наборов после схождения, а затем уничтожение этого экземпляра
- Провизор — это компонент, на котором будет выполняться код Chef Infra Client, либо с использованием chef-zero, либо chef-solo через
chef_zeroиchef_soloпровизоров соответственно
Bento
Bento — проект Chef Software, который создает базовые тестовые VirtualBox, Parallels и VMware боксы для нескольких операционных систем для использования с Test Kitchen. По умолчанию Test Kitchen использует базовые образы, предоставляемые Bento, хотя также можно создать пользовательские образы с помощью HashiCorp Packer.
Драйверы
Test Kitchen использует архитектуру плагинов драйверов, чтобы позволить Test Kitchen тестировать экземпляры на облачных поставщиках, таких как Amazon EC2, Google Compute Engine и Microsoft Azure. Вы также можете тестировать на нескольких локальных гипервизорах, таких как VMware, Hyper-V или VirtualBox.
Примечание
Chef Workstation включает в себя множество распространенных драйверов Test Kitchen.
Большинство драйверов имеют настройки конфигурации, специфичные для драйвера, которые необходимо добавить в файл kitchen.yml, прежде чем Test Kitchen сможет использовать эту платформу во время тестирования кулинарных книг. Для получения информации об этих настройках, специфичных для драйвера, обратитесь к соответствующей документации драйвера.
Некоторые популярные драйверы:
| Плагин драйвера | Описание |
|---|---|
| kitchen-azurerm | Драйвер для Microsoft Azure. |
| kitchen-cloudstack | Драйвер для CloudStack. |
| kitchen-digitalocean | Драйвер для DigitalOcean. Этот драйвер поставляется с Chef Workstation. |
| kitchen-dokken | Драйвер для Docker. Этот драйвер поставляется с Chef Workstation. |
| kitchen-dsc | Драйвер для Windows PowerShell Desired State Configuration (DSC). |
| kitchen-ec2 | Драйвер для Amazon EC2. Этот драйвер поставляется с Chef Workstation. |
| kitchen-google | Драйвер для Google Compute Engine. Этот драйвер поставляется с Chef Workstation |
| kitchen-hyperv | Драйвер для Microsoft Hyper-V Server. Этот драйвер поставляется с Chef Workstation. |
| kitchen-openstack | Драйвер для OpenStack. Этот драйвер поставляется с Chef Workstation. |
| kitchen-rackspace | Драйвер для Rackspace. |
| kitchen-vagrant | Драйвер для HashiCorp Vagrant. Этот драйвер поставляется с Chef Workstation. |
Валидация с InSpec
Test Kitchen создаст виртуальную машину или облачный экземпляр, установит Chef Infra Client на эту систему и осуществит схождение Chef Infra Client с вашей локальной кулинарной книгой. После этого вам необходимо выполнить автоматическую валидацию созданной инфраструктуры для проверки её конфигурации. Test Kitchen позволяет запускать тесты InSpec на сходящейся кулинарной книге для легкой локальной валидации вашей инфраструктуры.
kitchen (инструмент командной строки)
kitchen — инструмент командной строки для Test Kitchen, инструмента интеграционного тестирования, поддерживаемого Chef Software. Test Kitchen выполняет тесты на любом сочетании платформ с использованием любого сочетания наборов тестов. Однако каждый тест выполняется на определенном экземпляре, состоящем из одной платформы и одного набора критериев тестирования. Это позволяет запускать каждый тест изолированно, гарантируя, что разные поведения в одном и том же коде могут быть тщательно протестированы до внесения этих изменений в производство.
Примечание
Любой подкоманда Test Kitchen, не указывающая экземпляр, будет применена ко всем экземплярам.
Примечание
kitchen, см. kitchen. kitchen.yml
Используйте файл kitchen.yml, чтобы определить необходимые параметры для запуска Test Kitchen, включая драйверы, провизоров, платформы и наборы тестов.
Примечание
Синтаксис
Основная структура файла kitchen.yml следующая:
driver:name:driver_nameprovisioner:name:provisioner_nameverifier:name:verifier_nametransport:name:transport_nameplatforms:- name:platform-versiondriver:name:driver_name- name:platform-versionsuites:- name:suite_namerun_list:- recipe[cookbook_name::recipe_name]attributes:{foo:"bar"}excludes:- platform-version- name:suite_namedriver:name:driver_namerun_list:- recipe[cookbook_name::recipe_name]attributes:{foo:"bar"}includes:- platform-versionгде:
-
driver_name— имя драйвера, который будет использоваться для создания экземпляров платформы, используемых при тестировании кулинарных книг. Это драйвер по умолчанию для всех платформ и наборов кроме случаев, когда платформа или набор указываетdriver, чтобы переопределить драйвер по умолчанию для этой платформы или набора; драйвер, указанный для набора, переопределит драйвер, заданный для платформы -
provisioner_nameопределяет, как Chef Infra Client будет смоделирован при тестировании.chef_zeroиchef_soloявляются наиболее распространёнными провизорами, используемыми для тестирования кулинарных книг -
verifier_nameопределяет приложение, используемое при запуске тестов, напримерinspec -
transport_nameопределяет транспорт, используемый при выполнении команд удаленно на тестовом экземпляре.winrm— транспорт по умолчанию в Windows.ssh— транспорт по умолчанию во всех остальных операционных системах. -
platform-version— имя платформы, на которой Test Kitchen будет выполнять тестирование кулинарных книг, например,ubuntu-20.04илиcentos-7; в зависимости от платформы могут потребоваться дополнительные детали драйвера, например, имена экземпляров и URL-адреса, используемые с облачными платформами, такими как OpenStack или Amazon EC2 -
platformsможет определять атрибуты Chef Infra Server, общие для набора тестовых наборов -
suites— это набор тестовых наборов, где каждыйsuite_nameопределяет аспект кулинарной книги, который необходимо протестировать. Каждыйsuite_nameдолжен указывать список запуска, например:run_list: - recipe[cookbook_name::default] - recipe[cookbook_name::recipe_name] -
Каждый
suite_nameможет указыватьattributesкак хэш:{ foo: "bar" } -
Группа
suite_nameможет использоватьexcludesиincludesдля исключения/включения одной (или нескольких) платформ. Например:excludes: - platform-version - platform-version # for additional platforms
Например, очень простой файл kitchen.yml:
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:ubuntu-20.04- name:centos-8- name:debian-10suites:- name:defaultrun_list:- recipe[apache::httpd]excludes:- debian-10Этот файл использует HashiCorp Vagrant в качестве драйвера, который не требует дополнительной конфигурации, так как это драйвер по умолчанию, используемый Test Kitchen, chef-zero в качестве провизора и один (по умолчанию) набор тестов, выполняемых на Ubuntu 20.04 и CentOS 7.
Работа с прокси
Переменные среды http_proxy, https_proxy, и ftp_proxy учитываются Test Kitchen для прокси. Файл client.rb считывается для поиска параметров конфигурации прокси. Если http_proxy, https_proxy, и ftp_proxy указаны в файле client.rb, Chef Infra Client будет настраивать переменную ENV на основе этих (и связанных) настроек. Например:
http_proxy 'http://proxy.example.org:8080'
http_proxy_user 'myself'
http_proxy_pass 'Password1'
будет установлено:
ENV['http_proxy'] = 'http://myself:Password1@proxy.example.org:8080'
Test Kitchen также поддерживает http_proxy и https_proxy в файле kitchen.yml. Вы можете задать их вручную или считать из переменных среды:
driver:name:vagrantprovisioner:name:chef_zero# Set proxy settings manually, orhttp_proxy:'http://user:password@server:port'https_proxy:'http://user:password@server:port'# Read from local environment variableshttp_proxy:<%= ENV['http_proxy'] %>https_proxy:<%= ENV['https_proxy'] %>Это не установит переменные среды прокси для приложений, отличных от Chef. Плагин Vagrant, vagrant-proxyconf, можно использовать для установки переменных среды прокси для приложений внутри виртуальной машины.
Дополнительная информация
Для получения дополнительной информации о тест-ориентированном программировании и Test Kitchen:
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/workstation/kitchen/