Рубрики
Uncategorized

Пишите девязыстыми тестами, используя Tomty и Raku

Как писать тесты DEVOPS с использованием TOMTY Framework. Теги с DevOps, Raku, Bash, тестированием.

Томти это структура тестирования Raku с фокусом на задачах DEVOPS. TOMTY позволяет писать тестовые сценарии на Bash (или все, что ) и Orchestrate их используют Raku.

В этом посте я собираюсь дать быстрое введение в томить.

Tomy устанавливается как модуль Raku, используя Zef — Raku Package Manager:

zef install --/test https://github.com/melezhik/Sparrow6.git
zef install --/test https://github.com/melezhik/Tomty.git 

Нам нужна кровотечение кромки версии TOMTY и воробья (зависимость от топора), чтобы получить доступ ко всем, которые упомянуты в этом посте.

Работа с топоми требует некоторой инициализации. Прежде всего, нам нужно создать рабочий каталог для тестов и инициализации его. При желании мы можем установить завершение Bash для Томти — Применение Tomy Cli:

export SP6_REPO=https://sparrowhub.io/repo
mkdir work
cd work
tomty --init
tomty --completion

Сценарии могут быть написаны на многих языках, в этом посте я сосредоточусь на Bash, так как это простой и довольно популярный язык сценариев для задач и автоматизации. Tomy позволяет эффективно эффективно правильно низкоуровневые задачи в Bash, приклеив их вместе с Раку.

Сценарий Bash должен быть просто файлом с именем task.bash и расположен в некоторые каталог:

mkdir -p tasks/task1/
nano tasks/task1/task.bash
echo "hello world"

После создания задачи Bash мы можем запустить его через обертку Raku:

tomty --edit my-task
#!raku
task-run "tasks/task1"

В контексте Raku задача Bash вызывается как функция Raku Задача С помощью параметра настроить каталог задач.

Подход дает нам преимущество использования языка высокого уровня для вызова сценариев Bash низкого уровня.

Теперь давайте запустим нашу первую задачу:

tomty my-task
[repository] :: index updated from file:///root/repo/api/v1/index
[tasks/task1] :: hello world

Задача выполнена успешно, теперь давайте преобразом этот тривиальный Hello World World Imake в чем-то более практично.

Задача проверки проверки здоровья HTTP-ресурса довольно распространена в Daily DevOps @JOB. Давайте посмотрим, как мы могли бы сделать это в топоре.

Во-первых, давайте создадим задачу Bash.

nano tasks/task1/task.bash
curl -s -f $(config url) -o /dev/null -D - | head  -n 4

Задача просто использует Curl Команда, чтобы получить какой-нибудь HTTP URL, обратите внимание, что -f Флаг приводит к скручиванию для выхода с ним не нулевым выходом в случае получения успешного отклика HTTP.

Tooty сценарий, немного изменит, чтобы пройти тестированный URL как параметр в задачу Bash:

tomty --edit my-task
#!raku
task-run "tasks/task1", %(
  url => "https://raku.org"
);

Теперь давайте посмотрим, как это работает:

tomty my-task
[tasks/task1] :: HTTP/2 200
[tasks/task1] :: date: Fri, 02 Jul 2021 18:20:58 GMT
[tasks/task1] :: content-type: text/html
[tasks/task1] :: last-modified: Tue, 25 May 2021 16:30:03 GMT

Как мы могли видеть Bash Имя конфигурации Используется в качестве функции для доступа к названным параметрам, передаваемым в Bash от Raku в качестве Raku Hash. Эти семантические работы, потому что TOMTY — это сборка на вершине инструмента автоматизации воробья, который обеспечивает весь тип таких функций.

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

Давайте посмотрим, как томай позволяет.

Проверка задач Разрешить определять выходные данные, которые ожидают увидеть в запущенном скрипте:

nano tasks/task1/task.check
HTTP/2 200

Итак, мы проверяем это https://raku.org Серверы веб-серверов HTTP V2 Протокол:

tomty my-task
[repository] :: index updated from file:///root/repo/api/v1/index
[tasks/task1] :: HTTP/2 200
[tasks/task1] :: date: Fri, 02 Jul 2021 19:08:34 GMT
[tasks/task1] :: content-type: text/html
[tasks/task1] :: last-modified: Tue, 25 May 2021 16:30:03 GMT
[task check] stdout match  True

И если мы хотим проверить V1 или V2, мы можем использовать регулярные выражения Raku:

nano tasks/task1/task.check
regexp: "HTTP/" 1 || 2 " 200"

Обратитесь к Воробей Задача Проверка Документация, чтобы получить полное объяснение DSL и увидеть более сложные примеры проверки вывода скриптов.

После того, как у вас есть все больше и больше тестов, вы можете запустить все, используя - Все Параметр Tomy Cli:

tomty --all

Однако, когда есть слишком много тестов, это действительно трудно управлять им.

Теги позволяют разделить тесты несколькими группами и выполнять их специально. Это может чрезвычайно полезно с огромной базой тестов.

Позвольте мне показать быстрый простой пример, используя предыдущий сценарий проверки веб-сайта.

Скажем, мы не хотим управлять нашим тестом на доступность веб-сайта, если у нас нет доступа в Интернет в нашей среде тестирования.

Давайте сначала добавьте тег в сценарий Raku:

tomty --edit my-task
#!raku

=begin tomty
%(
  tags => [ 'offline']
)
=end tomty

task-run "tasks/task1", %(
  url => "https://raku.org"
);

Как мы можем видеть теги, добавленные в выделенные «томиты» разделы POD6, как массив Raku (может быть много тегов).

Теперь давайте посмотрим, как мы могли бы использовать этот тег, когда работает TOMTY CLI:

tomty --skip=offline
[1/1] / [my-task] ....... SKIP
=========================================
(=: / [1] tests in 0 sec / (0) tests passed

Как мы можем видеть, что TOMTY не выполнила тест, так как мы обязаны пропустить любые тесты, помеченные как не в сети

Мы могли бы построить еще более сложные примеры. Например, чтобы запустить только офлайн-тесты для приложений версии 2, но для пропуска производственных испытаний:

tomty --only=offline+app-v2 --skip=production

Чтобы перечислить все доступные теги Run:

tomty --list --tags

Иногда вы хотите только список тестов со своими тегами, не выполняющими их, предыдущий пример будет переписан как:

tomty --tags --only=offline+app-v2 --skip=production

Это было краткое введение в топоризм — тестовые рамки, написанные на Raku и поддерживая множество языков сценариев для записи задач низкого уровня. Основная философия воробья (вспомогательный двигатель) — используйте эти языки, которые подходит для вашего домена лучше всего (в нашем случае — Bash — это простой и эффективный способ отправки HTTP-запросов) и скрипты клея вместе с использованием высокого языка — Raku, где скрипты вызвать как функции.

Когда я разрабатываю тесты для моих ежедневных задач DevOps On ToMty, я часто переключаюсь между Bash и Raku, и этот подход позволяет мне эффективно выполнять свою работу и с минимальными усилиями.

Спасибо за чтение. Я хотел бы услышать обратную связь как обычно.

Алексей

Оригинал: «https://dev.to/melezhik/write-devopsish-tests-using-tomty-and-raku-2fl2»