Windows Powershell — Регистрация пользователя через API

PowerShellСегодня мы рассмотрим кастомный скрипт и кастомную задачу средствами Powershell — Регистрация пользователя через API. Как уже неоднократно было сказано Powershell имеет весьма широкое применение. Давайте разбираться.

Windows Powershell — Регистрация пользователя через API

Как уже говорилось ранее, Powershell можно использовать практически везде. Все дело в том, что он многое умеет и на многое способен. И плюс ко всему технический склад ума обязателен поэтому уровень этой статьи выше, чем начинающий тестировщик/разработчик/devops/админ. Не будем ходить вокруг да около, опишу ситуацию:

Есть автотесты, которые выполняют определенные сценарии. Соответственно эти тесты ходят по различным вкладкам веб-приложения и тестируют функционал. Но для того, чтобы все это реализовать необходим пользователь. Руководством было принято решение при каждом деплое автотестового контура дропать бд, что автоматом выпиливало любого зарегистрированного ранее пользователя. Сначала было принято решение об обычном insert скрипте, который заносил бы во все необходимые таблицы данные о пользователе. Но ни разработчики, ни тестировщики не смогли реализовать сиквельный скрипт. К слову, продукт большой, имеет множество интеграций с другими продуктами внутри компании. Из двух девопсеров, задачка пала на меня.

Я стал размышлять, как проще это реализовать, и… Powershell + API. Меня почему-то не смутила трехфакторная регистрация. Я сразу был уверен, что смогу это реализовать. В итоге компиляция всех имеющихся навыков и представлений привела к рождению следующего скрипта:

Фух. Давайте по порядку.

Шаг первый — заявка на регистрацию

  1. Пойдем по шагам регистрации, отправка запроса на регистрацию. За нее отвечает этот кусок:

$body — записываем json, в котором записаны первичные данные нового пользователя.
$regUri — адрес, к которому обратимся.
$conType — не обязательно, записываем в каком формате будет подача данных для метода.
$method — не обязательно, записываем тип метода, который хотим использовать.

$json — Сюда прописываем целую итерацию. Первая часть:

Invoke-WebRequest -Uri $regUri -Method $method -ContentType $conType -Body $body).Content — в этой строке мы обращаемся к методу, который указан у нас в переменной $regUri, сообщаем что используется метод put и тип контента json, и передаем тело запроса из переменной $body. При этом нас интересует только конкретная часть возвращаемого ответа. Поэтому мы весь запрос поместили в скобки и вытаскиваем из него только часть Content. В результате получаем такой ответ:

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

Шаг второй — подтверждение регистрации

Необходимо сэмулировать ввод кода подтверждения. Сконфигурируем новый боди, а так же заберем email из прошлого body. Так же запишем код, строкой: $confirmCode = $json.code. Запишем необходимый нам адрес строкой:

$confirmationUri = ‘http://server.domain.loc/api/account/checkCode/’ + $emailFromBody + ‘/’ + $confirmCode

Как видите ссылка складывает из строки и двух переменных, собственно весь этот кусок выглядит так:

В $getAccountInfo — мы получили ответ от сервера, но он нам нужен не весь, плюс ко всему пора начинать вводить условие, зарегистрирован юзер уже или нет. Далее алгоритм такой — парсим нужные данные в нашем случае это снова Content. Расконвертируем их из json и выберем только компонент data. Таким образом мы сможем обратиться к отдельным элементам ответа, которые рассортированы по своим полям. Далее условие… Есть один единственный нюанс — если пользователь зарегистрирован, то ответ будет отличным от типа данных json. Соответственно на это и делаем проверку. Кодом:

Шаг третий — ввод данных пользователя

Окей, далее идет большой-большой json — объект, который необходимо отправлять чистым json. Но есть еще переменные, которые нам обязательно надо подставлять в json, иначе данные будут некорректны и мы не сможем пройти регистрацию. В объекте представлены ненастоящие данные:

Последняя строка преобразует объект в правильный json и пишет результат в переменную. Далее забиваем адрес последнего этапа регистрации в переменную $finishRegUrl, и вызываем напрямую метод обращения к api:

В блоке else нам выведется сообщение, если пользователь зарегистрирован. Если у вас остались вопросы — комменты открыты! Скрипт берите, пользуйте, адаптируйте под свои нужды. Спасибо за внимание и помните о нашем канале и группе в вк!

2 Комментария

  1. Света

    Я не думала что найду, спасибо большое!

    • Vapi

      Пожалуйста, пользуйтесь 🙂

Лицензионное соглашение

Авторские права публикуемых материалов полностью или частично принадлежат авторам сайта Pechenek.NET в соответствии со статьями 1252 и 1301 ГК РФ. Любое распространение должно быть согласовано с автором материала или с указанием ссылки на первоисточник.