Артем Г.

Артем Г.

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, я о нем слышал уже давно, и тут в нужный момент он всплыл в моей памяти.