Большой гайд по тестированию с Postman для начинающих

Содержание

  1. Что такое API?
  2. Что такое Postman?
  3. Зачем использовать Postman?
  4. Установка Postman
  5. Особенности Postman
  6. Как пользоваться Postman?
  7. Основные сущности Postman: запросы, коллекции и окружения
  8. Тестирование GET-запросов
  9. Тестирование POST-запросов
  10. Параметризация запросов
  11. Создание тестов в Postman
  12. Запуск коллекций с помощью Collection Runner
  13. Запуск коллекций с помощью Newman

В этом большом гайде мы разберем тестирование API с помощью Postman. Он покроет большинство сценариев использования этой программы в вашей повседневной работе.

Давным-давно Postman стартовал как расширение для Google Chrome. Сейчас это полноценное нативное приложение, доступное на Windows, Linux и MacOS.

Что такое API?

API — сокращение от Application Programming Interface (программный интерфейс приложения). API — набор правил, протоколов и инструментов для взаимодействия между приложениями. Говоря простым языком, API — интерфейс, который определяет, как одна программа должна взаимодействовать с другой программой. Как правило, представляет собой набор функций, которые могут быть вызваны другой программой.

Что такое Postman?

Postman — приложение для работы с API. Это популярный API клиент, который позволяет разрабатывать, тестировать и документировать API.

Как тестировщики, с помощью Postman мы можем отсылать HTTP/s запросы к сервисам и получать от них ответы. С помощью такого подхода можно протестировать бэкенд сервисы и убедиться, что они корректно работают.

Зачем использовать Postman?

Сегодня Postman — супер-популярный инструмент. Им пользуются более 8 миллионов разработчиков и тестировщиков. И вот почему:

  • Бесплатный. Postman — бесплатный инструмент.
  • Простой в использовании. Очень просто начать пользоваться — Postman интуитивно понятный. Уже через несколько минут после скачивания и установки вы сможете отправить ваш первый запрос.
  • Поддерживает разные API. С помощью Postman можно выполнять разные типы запросов к любым API (REST, SOAP, GraphQL (по тестированию GraphQL c помощью Postman у нас есть отдельная статья)
  • Расширяемый. Postman можно настроить под ваши конкретные нужды с помощью Postman API.
  • Интегрируемый. Можно легко интегрировать наборы тестов в ваш любимый CI/CD инструмент с помощью Newman (CLI collection runner — позволяет запускать Postman-коллекции в командной строке)
  • Имеет большое комьюнити. Postman очень популярный и, как следствие, имеет большое комьюнити, которое подскажет ответы на большинство вопросов.

Установка Postman

Рассмотрим установку на Windows нативного приложения, поскольку Chrome-расширение уже не обновляется, разработчики Postman настоятельно рекомендуют ставить standalone-версию. 

  1. Идем по линку и скачиваем версию для Windows. 

Рекомендуется ставить 64-битную версию.

  1. Открываем exe-файл:

Постман ставится, ждем:

  1. После завершения установки будет предложено создать экаунт. Можно нажать «Потом». Но рекомендуется сделать это сразу, чтобы сохранить свои первые тесты.
  1. После входа в экаунт настраиваем и сохраняем.

Postman откроется:

После того, как Postman установлен, можно переходить к тестированию API.

Postman отличный инструмент для тестирования API для тех, кто не хочет или не может писать тесты вручную (в IDE на языке программирования, используемом для разработки приложения).

Особенности Postman

Ниже мы перечислим только некоторые из особенностей Postman:

  • Простой в использовании API клиент
  • Функциональный и приятный UI.
  • Может использоваться как для ручного, так и для автоматизированного тестирования API.
  • Поддерживает интеграции с другими инструментами (например, поддерживает Swagger и RAML)
  • Может быть запущен в Windows, Linux, MacOS.
  • Не требует знания языков программирования.
  • Предоставляет возможность легко экспортировать коллекции запросов, наборы тестов. Можно легко обмениваться этими данными с коллегами.
  • Интегрируется с CI/CD инструментами (например, с Jenkins, TeamCity и т.п.)
  • API Posman-a подробно документирован.
  • Позволяет выполнять API автотесты.

Больше информации о Postman можно найти на официальном сайте: https://www.getpostman.com/

Цена: Бесплатно или 21 доллар за пользователя в месяц.

Postman — freemium-интсрумент. Но бесплатной версии более, чем достаточно, чтобы проводить базовое тестирование API.

Как пользоваться Postman

Для начала, давайте подробно рассмотрим интерфейс. Мы сознательно будем рассматривать английскую версию (и рекомендуем использовать именно ее):

Рабочая область Postman
Рабочая область Postman
  1. New: С помощью этой кнопки можно создать новый запрос (Request), коллекцию (Collection) или окружение (Environment).
  2. Import: С помощью этой кнопки можно импортировать коллекцию или окружение. По нажатию откроется окно, где вы сможете выбрать одну из нескольких опций для импорта: импорт из файла, папки или по ссылке. Также можно просто вставить данные для импорта в текстовое поле.
  3. Runner: По нажатию на кнопку запускается Collection Runner, который выполняет коллекции запросов.
  4. Open New: По нажатию открывается новое окно Postman или новое окно запуска коллекций.
  5. My Workspace: Моя рабочая область. С помощью этой кнопки можно создать новую рабочую область (workspace). Рабочая область предоставляет общий контекст для работы с API. Может использоваться для совместной работы внутри команды (ее можно расшарить с коллегами).
  6. Invite: С помощью этой кнопки можно пригласить других членов команды для совместной работы внутри рабочей области (workspace-а)
  7. History: Все запросы и ответы попадают во вкладку «History» (История). Это позволяет вернуться к предыдущим запросам.
  8. Collections: В этой вкладке хранятся коллекции запросов. Коллекции используются для группировки запросов по каким-либо признакам.
  9. Request Tab: Вкладка запроса. Название вкладки по умолчанию — Untitled Project. Хорошая практика — называть вкладку по названию запроса.
  10. HTTP Request: С помощью этого выпадающего списка можно выбрать тип запроса: GET, POST, PUT, PATCH, DELETE и т.п.
  11. Request URL: URL API запроса.
  12. Save: По нажатию на кнопку Save можно сохранить запрос (или перезаписать, если запрос уже был сохранен ранее)
  13. Params: Параметры, необходимые для выполнения запроса.
  14. Authorization: API используют авторизацию, чтобы убедиться, что клиент имеет доступ к запрашиваемым данным. В этой секции описываются параметры авторизации: например, username, password, bearer-токен и т.п.
  15. Headers: Для работы с некоторыми API с каждым запросом необходимо отправлять специальные хедеры. Это нужно для того, чтобы добавить дополнительные данные о типе операции, которую вы хотите провести. Хедеры можно указать в этой секции.
  16. Body: В этой вкладке указываются данные, которые должны быть отправлены вместе с запросом.
  17. Pre-request Script: Pre-request скрипты пишутся на JavaScript и выполняются перед отправкой запросов. Используются для того, чтобы провести какие-то действия прямо перед тем, как отправить запрос (например, добавить timestamp или какие-то вычисляемые данные в ваши запросы)
  18. Tests: Во вкладке Tests находятся скрипты, которые выполняются во время запроса. Тесты позволяют проверить API и убедиться, что все работает так, как это было задумано.

Основные сущности Postman: запросы, коллекции и окружения

Перед тем, как приступить непосредственно к тестированию, давайте рассмотрим основные сущности, которыми оперирует Postman:

  1. Запросы
  2. Коллекции
  3. Окружения

1. Запросы (Requests)

Запрос представляет собой комбинацию URL, хедеров и Body (тела запроса). Postman позволяет сохранять запросы и использовать их в будущем там, где вам нужно.

Чтобы создать новый запрос, нажмите New — Request

Postman
Postman
Postman

Как мы писали выше, Postman позволяет делать запросы к API. С помощью API-запроса можно получать и отправлять данные какому-либо бэкенд-сервису.

Для каждого API-запроса нужно выбрать HTTP-method.

Что такое HTTP?

HTTP — сокращение от HyperText Transfer Protocol (протокол передачи гипертекста). Протокол используется для общения клиента и сервера. Клиентом, к примеру, может быть браузер (в нашей статье в качестве клиента используется Postman).

После отправки клиентом HTTP-запроса, сервер возвращает ответ. Ответ сервера содержит метаданные о статусе и запрашиваемый контент.

Наиболее распространенные типы HTTP-запросов:

  1. GET: GET-запросы используются для получения данных от API.
  2. POST: POST-запросы используются для отправки новых данных API.
  3. PUT: PUT-запросы используются для обновления уже существующих данных.
  4. PATCH: PATCH-запросы (как и PUT) используются для обновления уже существующих данных. Разница в том, что с помощью PATCH запросов можно обновить несколько записей за раз.
  5. DELTE: DELETE-запросы используются для удаления существующих данных.

Далее в статье мы рассмотрим, как создавать и отправлять запросы разных типов с помощью Postman.

2. Коллекции (Collections)

Коллекции представляют собой группы запросов. Вы можете думать о коллекциях как о папках, в которых лежат запросы.

Как создать коллекцию в Postman:

Нажмите New — Collection

Postman

Введите имя (Name) и описание (Description) коллекции, после этого нажмите кнопку Create:

Postman

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

  1. с помощью Collection Runner
  2. c помощью Newman

Далее мы рассмотрим оба этих способа.

3. Окружение (Environments)

Окружения в Postman позволяют запускать запросы и коллекции, используя разные наборы данных. Например, мы можем создавать разные окружения в Postman для Dev, QA и Production серверов. В каждом из окружений будут свои собственные настройки: например, URL, auth token-ы и пароли, API-ключи и т.п. Окружения представляют собой наборы пар «ключ-значение».

Чтобы создать новое окружение (Environment), нажмите New — Environment

Postman
Postman

Мы рассмотрим работу с окружениями далее в статье.

Тестирование GET-запросов

Повторимся, GET-запросы используются для получения данных с сервера. GET-запросы не меняют состояние данных на сервере (не добавляют, не удаляют и не изменяют данные).

Для обучения мы будем использовать простой открытый API: http://dummy.restapiexample.com/api/v1/employees

Давайте отправим GET-запрос с помощью Postman:

Открываем Postman

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

Шаг 1: Открываем новую вкладку, чтобы создать запрос (нажимаем на «+»):

Postman

Шаг 2: Создаем GET-запрос:

  1. Задаем тип запроса — GET
  2. Задаем request URL — https://jsonplaceholder.typicode.com/users
  3. Нажимаем на кнопку SEND, чтобы выполнить запрос.
  4. Вы увидите 200 OK в результате, если запрос выполнится успешно. Бывают случаи, когда GET-запросы выполняются с ошибками (например, при неправильном URL, некорректными авторизационными данными или из-за ошибок на стороне сервера)

После выполнения запроса вы должны будете увидеть данные от сервера во вкладке Body.

На скриншоте ниже вы видите код ответа сервера (Status: 200 OK), время выполнения запроса (Time: 1700ms) и размер ответа (Size: 1.62 KB)

По наведению на Time и Size появляется всплывающее окно с подробной информацией.

Время ответа сервера (Response Time)

Postman

Размер ответа (Response Size)

Postman

Куки (Cookies): Здесь можно увидеть информацию о куках, возвращаемых сервером

Postman

Хедеры ответа от сервера (Response headers)

Postman

Тестирование POST-запросов

POST-запросы используются для отправки новых данных на сервер. Давайте попробуем с помощью POST-запроса добавить нового пользователя. Для этого мы отправим информацию о новом пользователе в теле POST-запроса.

  1. Задаем тип запроса — POST
  2. Задаем request URL — https://jsonplaceholder.typicode.com/users
  3. Нажимаем на вкладку Body, выбираем «Raw» — JSON. Вставляем данные о пользователе из сниппета ниже:
{
    "id": 11,
    "name": "Rajkumar SM",
    "username": "stm",
    "email": "user@testengineer.ru",
    "address": {
      "street": "Gagarina",
      "suite": "31",
      "city": "Moscow",
      "zipcode": "600007",
      "geo": {
        "lat": "10.0000",
        "lng": "80.0000"
      }
    },
    "phone": "1-2345-6-7890",
    "website": "testengineer.ru",
    "company": {
      "name": "testengineer.ru",
      "catchPhrase": "website for QA engineers",
      "bs": "real-time tutorials"
    }
}

После этого наживаем кнопку SEND и отправляем POST-запрос.

Примечание: для проверки корректности вашего json можно использовать Jsonformatter

Postman
  1. Вы увидите 201 Created message (как на скриншоте ниже), если запрос выполнился успешно.
  2. Данные, отправленные с помощью POST-запроса будут показаны во вкладке Body
Postman

Точно так же, как и POST, отправляются PUT, PATCH и DELETE запросы.

Примечание: во время тестирования, для каждого запроса проверяйте возвращаемый результат, код ответа сервера и время ответа сервера. И не забывайте про негативные тесты!

Параметризация запросов

Параметризация — одна из самых полезных особенностей Postman.

Часто необходимо выполнить один и тот же запрос на разных наборах данных. С помощью параметризации, можно использовать переменные при выполнении запросов.

В Postman, параметры создаются с помощью двойных скобок: {{test}}.

Например, наш base URL — https://testengineer.ru и мы сохраняем это значение в переменной с именем base_url. В этом случае, мы можем обратиться к этой переменной из запроса, написав {{base_url}}. Для того, чтобы отправить запрос на этот URL, мы подставим эту переменную в запрос. Выглядеть это будет так: {{base_url}}/get?customers=new. Запрос будет отправлен на https://testengineer.ru/get?customers=new

Шаг 1: Меняем тип HTTP-запроса на GET и вводим URL:

Postman

Шаг 2: Меняем URL на параметр {{url}}. После этого URL запроса должен быть таким: {{url}}/users

Postman

Шаг 3: Теперь нам нужно создать переменную окружения, чтобы использовать ее в качестве параметра. Для этого нажимаем на кнопку с глазом и кликаем на Edit (редактировать), чтобы создать глобальную переменную и затем использовать ее в коллекциях.

Postman

Шаг 4: В окне создания переменной задаем имя (именем будет url) и значение (значением будет https://jsonplaceholder.typicode.com). После этого нажимаем Save (Сохранить)

Postman

Шаг 5: Возвращаемся к GET-запросу и нажимаем Send (отправить)

Если все сделано правильно, значение переменной, которую мы создали, будет подставлено вместо ее имени и запрос выполнится успешно.

Создание тестов в Postman

Тесты в Postman позволяют убедиться, что API работает так, как этого от него ожидают.

Давайте начнем с написания простого теста.

Шаг 1: Возвращаемся к GET-запросу, который мы создали ранее и переключаемся во вкладку Tests (Тесты). В секции сниппетов нажимаем на сниппет «Status code: Code is 200». В окне теста появится скрипт. Этот скрипт будет проверять, что запрос возвращает код ответа 200.

Postman

Шаг 2: Нажмите кнопку Send (Отправить). В нижней части окна вы увидите результат выполнения теста (в нашем случае он выполнился успешно).

Postman

Шаг 3: Давайте добавим еще один тест. В этот тесте мы будем сравнивать полученный результат с ожидаемым. Чтобы это сделать, выбираем сниппет с названием «Response body:JSON value check». Давайте проверим, что пользователь с именем Leanne Graham имеет userid 1.

Postman

Шаг 4: Заменим название теста на что-то более понятное: вместо «Your test name» напишем «Check if Leanne Graham has the userid 1». Также заменим jsonData.value на jsonData[0].name (т.к. jsonData представляет собой массив, а массивы начинаются с 0):

Postman

Код теста будет выглядеть следующим образом:

pm.test("Check if user with id1 is Leanne Graham", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData[0].name).to.eql("Leanne Graham");
});

Шаг 5: Нажимаем Send (Отправить)

Postman

Запуск коллекций с помощью Collection Runner

Давайте запустим коллекцию с помощью Collection Runner.

Шаг 1: Нажимаем на кнопку «Runner» (находится рядом с кнопкой Import)

Postman

Шаг 2: Должна будет открыться следующая страница:

Postman

Разберем основные элементы:

2 — Resent Runs: Все предыдущие запуски

3 — Environment: Окружение. Если вы хотите запустить коллекцию в конкретном окружении, вы можете выбрать его в этом поле.

4 — Iterations: Количество итераций

5 — Delay: Задержка. Указывается в миллисекундах. Выполнение тестов без задержки может вызвать ошибки, поэтому всегда указывайте небольшую задержку.

7 — Start Run: Кнопка для запуска коллекции

Шаг 3: В этом окне добавим коллекцию для запуска. Выбираем нашу коллекцию тестов, устанавливаем параметр Iterations в 2, delay в 2500ms и нажимаем кнопку запуска.

Postman

Шаг 4: После выполнения откроется отчет. В нашей коллекции были GET и POST запросы, но тесты мы добавляли только для GET-запроса. Поэтому в отчете рядом с POST-запросом показывается текст «This request doesn’t have any tests.» (для этого запроса нет тестов)

Postman

Запуск коллекций с помощью Newman

Для того, чтобы запустить коллекции с помощью Newman, делаем следующее:

Шаг 1: Устанавливаем node.js. Сделать это можно по ссылке

Шаг 2: Открываем командную строку и выполняем команду npm install -g newman

Шаг 3: После установки newman заходим в Postman. В списке коллекции находим нашу коллекцию, нажимаем на три точки и выбираем Export (Экспортировать)

Postman

Шаг 4: В появившемся окне выбираем «Export Collection as Collection 2.1 (Recommended)» и нажимаем Export.

Postman

Шаг 5: Выбираем папку, в которую экспортировать коллекцию и нажимаем Save. Рекомендуем создать отдельную папку для Postman-тестов. После нажатия на Save, коллекция будет экспортирована в выбранную папку.

Шаг 6: Для корректного запуска нам понадобится экспортировать и окружение. Для этого нажимаем на кнопку с глазом и выбираем опцию Download as JSON. Выбираем папку, в которую экспортировать окружение и нажимаем Save. Рекомендуем экспортировать окружение в ту же папку, в которую была экспортирована коллекция.

Postman
Postman

Шаг 7: Теперь, когда мы экспортировали коллекцию и окружения в папку, возвращаемся в командную строку и меняем директорию на ту, где находятся коллекция и окружение.

Например:

cd C:\Users\testengineer\Desktop\Postman

Шаг 8: Запускаем коллекцию с помощью команды:

newman run PostmanTestCollection.postman_collection.json -e Testing.postman_globals.json

После выполнения коллекции, появятся результаты выполнения тестов.

Заключение

В этом гайде по Postman мы постарались разобрать базовые темы. Мы надеемся, вы научились создавать и отправлять просты запросы, проверять ответы сервера, создавать простые тесты, узнали, как запускать коллекции с помощью Collection Runner и Newman.

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

21 КОММЕНТАРИИ

Подписаться
Уведомить о
guest

21 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
aviator
aviator
3 лет назад

Спасибо за статью, как раз начинаю писать тесты на Postman, полезно немного систематизировать все, что знаю.

Игорь
Игорь
3 лет назад

Класс, не знал, что можно выгружать тесты и запускать через CLI. Реально удобно — можно к CI подрубить и регрессию делать.

CrazyF
CrazyF
3 лет назад

Кто-то на продакшене пишет автотесты для API на Postman?

МММ
МММ
3 лет назад
Ответить на  CrazyF

Не встречал ещё такое. В основном Postman используется для проверки API manual QA. В этом он хорош, но для больших проектов не подходит как по мне.

TerVer
TerVer
3 лет назад

Спасибо, хорошая и подробная статья для начинающих.

Max
Max
3 лет назад

Запуск коллекций с помощью Collection Runner

В шаге 2 не все пункты объяснены, поправьте.

olga.yaskevich@gmail.com
olga.yaskevich@gmail.com
3 лет назад

Как раз кстати — готовлюсь делать внутреннюю презентацию для команды по Postman. Спасибо за разбор!

Ivan
Ivan
3 лет назад

Недавно попробовал перейти с Postman на Insomnia и хочу сказать, что второй инструмент мне гораздо больше нравится. Лучше подходит для тестирования GraphQL API, поддерживает плагины и кастомные темы, запускается и работает гораздо быстрее.

Семен Яскевич
Семен Яскевич
3 лет назад
Ответить на  Ivan

Да, тоже пробовали insomnia для graphql — очень понравилось.

leo
leo
2 лет назад

а как удалить постман с компа? Я старая бабка, хотела стать тестировщиком. но запуталась и теперь хочу уделать не нужное приложение — а даже найти на компе его не могу ))) помогите хлопцы))

Игорь
Игорь
1 год назад
Ответить на  leo

LOL

Travelcar
2 лет назад

Быстро пробежался — спасибо за гайд! Сейчас читаю все что связано с тестированием! Спасибо за разборчик!

Павел
Павел
2 лет назад

А как увидеть что же я отправил на тестапи сервер?. Почему это нельзя нигде увидеть и никто не знает как это увидеть. Может где-то запятая не там или в место неё тире или пробел. Как увидеть что отправлено, если запрос формируется OPENSSL и прочитать его нет возможности у себя. Какие по этому моменту возможности у postman?

Кос
Кос
2 лет назад

Спасибо за гайд.
Опечатка в «Postman — freemium-интсрумент»

Masha
Masha
2 лет назад

Спасибо за гайд.
Опечатка в тексте заключения «…и отправлять просты запросы…»

Никита
Никита
1 год назад
{
    "id": 11,
    "name": "Rajkumar SM",
    "username": "stm",
    "email": "user@testengineer.ru",
    "address": {
      "street": "Gagarina",
      "suite": "31",
      "city": "Moscow",
      "zipcode": "600007",
      "geo": {
        "lat": "10.0000",
        "lng": "80.0000"
      }
    },
    "phone": "1-2345-6-7890",
    "website": "testengineer.ru",
    "company": {
      "name": "testengineer.ru",
      "catchPhrase": "website for QA engineers",
      "bs": "real-time tutorials"
    }
}

В данном запросе пробовал поменять имя, например, Rajkumar SDF, и при отправке PUT, PATCH or DELETE запроса выбивает ошибку 404. Как её обойти?

Griff
Griff
1 год назад

А Как добавить переменные в тесты и изменять из значение?

Евгений Долженков
Евгений Долженков
1 год назад

При добавлении пользователя в базу он вроде создается , но в базе его нет и при удалении код 404. Как это понимать?

Anna Nikc
Anna Nikc
1 год назад

Подскажите пожалуйста — Запуск коллекций с помощью Newman — запуталась не получается выполнить команду, сделала до шага 7. Где конкретно надо заменить директорию?
На шаге 2 получила такой ответ
npm install -g newman
npm WARN deprecated har-validator.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.

added 112 packages in 18s

6 packages are looking for funding
 run npm fund for details
npm notice
npm notice New minor version of npm available! 9.5.1 -> 9.6.6
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.6.6
npm notice Run npm install -g npm@9.6.6 to update!
npm notice

Гость
Гость
11 месяцев назад
Ответить на  Anna Nikc

>Где конкретно надо заменить директорию?
В терминале пишите:
cd C:\Users\testengineer\Desktop\Postman //это директория, где лежат ваши экспортированные тесты

newman run PostmanTestCollection.postman_collection.json -e Testing.postman_globals.json // запуск самих тестов

Кристина
Кристина
9 месяцев назад

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

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас

casibomcasibomjojobet girişHOLİGANBETjojobetCasibomCasibom Girişcasibomholiganbet girişCasibomholiganbet girişcasibom girişCasibomjojobetcasibomcasibomcasibom girişCASİBOMholiganbet girişizmir escort bayanjojobet girişCasibom Giriş