> For the complete documentation index, see [llms.txt](https://docs-ru.testmace.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-ru.testmace.com/master.md).

# Быстрый старт

{% hint style="info" %}
В этом руководстве мы протестируем работу back-end сервера для записей типа post на следующем сценарии:

* запросим у сервера все имеющиеся записи
* добавим новую запись
* проверим корректное добавление записи
* обновим только что созданную запись и проверим корректность обновления через ответ от сервера
* запросим обновленную запись от сервера
* проверим, что на сервере запись действительно обновлена
* удалим запись
* проверим, что на сервере запись не существует

**Для этого нам потребуется не более 10 минут, после запуска программы.**
{% endhint %}

## Установка TestMace

Скачать TestMace можно по ссылкам ниже или с сайта <https://client.testmace.com>

* Windows <https://client.testmace.com/download/?os=windows>&#x20;
* Mac OS <https://client.testmace.com/download/?os=mac>
* Linux <https://client.testmace.com/download/?os=linux>

Запустите скачанный файл  и следуйте инструкциям инсталлятора, во время установки будет предложено выбрать директорию установки приложения.

{% hint style="warning" %}
*Для установки TestMace на Windows запустите инсталлятор **с правами администратора.***
{% endhint %}

По завершению установки запустите приложение. Перед вами откроется новый проект.&#x20;

## Обзор интерфейса

![](/files/-LvejCCMEOC2u95BBA49)

## Ваш первый GET запрос

Для создания первого запроса создайте новую вкладку нажав на **+**. При этом в зоне "Scrathes Area" будет создан узел с названием **Scratch 1**. Вставьте в поле URL адрес: <https://testmace-stage.herokuapp.com/posts>. Можно сразу протестировать ответ сервера из "Scrathes Area" или перенести наш черновик в проект. Для удобства переименуйте этот узел, дав ему название **getPosts**.&#x20;

{% hint style="info" %}
Обратите внимание, что все изменения в проекте сохраняются автоматически в режиме реального времени.
{% endhint %}

![Создание шаблона GET запроса](/files/-LiMhWmHEyt7Wg_pwGOK)

Создайте в проекте узел типа [Folder](/node-types/folder.md) с названием **posts** и перенесите созданный черновик **getPosts** из "Scratch Area" в "Project Area".

![Создание Folder узла и перенос шаблона GET запроса](/files/-LiMhbUocmpVlEgJv8Wx)

Откройте двойным кликом созданный запрос **getPosts** и выполните его нажав на кнопку "Run".

![Запуск GET запроса](/files/-LiMhh6Qu8HogBVo8YVV)

Мы видим, что запрос выполнен успешно, в **Response Area** получен список существующих записей.  Давайте рассмотрим этот экран подробнее:

![](/files/-LiMhmH053dp3fjyobYv)

{% hint style="info" %}

#### Request parameters

Здесь вы можете указать http заголовки, а так же передать параметры запросу с автодополнением и использование переменных.

#### Request type

* **GET** — получение ресурса
* **POST** — создание ресурса
* **PUT** — обновление ресурса
* **DELETE** — удаление ресурса
* **PATCH** — для частичного изменения ресурса
* **OPTIONS** — для описания параметров соединения с ресурсом

#### URL

Поле URL поддерживает автодополнение, а так же использование переменных. Мы воспользуемся этими функциями чуть позже.&#x20;

#### Make Request

Выполнение запроса или группы запросов при запуске из корня проекта или ноды типа folder

#### Response area

Зона ответа сервера, вкладка Response Body может быть представлена в виде: Parsed, JSON, text. В соседних вкладках можно посмотреть Response Headers, а так же создать или посмотреть существующие Assertion узлы для запроса.
{% endhint %}

## POST запрос и Assertion

Давайте теперь добавим новую запись типа post на сервер, для этого нам нужно создать новый [RequestStep](/node-types/requeststep.md) узел.&#x20;

{% hint style="info" %}
**Существует три способа добавления нового узла в проект:**

1. Мы можем создать черновик (Scratch) нажав на **+** и позже перенести его в проект используя Drag and Drop;&#x20;
2. Можно нажать правой кнопкой мыши по узлу родителю и выбрать **Add node -> Request step**;&#x20;
3. Можно нажать на кнопку **Add project node-> Add node -> Request step**.&#x20;
   {% endhint %}

Создайте новый узел любым из этих способов и задайте ему имя **createPost**.&#x20;

1. Выберите для этого узла "**Request type**" значением POST
2. В поле URL вставьте <https://testmace-stage.herokuapp.com/posts>
3. Во вкладке body выберите тип данных JSON и добавьте `{"title": "Testing post", "content": "Sendt via TestMace"}`
4. Выполните запрос нажав на кнопку RUN.&#x20;

Будет получен ответ об успешном добавлении записи, но нам нужно проверить, что запись добавлена корректно, для этого мы воспользуемся механизмом быстрого создания [Assertion](/node-types/assertion.md) узлов. Мы сравним отправляемые данные с полученными от сервера.

В зоне "Response Area" в формате Parsed нажмите правой кнопкой мыши по **значению title**, которое мы передавали в  запросе, выберите **Create Assertion -> Compare -> Equal.** После этого узел [Assertion](/node-types/assertion.md) будет создан и открыт, нам дополнительной настройки не требуется, поэтому закроем его. Аналогично создадим Assertion узел для значения Content.

А теперь запустим запрос **createPost** и интерфейс проинформирует нас об успешном выполнении теста. Это совсем не сложно, посмотрите анимацию ниже:

![POST запрос и создание Assertion](/files/-LiMi-YplERQn7P7vAdh)

### Динамические переменные

Для того, чтобы мы могли взаимодействовать с созданной нами записью на сервере, нужно передавать в последующие [Request step](/node-types/requeststep.md) значение её **Id**. Создадим динамическую переменную **postId** и присвоим ей значение Id возвращаемое в записи после выполнения **CreatePost**.&#x20;

1. Кликните правой кнопкой мыши по значению **Id** в Response body ноды **CreatePost**,&#x20;
2. Выберите пункт **Assign to variable**.&#x20;
3. Во всплывающем окне в качестве ноды выберите директорию проекта **posts**, введите имя переменной: **postId** и нажмите **ОК**.

Для того чтобы обратиться к переменной используйте [встроенную переменную](/variables/variables.md) `$dynamicVar`:

```
${$dynamicVar.postId}
```

![Создание динамической переменной](/files/-LiMi7013WKadQVvXiGl)

## PUT запрос&#x20;

На этом этапе мы будем использовать запрос типа PUT. Обратимся  к записи созданной на предыдущем шаге при помощи динамической переменной: `${$dynamicVar.postId}` и обновим  значения записи **title** и **content**.

1. Создайте [RequestStep](/node-types/requeststep.md) узел c именем **updatePost**
2. Request type выберите **PUT**
3. URL: <https://testmace-stage.herokuapp.com/posts/${$dynamicVar.postId}>
4. Body: `{"title": "Testing post updated", "content": "Updated via TestMace"}`
5. Выполним запрос и аналогично шагу **POST запрос**, создадим два [Assertion](/node-types/assertion.md) узла для сравнения отправленных и полученных значений **title** и **content**.

![Создание PUT запроса](/files/-LiMiCJFpZet2AU5b53U)

## Проверка изменений

В некоторых случаях необходимо провести дополнительную проверку изменений записи, так как сервер может ответить на PUT запрос успешным выполнением, а при обращении через GET запрос мы получим старую запись.&#x20;

Для этого мы создадим GET запрос по URL записи с использованием динамической переменной:

1. Создайте новый [RequestStep](/node-types/requeststep.md) узел с именем **getPost**
2. Тип запроса: GET
3. URL: <https://testmace-stage.herokuapp.com/posts/${$dynamicVar.postId}>
4. Выполните запрос и создайте 2 [Assertion](/node-types/assertion.md) узла для сравнения данных **title** и **content**.

![Проверка изменений через GET запрос](/files/-LiMiT5mOsq1gAMPerMW)

## DELETE запрос

Следующий шаг - удаление созданной нами записи по URL записи с использованием динамической переменной:

1. Создайте узел типа [RequestStep](/node-types/requeststep.md) с именем **deletePost**
2. Тип запроса: DELETE
3. URL: <https://testmace-stage.herokuapp.com/posts/${$dynamicVar.postId}>

![DELETE запрос](/files/-LiMiZW7ZpmWWOjtKxmv)

## Проверка DELETE

Для того, чтобы убедиться, что созданная запись была удалена с сервера, создадим GET запрос  по URL записи с использованием динамической переменной, мы ожидаем, что при запросе получим ответ сервера: 404, поэтому создадим соответствующий Assertion узел:

1. Создайте узел типа [RequestStep](/node-types/requeststep.md) с именем **checkIfNodeExists**
2. Тип запроса: GET
3. URL: <https://testmace-stage.herokuapp.com/posts/${$dynamicVar.postId}>
4. Выполните запрос и в зоне Response Area выберите пункт **Assertions** и добавьте новый [Assertion](/node-types/assertion.md) узел, нажав ADD. Внесите данные узла:
   1. Actual value: `${$response.code}`
   2. Operator: `=`
   3. Expected value: `404`

![](/files/-LiMifs1DC9bLBWd_0OX)

## Заключение

В результате мы получили набор тестов для нашего сервера, которые можно последовательно выполнить, перейдите в узел **posts** и нажмите RUN.&#x20;

![Запуск сценария](/files/-LiMijSU3AugGlYW8Hb9)

## Видео инструкция

Посмотрите весь процесс создания сценария описанного в руководстве на видео

{% embed url="<https://youtu.be/Gyg_4w78KBo>" %}

## Код для импорта через [shared](/other/import/shared.md)

{% file src="/files/-LiMgl1CXlo1QrHQ-pvL" %}
Быстрый старт Share код
{% endfile %}

## Скачать проект

Разархивируйте  в директорию проектов TestMace.

{% file src="/files/-LiMgePcyczxfcL4KgnN" %}
Быстрый старт
{% endfile %}
