Тестовая кухня
Используйте 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-16.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как Hash:{ foo: "bar" }-
Группа
suite_nameможет использоватьexcludesиincludesдля исключения/включения одной (или нескольких) платформ. Например:excludes: - platform-version - platform-version # for additional platforms
Например, очень простой файл kitchen.yml:
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:ubuntu-18.04- name:centos-8- name:debian-10suites:- name:defaultrun_list:- recipe[apache::httpd]excludes:- debian-10Этот файл использует Vagrant в качестве драйвера, который не требует дополнительной конфигурации, поскольку это драйвер по умолчанию, используемый Test Kitchen, chef-zero в качестве провайдера и один (по умолчанию) набор тестов, выполняемых на Ubuntu 16.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/