Прошлая часть: Что такое интерфейс и что такое API
И снова здравствуйте. Если вы до сих пор читаете мои статьи (весь этот поток сознания) - большое спасибо. А теперь - погнали к следующей теме.
В предыдущих главах мы разобрались с интерфейсами и API. Теперь давайте перейдем к вопросу: «Как клиент и сервер находят друг друга в сети?». Для этого нам понадобится понять, что такое URL, из чего он состоит и какую роль играет в тестировании веб-приложений. Но прежде, чем перейти к понятию «URL» сначала введем понятие «ресурс», чтобы упростить объяснение темы.
Что такое «ресурс»?
Когда мы заходим в интернет – каждый из нас преследует цель получить что-то «полезное». Даже если вашей целью является посмотреть упоротый ролик или мем – именно этот объект является вашей «целью» и этот «объект» располагается где-то в определенном месте. Вот именно то, что является целью пользователя в сети мы и будем называть «ресурс». Ресурс — это объект, данные или функционал, доступные в сети. Это может быть:
- Веб-страница (например, статья в блоге).
- Изображение, видео или аудиофайл.
- API какого-то сервера (например, /filmsCategory/comedy для получения списка фильмов-комедий).
- Форма для отправки данных на сервер.
И так далее…
Вот простой пример - представьте, что вы стоите на улице в городе. Каждый дом, магазин, автомобиль, парковка, квартира в доме – это ресурс. И вы, как пользователь, будете использовать тот ресурс, который необходим именно вам (разумеется, если у вас есть права доступа к нужному ресурсу).
Что такое URL?
Теперь представим, что вы отправляетесь в путешествие. Чтобы добраться до места назначения, вам нужен адрес. Например, «г. Самара, ул. Пупалуповская, дом 10, квартира 5». Этот адрес поможет вам добраться до интересующей вас квартиры, то есть до «ресурса». В сети есть аналог для этого.
Это URL (Uniform Resource Locator) – унифицированный (или же единообразный) указатель ресурса. Он выполняет аналогичную роль — это «адрес», по которому браузер находит нужную страницу, изображение или любой другой ресурс. Например:
«https://youtube.com/watch?v=dQw4w9WgXcQ»
Этот URL говорит браузеру: «Найди видео с идентификатором dQw4w9WgXcQ на сайте youtube.com». Но URL — не просто строка. Это строка, состоящая из важных частей и имеющая определенную структуру. Теперь разбираемся в самой структуре.
Из чего состоит URL?
В качестве примера для разбора состава URL мы возьмем абстрактный сайт, на котором люди ведут свои блоги и пишут на них статьи на определенную тематику. Наш гипотетический URL будет иметь следующий вид:
«https://example.ru/blog/qaLearning/articles?name=testing&sort=asc»
Протокол
Протокол — это «способ передвижения» к ресурсу. В жизни вы можете выбрать способ передвижения к конкретному месту — на машине, автобусе или пешком. По безопасной дороге или через «плохой район». В сети протокол определяет, как браузер подключается к серверу. Основные протоколы:
- HTTP (http://)— стандартный, но небезопасный. Если ваш запрос перехватит злоумышленник – он может без труда украсть ваши данные.
- HTTPS (https://)— защищенная версия. Даже если ваш запрос перехватят по пути от клиента до сервера – данные в запросе будут в зашифрованном виде.
Если URL в целом — адрес дома, то протокол — это средство передвижения и дорога, по которой вы добираетесь до этого дома.
Домен
Домен (доменное имя, или доменный адрес) — уникальное имя сайта в сети. На каждом из этих сайтов вы найдете ресурсы, которые сгруппированы по какому-то логическому признаку. В нашем примере это сайт «example.ru» и он агрегирует статьи и блоги на различные тематики. В аналогии с адресом — это как название города и улицы.
Путь
Путь указывает на конкретную страницу или раздел. В аналогии с адресом – это как номер интересующей вас квартиры в здании. В примере путь «blog/qaLearning/articles», а если быть точнее «blog/<идентификатор пользователя>/articles» ведет к статьям (articles) в блоге(blog) конкретного автора (qaLearning). Если теоретически предположить, что у нас есть второй автор с идентификатором «umpaLumpa», то путь до его статей будет выглядеть как «blog/umpaLumpa/articles»
Параметры пути
Параметр пути (или Path параметры, или URI параметры) — это та часть пути, которая может изменяться в зависимости от того чьи именно ресурсы вы хотите получить. В нашем примере параметром пути является идентификатор конкретного пользователя, чьи статьи мы собираемся просматривать – «qaLearning» если вы хотите посмотреть статьи этого автора, ну или «umpaLumpa», если вы хотите посмотреть статьи автора umpaLumpa.
Если приводить аналогию с адресом – это как выбрать одну или несколько квартир в доме, у которых какой-то конкретный владелец.
Параметры запроса
Параметры запроса (или Query параметры, или просто параметры), это та часть пути, которая указывается после знака вопроса «?» в URL. Стоит отметить, что в отличии от параметров пути с данными параметрами вы будете работать гораздо чаще. В нашем примере параметрами запроса являются «?name=testing&sort=asc» Они уточняют, что именно нужно показать пользователю. Разбираем наш пример:
- Знак вопроса «?» обозначает, что всё что идет после него – это параметры запроса.
- name=testing — загрузить статьи, которые содержат в названии слово «testing»
- Знак «&» обозначает что есть еще один параметр запроса
- sort=asc — отсортировать статьи «по возрастанию» названия, то есть в алфавитном порядке.
Если проводить аналогию с адресом – это как выбрать в конкретной квартире тарелки определенного цвета и отсортировать их по размеру.
Что такое IP-адрес, порт и DNS. Как они связаны с URL?
IP-адрес
IP-адрес — числовой идентификатор устройства в сети (например, 192.168.1.1). Так как сервер, к которому обращается клиент, является устройством в сети – у него тоже есть конкретный IP-адрес. При этом сам сервер не знает – является ли он сервером сайта для блогов или является ли он сервером высоконагруженного банковского приложения. Но сервер точно знает:
- Список своих API. Ну или говоря по-простому – перечень полезных работ, которые он в состоянии выполнить.
- Что делать, если к нему пришел запрос к конкретному API и какую полезную работу в этом случае выполнить.
Если проводить аналогию с адресом, то IP-адрес это аналог долготы и широты конкретной точки на планете земля. По одним координатам вы можете попасть в поле, по другим в тайгу, а по третьим в пункт выдачи заказов, в который вы так непреодолимо хотели попасть
Порт
Порт — это числовой идентификатор программы или процесса, который должен обсуживать сетевые соединения на конкретном IP-адресе. Говоря по-простому – это указатель на программу, которая должна отработать, когда вы обратились на конкретную «железку», то есть на IP-адрес.
Разберем подробнее – предположим, что у вас сейчас финансовые трудности и из-за этого вы вынуждены развернуть 2 совершенно разных приложения на одном компьютере (то есть сервере). Одно из приложений отвечает за доставку цветов, а второе приложение отвечает за перевод текстов с русского языка на испанский. Приложения имеют совершенно разные API, но при этом крутятся на одной машине, то есть на одном IP-адресе.
Допустим ваш IP адрес равен 111.112.113.114. Для того чтобы разделить запросы к приложениям вы сделали простое разделение – для приложения по доставке цветов вы выделили порт с номером 8085, а для приложения по переводу текста 8086. Теперь все запросы к https:// 111.112.113.114:8085/ будут открывать доступ к ресурсам приложения доставки цветов, а запросы к https:// 111.112.113.114:8086/ будут открывать доступ до ресурсов приложения по переводу текстов.
Как вы могли заметить – целевой «порт» указывается через двоеточия ":" после IP-адреса.
Если проводить аналогию с адресами в городе – то «порт» это дверь в здание. В вашем здании может быть вход в магазин, вход в пункт выдачи заказов, вход в ресторан и входы в подъезды для жильцов. В зависимости от выбора входа – вы получите соответствующий результат (ну или не получите, если вас не пустят).
DNS
DNS (или Domain Name System, или система доменных имён) – это распределенная система для получения информации о доменах. Из этого определения мало что понятно, так что прибегнем к более простому определению. Это система, которая на основании «домена» (то есть красивого и понятного для человека названия) предоставляет соответствие на какое сочетание IP-адрес + порт необходимо отправить запрос.
Если очень сильно упрощенно представить это на картинке – она будет выглядеть вот так:
По аналогии с адресами в реальной жизни будет примерно так. Вы приехали в незнакомый город и спрашиваете у жителя этого города «Где здесь находится <называете желаемый адрес>». Житель города вам подробно рассказывает, как вам необходимо пройти до желаемого здания. В данном случае житель выступает в роли DNS.
Добавлю также очевидный факт – данная технология придумана для того, чтобы вам было проще запомнить адрес в сети. Согласитесь, что проще запомнить комбинацию букв «google.com» вместо набора «10.183.14.154:8081».
Как связаны IP-адрес, порты и DNS
Краткий итог. Когда вы вводите домен в браузере, происходит следующее:
- Браузер обращается к DNS-серверу.
- DNS преобразует example.com в IP-адрес и порт (например, 93.184.216.34:8081).
- Браузер подключается к серверу по этому IP-адресу и загружает страницу.
Зачем тестировщику знать всё это?
Когда вы будете тестировать web-приложения – вы всегда должны быть уверены, что ваш запрос уходит на правильный сервер. Скорее всего вы будете находиться в ситуации, когда у вас будет несколько тестовых стендов с разными версиями приложений. Эти сервера будут иметь разные IP-адреса или доменные имена. Например:
- Тестовый стенд с версией ПО X будет располагаться по адресу «dev.test.supercompany.ru»
- Тестовый стенд с версией ПО Y будет располагаться по адресу «ift.test.supercompany.ru»
К слову, не все компании балуют и присваивают тестовым серверам конкретные доменные имена – так что иногда вам придется ориентироваться по IP-адресам. Так что комбинации IP-адрес и порт не должны вас пугать.
Но, кроме этого, понимание состава URL может помочь вам в локализации ошибок или выявлении потенциальных проблем. Например:
Проверка корректности ссылок
Неправильный URL (например, /blg вместо /blog) приводит к ошибке 404. Вы должны убедиться, что все пути ведут куда нужно.
Анализ параметров
Страницы могут менять содержимое в зависимости от параметров. Например:
- «sort=asc» — сортировка по возрастанию.
- «color=red» — отображение товара красного цвета.
Нужно проверить комбинации и корректность их работы в соответствии с требованиями.
Безопасность
Если URL содержит токены или идентификаторы (например, «?user_id=456»), тестировщик должен убедиться, что эти данные не передаются в открытом виде. Так же стоит убедиться, что присутствует разграничение доступа в соответствии с ролевой моделью. Если пользователь X может получить данные, которые ему недоступны просто указав чужие параметры в запросе – это определенные проблемы с безопасностью в системе.
Работа с протоколами
Сайт должен корректно работать по тому протоколу, с которым он должен работать. Например, если страница использует HTTPS, но загружает изображения, видео или иные данные по протоколу HTTP — это потенциальная дыра в безопасности системы.
Тестирование граничных случаев
Вы, как тестировщик, должны понимать, что параметры в URL можно заполнять вручную. Это добавляет тестовые сценарии для проверок. Например:
- Что произойдет, если передать неверный параметр (например, id=abc вместо числа)?
- Что произойдет, если передать пустой параметр (например, id=)?
- Что произойдет, если передать несуществующий параметр (например, id=999999999999999)?
- Как сервер обработает слишком длинный URL? (Спойлер – длина URL не бесконечна и в него нельзя передавать слишком много параметров).
Итоги
Подведем итог. URL — это не просто строка, а точный адрес ресурса в сети. Понимание его структуры поможет вам:
1) Находить ошибки в ссылках и параметрах.
2) Проверять безопасность передачи данных.
3) Анализировать взаимодействие клиента и сервера.
Теперь, видя URL, вы можете «прочитать» его, как профессионал и на что обратить внимание при тестировании.
Следующая часть: <Будет скоро ... а может быть и нет>
Поддержать или поблагодарить можете:
Лайком;
Комментарием;
Подпиской на канал;