🏠 | 💻 PC | 🔨Тестирование ПО |

Тестирование API

Clumsy 0.2 Soap UI
Тестирование с помощью Python 🖄Postman
Nmap Webservices
Тестирование API Testlink
Pivotal Tracker

Что такое API

В широком смысле слова API это метод который приложение предоставляет внешним пользователям для коммуникации с ним. Обычно через Интернет.

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

Другое популярный термин близкий по значению к API это Веб сервисы

API применяются там где невозможна или нежелательна непосредственная интеграция с исходным приложением, т.е. практически везде.

Пример №1: Если Вы хотите разместить на своём сайте яндекс-карты Вам не нужно устанавливать программы от Яндекса, достаточно послать несколько запросов и Яндекс передаст необходимую информацию. Это возможно потому, что программисты Яндекса разработали специальный набор запросов - API которые можно присылать к ним на сервер чтобы получить в ответ карту.

Пример №2: Предположим, что Вы создали сайт vk2.com. Вы хотите, чтобы вебмастера могли добавить на свои сайты возможность комментировать записи используя учётную запись vk2, но раскрывать или раздавать свой код не хотите.

Чтобы обойти эту проблему Вы выкладываете в публичном доступе правила, по которым вебмастера могут обращаться к vk2, чтобы получить комментарии.

Формат этих сообщений это либо JSON либо XML. О них мы поговорим позже.

Повторим для закрепления сути: Смысл в том, что сайт написанный на любом языке, поддерживающем HTTP запросы, не посылает на сервер никаких PHP/C/Python команд, а общается ним с помощью запросов, описанных в API.

Адрес, на который посылаются сообщения называется Endpoint. Обычно это URL (например, название сайта) и порт. Если я хочу создать веб сервис на порту 8080 Endpoint будет выглядеть так:

http://andreyolegovich.ru:8080

Если моему Web сервису нужно будет отвечать на различные сообщения я создам сразу несколько URL (interfaces) по которым к сервису можно будет обратиться. Например

http://andreyolegovich.ru:8080 /resource1/status
http://andreyolegovich.ru:8080 /resource1/getserviceInfo
http://andreyolegovich.ru:8080 /resource1/putID
http://andreyolegovich.ru:8080 /resource1/eventslist
http://andreyolegovich.ru:8080 /resource2/putID
...

Как видите у моих Enpoints различные окончания. Такое окончание в Endpoint называются Resource, а начало Base URL.

Endpoint = Base URL + Resource

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

Этот документ должен быть доступен программистам с обеих сторон, иначе они просто не смогут договориться и реализовать работающий Web сервис.

Вернёмся к первому пункту списка, а именно к тому, что такое методы.

В протоколе HTTP предусмотрено несколько способов отправить запрос на один и тот же Endpoint. Они называются CONNECT, DELET, GET, HEAD, OPTIONS, PATCH, POST, PUT, TRACE про их свойства можно почитать здесь.

Когда мы знаем какие методы с какими Enpoint можно использовать составить запросы не составит труда. Например:

GET http://andreyolegovich.ru:8080 /resource1/status
GET http://andreyolegovich.ru:8080 /resource1/getserviceInfo
PUT http://andreyolegovich.ru:8080 /resource1/putID
GET http://andreyolegovich.ru:8080 /resource1/eventslist
POSThttp://andreyolegovich.ru:8080 /resource1/eventslist
PUT http://andreyolegovich.ru:8080 /resource2/putID
...

Итак, простейший запрос состоит из метода и Enpoint

Request = Method + Endpoint

Пример API

Простейший пример API:

Я создал на сайте программу которая достает из базы данных количество велосипедистов в городе. Взаимодействие с API будет выглядеть так: Вы посылаете

POST http://andreyolegovich.ru:8080 /bicylists

Где в теле запроса будет указан город

{ "city": "Helsinki" }

И мой сайт будет возвращать Вам число велосипедистов. В данном случае - в Хельсинки



Calculator. Http methods. Protocols/rfc2616.

Тестирование API без документации

Если Вам по какой-то причине предстоит проделать эту неблагодарную работу, определетесь, насколько всё плохо. Какая у Вас есть информация об объекте тестирования.

Известно ли какие порты для Вас открыты? Знаете ли Вы нужные endpoints?

Сканирование портов

Если дело совсем труба - просканируйте порты, например, с помощью netcat. Открытые порты сохраните в файл openports.txt

nc -z -v askqa.ru 1-10000 2>&1 | grep succeeded > openports.txt

Эта операция займёт довольно много времени. Можете почитать советы по работе с Nmap и Netcat, например, следующие:

Сканирование портов с помощью Netcat
Как записать вывод Netcat в файл

Перебор запросов

Если Вам известен нужный порт и соответствующий endopoint переберите все возможные HTTP методы. Начните с наиболее очевидных POST, PUT, GET. Для ускорения процесса напишите скрипт на Python.

В худшем случае, когда ни порт ни endpoints неизвестны Вам, скорее всего придётся перебирать все открытые порты и генерировать endpoints, которые подходят по смыслу.

Разработчики обычно не особо заморачиваются и закладывают минимально-необходиму информацию. Так что включите воображение и попробуйте придумать endpoints опираясь на бизнес логику и принятые в Вашей компании стандарты.

Если ни endpoints ни бизнес логика Вам неизвестны, то у меня есть подозрение, что Вы тестируете API с не самыми хорошими намерениями.

Контакты и сотрудничество:
Пишите на www.andreyolegovich.ru cобака yandex.ru если Вы:
1. Хотите написать статью для моего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь со мной по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: