Артем Г.

Артем Г.

Backend разработчик

Senior РНР разработчик, читай РНР гуру (более 8 лет опыта). Логика и спорт — идеальная основа этого парня

Статьи автора Артем Г.

Процесс создания простого бота Телеграм для отслеживания времени

Процесс создания простого бота Телеграм для отслеживания времени

Процесс создания простого бота Телеграм для отслеживания времени

Телеграм есть у каждого. Все мы пользуемся этим мессенджером каждый день — он удобен и прост в использовании, интуитивно понятен, безопасен, и, конечно, все мы любим стикеры. Кроме личной переписки мы используем и групповые чаты — с семьей, с друзьями и коллегами.

Базовое понимание Oauth 2.0

Базовое понимание Oauth 2.0

Базовое понимание Oauth 2.0

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

Postman: быстрый старт для разработки и тестирования

Postman: быстрый старт для разработки и тестирования

Postman: быстрый старт для разработки и тестирования
.

Эта статья предназначена для ускорения и упрощения процесса освоения базовой функциональности инструмента Postman.

Компания позиционирует свой продукт как платформу для разработки API.

Но почему все любят платформу Postman?

— Это мощный инструмент для тестирования и разработки API, который в то же время имеет простой и интуитивно понятный интерфейс. Если вы впервые открываете эту программу и знаете разницу между POST и GET, то вы легко сможете отправить свой первый запрос. Однако есть несколько нетривиальных приемов, которые значительно облегчают жизнь.

Запросы Postman

Так что давайте’начнем (get postman app).

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

После этого мы создаем рабочее пространство.

Затем мы нажимаем плюс (2) и создаем вкладку запроса.

<фигура>

Все предельно просто, используя GET-запрос:  задаем url, добавляем параметры (можно «включать» и «выключать» параметры), нажимаем send и видим ответ в нижней половине экрана (на сервере я просто возвращаю html-страницу и представляю все входящие параметры в формате json). Переключаясь между вкладками в области ответа, мы можем найти любую информацию и даже переключаться между представлениями и форматами вывода.

<фигура>

Справа от кнопки "Отправить" находится кнопка Сохранить. При попытке сохранения, почтальон попросит вас указать/создать коллекцию. Коллекция - это группа запросов в рабочей области (отсортированная, например, по проекту). Я создал коллекцию test_collection. Мы сохраним ваш запрос в ней.

Окружение Postman

Давайте’ продолжим.

В Postman существует понятие окружения — это набор переменных, которым можно присвоить значение и использовать в процессе работы. Окружений может быть несколько (для продаж, для этапов, для разных версий — для чего угодно). Среда привязана к операционной среде: у каждой операционной среды есть своя среда postman.

Нажимаем на шестеренку в правом верхнем углу и создаем окружение.

<фигура>

Я создал среду local_test_env с 2 переменными: host и username. Для значений переменных есть 2 колонки. Единственное отличие заключается в том, что если вы поделитесь своим проектом с командой, то значение из первого столбца будет общим, а запросы, которые вы делаете на своем ПК, будут использовать второй столбец. Синхронизация учетной записи postman также происходит из первого столбца.

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

Выбираем наше окружение как активное (есть выпадающий список слева от шестеренки).

Давайте’отправим POST с использованием переменных. Мы должны добавить вкладку и выбрать тип POST-запроса. Мы хотим использовать переменную host из нашего окружения. Переменные записываются в двойных фигурных скобках. Если мы поставим скобки и начнем писать имя переменной, то postman предложит нам выбрать переменную из текущего окружения. Давайте’выберем. Поскольку это POST-запрос, мы переходим на вкладку body (под адресной строкой) и добавляем параметр username, значением которого будет переменная a variable. Я добавил еще несколько параметров для наглядности, сервер вернет их сумму.

<фигура>

Сервер вернул нам json-строку.

В Postman мы можем взаимодействовать с полученным результатом, программно отправлять запросы и писать тесты.

Несколько слов о тестах

Мы открываем консоль с помощью комбинации cmd + alt + c (ctrl + alt + c для Windows). Я сделал один запрос и вижу его логи. Кроме того, вы можете вывести что-то в консоль следующей командой:

console.log("что-то")

Тесты пишутся на вкладке Tests. Я приведу несколько примеров простых тестов, а затем мы посмотрим, как с ними работать.

    pm.test("Код состояния 200",function(){
        pm.response.to.have.status(200);});

Это обычная анонимная функция. В данном случае мы говорим, что ответ должен иметь статус 200.

Благодаря тому, что мы получаем json-строку в ответе сервера, мы можем разобрать ее в переменную. Давайте сделаем это со следующей строкой:

    var jsonData = pm.response.json();

Тогда мы используем новую переменную:

    pm.test("контрольное число равно 9",function(){
        pm.expect(jsonData.total).to.eql(9);});

В данном примере мы ожидаем, что total в jsonData будет эквивалентен 9.

А теперь давайте попробуем сравнить полученное значение поля «name» из jsonData с переменной username, которая есть в нашем окружении.

Вы можете получить переменную из окружения следующим образом:

    pm.environment.get('username')

А теперь тест на эквивалентность:

    pm.test("check name equal variable username",function(){
        pm.expect(jsonData.name).to.eql(pm.environment.get('username'));});

В окружении можно не только читать, но и писать.

Мы пытаемся получить переменную "total" из окружения (ее там еще нет).

    var sum = pm.environment.get('total');

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

.

    if(!sum){
        pm.environment.set('total', jsonData.total);}

А теперь давайте посмотрим, что получилось:

<фигура>

Все тесты, кроме первого, прошли. Сервер возвращает нам код 201, в то время как мы ожидаем 200. Наша переменная находится в окружении, так что все работает.

А теперь, когда вы немного разобрались с postman, давайте попробуем отправить запрос, или скорее несколько.

Задача: отправить определенное количество запросов, каждый раз меняя параметр.

    • Сначала мы создаем новую коллекцию циклических запросов,
    • Затем мы создаем POST-запрос,
    • После этого тела мы добавляем параметр «digit», который будет меняться в запросе (мы берем значение из окружения).
    • В закладке script предзапроса мы добавляем следующий код:

    var digits = pm.environment.get('digits');
     
    if(!digits){
        digits =["2","4","5","22","13","6"];}
     
    console.log("digits: "+ digits);
     
    var CurrentDigit = digits.shift();
     
    pm.environment.set('digit', currentDigit);
    pm.environment.set('digits', digits);

(Мы проверяем, есть ли в окружении переменная «digits», и создаем ее, если такой переменной нет. Мы выводим массив «цифр» в консоль перед запросом. Далее мы берем первый элемент из «цифр», удаляя значение из самого массива. И устанавливаем это значение в окружение для «digit» и «digits». В digits уже на один первый элемент меньше.)

На вкладке digit» в digits» вы можете установить значение.

На вкладке «Тесты» мы напишем следующее:

    var digits = pm.environment.get('digits');var digit = pm.environment.get('digit');
     
    console.log("сервер получил цифру = "+ pm.response.json().digit);
     
    if(digits && digits.length >0){
        postman.setNextRequest("запрос цикла");}else{
        postman.setNextRequest(null);
        console.log("stop");
        pm.environment.unset("digits");
        pm.environment.unset("digit");}

(Мы берем «digit» и «digits» из окружения и выводим некоторую информацию в консоль. Если «цифра» не пуста, мы задаем следующий запрос setNextRequest и передаем текущий запрос в качестве параметра. В противном случае мы говорим, что больше ничего делать не нужно, очищаем переменные окружения и выводим строку «stop» в консоль.)

После всего этого мы указываем на то, что в консоли не будет ничего сделано.

После всего этого мы открываем Runner (в левом верхнем углу), выбираем нашу новую коллекцию и наш запрос цикла, выбираем окружение и нажимаем Run loop.

<фигура>

В бегуне мы видим, что выполнено 6 запросов.

<фигура>

Затем открываем консоль и смотрим логи:

Вывод

Мы протестировали некоторые из возможностей Postman’ на практике, убедившись, что это действительно очень удобная и многофункциональная платформа разработки, упрощающая процессы разработки и тестирования API.

Полную документацию можно найти здесь.

Отзыв на конференцию PHP FrameworksDays 2016

Отзыв на конференцию PHP FrameworksDays 2016

Отзыв на конференцию PHP FrameworksDays 2016

3-го сентября состоялась очередная конференция PHP FrameworksDays. Она проводится каждый год осенью и собирает сотни участников из Украины, стран-соседей и ЕС. Спикерами выступают как опытные PHP-разработчики из украинских компаний, так и приглашенные англоязычные гости из разных стран.

Комментирование кода и генерация документации в PHP

Комментирование кода и генерация документации в PHP

Комментирование кода и генерация документации в PHP

Зачем нужны комментарии к программному коду? В каком виде их писать? Где они нужны, а где нет? Как правильно комментировать код? Как придерживаться одинакового стиля документирования всем участникам команды? Какие есть инструменты для генерации документации? В этой статье я постараюсь дать ответы на эти и другие вопросы, а также поделюсь своими мыслями по этому поводу. И поможет мне в этом кролик…

Установка и настройка Symfony2

Установка и настройка Symfony2

Установка и настройка Symfony2

С момента выхода Symfony 2.0 процесс инсталляции и нужные для этого инструменты менялись и улучшались несколько раз. В данной статье мы рассмотрим, что нужно сделать для того, чтобы установить и настроить Symfony2-приложение.

Как прокачать свой open-source проект, используя бейджики качества кода

Как прокачать свой open-source проект, используя бейджики качества кода

Как прокачать свой open-source проект, используя бейджики качества кода

Думаю, каждый, кто ищет что-то на GitHub, время от времени встречает репозитории, в которых в файле README после названия проекта идет куча разных бейджиков. Они выполняют роль приборной панели для репозитория и показывают, насколько далеко с таким кодом можно заехать. Когда пытаешься разобраться в этом разнообразии бейджиков — наступает хаос. Какие сервисы мне нужны? Что они делают? Как их подключить? Где взять рабочий конфиг? Где взять код для бейджика? Несколько раз наступив на одни и те же грабли, я решил потратить немного времени, чтобы в этом разобраться.

Деплой Symfony2 приложения на Heroku Cloud

Деплой Symfony2 приложения на Heroku Cloud

Heroku Cloud Symfony2 application deployment

Во время работы над небольшим домашним проектом на Symfony2 у меня возникла потребность задеплоить его на стейджинг для тестирования API извне. Понятно, что для этого нужно иметь хостинг для сайта, т.е. либо уже располагать им, либо купить. Еще есть альтернатива в виде облачных сервисов, на которых можно разместить сайт бесплатно, но с ограниченными ресурсами. Подобных сервисов сейчас есть множество, и они конкурируют между собой. Я почему-то склонился к Heroku Cloud, я о нем слышал уже давно, и тут в нужный момент он всплыл в моей памяти.