Skip to content

Latest commit

 

History

History
115 lines (95 loc) · 7.27 KB

File metadata and controls

115 lines (95 loc) · 7.27 KB

Getting Started

Корень приложения содержит две важные дирректории:

  • app
  • test

##app

В дирректории app содержится экземпляр тестируемого приложения. В файле app/index.js необходимо сконфигурировать приложение. Константа APP_NAME содержит название приложения (или ID канала) Конструктор App(channelId, channelOptions) вторым аргументом принимает опции для приложения:

  • host - список хостов приложения по средам
    • develop - среда разработки
    • testing - среда тестирования (или pre-prod)
    • product - продуктовая среда (или prod)
  • trace - список хостов tracing сервиса
    • develop - tracing для разработки
    • testing - тестовый tracing (или pre-prod)
    • product - продуктовый tracing (или prod)

Дирректория app/endpoints содержит произвольную, вложенную структуру папок, которые могут содержать файлы декларации endpoint'а app/endpoints/**/index.js Внутри этого каталога необходимо один раз задекларировать endpoint для его дальнейшего использования в тестах.

const app = require('@/app'); // импорт экземпляра приложения

app.declare({
  url: 'адрес для эндпоинта',
  alias: 'короткое имя для эндпоинта',
  methods: ['get', 'post'], // массив методов для эндпоинта
  headers: {
      'имя заголовка по умолчанию': 'значение заголовка по умолчанию',
  },
  params: {
      'имя параметра по умолчанию': 'значение параметра по умолчанию',
  },
  body: 'тело запроса по умолчанию',
  schemas: {
      'имя схемы': require('./schemas/названия файла с опианием схемы'),
  },
  mock: 'объект которым эмитируется ответ сервера',
})

Схемы характерные для конкретного endpoint'а рекомендуется хранить в каталоге соответствующего endpoint'a в подкаталоге schemas, в отдельных файлах (для описания схемы используется библиотека Joi).

В файле app/data.js содержатся данные по средам для единообразного использования в декларациях либо тестах.

##test Каталог test содержит два подкаталога

  • func - функциональные тесты
  • load - нагрузочные тесты

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

Для написания теста, необходимо импортировать приложение и фреймворк

const app = require('@/app');
const { tasty } = require('tasty-api');

Далее, используя метод tasty.case описать сам тестовый кейс. Результат метода необходимо экспортировать использую присваивание (module.exports = tasty.case) Первым аргументом идёт строка - это заголовок кейса.

Если для выполнения теста, необходимы данные, которых изначально нет (к примеру полуить из результата запроса) в названии файла необходимо указать постфикс .prep.js В этом случае аргументом идёт подготовительная функция tasty.prepare(...actions), которая принимает последовательность запросов, которые необходимо выполнить до начала тестирования как такового (это стадия инициализации и важно не путать эту стадию с секцией before)

В случае когда начальная инициализация ненужна, вторым аргументом достаточно передать null

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

  • запрос
  • тест

Все действия выполняются в том порядке, в котором они были описаны. Для управления запросами доступны функции tasty.series для выполнения запросов последовательно (поведение по умолчанию) tasty.parallel для выполнения запросов параллельно.

Все опции запроса могу меняться в процессе, либо вызовами методов ресурса:

  • setHeaders
  • setParams
  • setBody
  • setMock

Либо в виде объекта переданного функции методу

app.loagin.post({
    headers: {},
    params: {},
    body: {},
    mock: {},
});

Так же объект опций метода может содержать поле capture для получения данных из ответа, и сохранения его в переменную для дальнейшего использования. Фармат объекта следующий:

{
    "json": "$.путь.до.свойства.в.объекте.ответа",
    "as": "имя_переменной"
}

Сам тест описывается при помощи метода tasty.test Первым аргументом метод принимает название теста Вторым - запрос к ресурсу который будет тестироваться Третьим - объект с проверками

{
  checkStatus: 200,
  checkStatusText: 'OK',
  checkStructure: app.login.getSchema('authSuccess'),
  check: (res) => {} // Функция провверки, должна вернуть либо true (проверка прошла) либо false (проверка не прошла)
}

После тестов так же могут быть выполнены методы приложения (app.logout.post()).

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