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

{% 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;

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

![](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-Lvej9kSTR5zIj5eqAT6%2F-LvejCCMEOC2u95BBA49%2Fmain%20screen.jpg?alt=media\&token=b31121b3-89e6-4899-88e0-a1b0e5b51ca0)

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

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

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

![Создание шаблона GET запроса](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMhWmHEyt7Wg_pwGOK%2Fgetting_started_1.gif?alt=media\&token=a449b957-5d13-4714-bd85-ffdf0a8506de)

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

![Создание Folder узла и перенос шаблона GET запроса](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMhbUocmpVlEgJv8Wx%2Fgetting_started_2.gif?alt=media\&token=98edc4c3-659c-45f8-bb60-14fc441b0161)

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

![Запуск GET запроса](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMhh6Qu8HogBVo8YVV%2Fgetting_started_3.gif?alt=media\&token=2994c506-2517-4eb5-8d5b-0cfdac3e46ef)

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

![](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMhmH053dp3fjyobYv%2Frun%20screen.png?alt=media\&token=f7605fac-dd77-40c1-a4a7-eb21b3810a93)

{% 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](https://docs-ru.testmace.com/node-types/requeststep) узел.&#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](https://docs-ru.testmace.com/node-types/assertion) узлов. Мы сравним отправляемые данные с полученными от сервера.

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

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

![POST запрос и создание Assertion](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMi-YplERQn7P7vAdh%2Fgetting_started_4.gif?alt=media\&token=72a8ead4-09d7-4042-bcf3-5dfc4baac62b)

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

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

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

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

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

![Создание динамической переменной](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMi7013WKadQVvXiGl%2Fgetting_started_5.gif?alt=media\&token=062fae05-2749-47ee-8cb9-f3ca2ebb949b)

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

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

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

![Создание PUT запроса](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMiCJFpZet2AU5b53U%2Fgetting_started_6.gif?alt=media\&token=f2afbe7f-c124-4766-a83f-f9a41eeba3fd)

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

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

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

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

![Проверка изменений через GET запрос](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMiT5mOsq1gAMPerMW%2Fgetting_started_7.gif?alt=media\&token=5e59de9b-f62d-41bc-837b-64cc73fefb57)

## DELETE запрос

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

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

![DELETE запрос](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMiZW7ZpmWWOjtKxmv%2Fgetting_started_8.gif?alt=media\&token=85f97180-fbe5-49ed-9f42-9bb64452d528)

## Проверка DELETE

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

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

![](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMifs1DC9bLBWd_0OX%2Fgetting_started_9.gif?alt=media\&token=2a4955ea-9330-482d-bfd4-79856fea6587)

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

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

![Запуск сценария](https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMgwmbAbE7nK7xCbnP%2F-LiMijSU3AugGlYW8Hb9%2Fgetting_started_10.gif?alt=media\&token=19974399-a80a-4c9d-8929-1481ff85ddff)

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

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

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

## Код для импорта через [shared](https://docs-ru.testmace.com/other/import/shared)

{% file src="<https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMcRqm3jOlWR7Y2Baj%2F-LiMgl1CXlo1QrHQ-pvL%2Fgetting_started_shareCode.txt?alt=media&token=b5e7d344-675d-496f-9ab6-f46b2eb33817>" %}
Быстрый старт Share код
{% endfile %}

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

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

{% file src="<https://1540441421-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMcRqm3jOlWR7Y2Baj%2F-LiMgePcyczxfcL4KgnN%2FTestMace_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9_%D1%81%D1%82%D0%B0%D1%80%D1%82.zip?alt=media&token=ba20e623-8cf6-43f6-9cbd-1fa3b5f7ad31>" %}
Быстрый старт
{% endfile %}
