Тестирование WebSocket API при помощи Postman
Не так давно Postman начал поддержку WebSocket протоколов. Эта фича еще на стадии бета-тестирования и у нее не так много функций, но она уже значительно облегчила жизнь тестировщиков
Веб-сокеты это технология, позволяющая открыть постоянное двунаправленное сетевое соединение между браузером пользователя и сервером. С помощью его API вы можете отправить сообщение на сервер и получить ответ без выполнения http запроса, причём этот процесс будет событийно-управляемым.
То есть, в отличие от REST, где есть 1 запрос, 1 ответ, веб-сокет на 1 запрос может прислать много сообщений. Очень много и очень долго. То есть, при открытом соединении вы можете получать сообщения до тех пор, пока кто-то из вас не сдастся – либо вы прервете коннект, либо серверу надоест вас спамить.
В постмане поддержка WebSocket немного сырая, мы еще не можем использовать такие классные штуки, как парсинг ответов, перенос из нужных нам сообщений данных в переменные, даже страничка с настройками только недавно стала доступной.
Расскажу немного как использовать постман для тестирования вебсокет и какие есть ограничения на сегодня (октябрь 2022 года)
Для начала пару слов о состояниях подключения. Их два – connected и disconnected. У рестовых запросов получение ответа занимает доли секунды, поэтому сначала немного непривычно контролировать этот момент. Например, если вы меняете настройки окружений, то в состоянии коннекта эти настройки не применятся, и все новые запросы будут идти со старыми переменными из того окружения, которое было выставлено в момент подключения коннекта. То есть, чтобы применить другое окружение, нужно сначала разорвать соединение, переключить окружение, опять включить соединение.
Это первое отличие от рестового сервиса. Второе – хранение запросов. Здесь нет привычного нам body, запросы отправляются через message, которых может храниться много в рамках одного запроса. Нюанс – сохранить сообщение можно только без указания названия, потом можно переименовать готовое сообщение. Ограничение – месседжи в рамках списка нельзя менять местами или искать поиском, поэтому если их хранится много, не очень удобно в них копаться.
Еще в вебсокет запросах в постмане нет вкладки “авторизация”, поэтому авторизоваться можно только через добавление токена в параметры хедера.
Есть еще один маленький подвох – если вы с коллегами пользуетесь одним и тем же юзером и у вас открыты коннекшены на разных компьютерах, то сообщения на ваш запрос могут улетать к коллеге и наоборот. Тоже самое произойдет, если вы не прервете соединение в рамках одного запроса и отправите другой – сообщения на новый запрос придут в список первого.
Вот пример. Я отправила два запроса, сначала 1 (на него получено одно сообщение) потом 2 (на него получены 3 сообщения). В окне первого запроса отображается 4 сообщения в ответе, в окне второго запроса ни одного (с желтым значком отображается запрос, с синим – ответы)
А вот окно второго запроса, видно что сообщений нет. Первое время меня ставило в тупик – в логах сообщения отправлены, а в постмане они не отображаются. В итоге я находила эти ответы в рамках запроса, в котором открывался коннекшен (“где коннекшен первым открыли, там и спрашивайте!“)
Главное правило – разрывайте соединения после того, как получили нужные ответы. Если вы работаете с одним и тем же запросом – можно и не закрывать, посылать один и тот же запрос много раз, но если меняете – делайте дисконнект.
Еще в теле сообщений можно использовать переменные и фейкер, а вот добавлять скрипты и тесты пока нельзя.
Также не получится в список вебсокет запросов добавить рестовые запросы, а вот запросы grpс можно.
То есть, для создания коллекции WS вам нужно делать ее отдельно, не в рамках рест коллекций.
А еще вы не можете экспортировать коллекцию, чтобы передать ее кому-то, можете только сделать шеринг, что не очень удобно (даже совсем неудобно – получается, что работать с wss в постман можно только в команде, или каждый человек должен руками создавать свою коллекцию с нуля).
В ws соединениях можно делать специфические настройки, например установить таймауты, ограничение на размер входящих сообщений, а также интервалы и количество попыток переподключения. Все это доступно только в состоянии Disconnect, при открытом соединении настройки заблокированы.