GeekBrains
300*600
↑↑

↓↓
Флаг России Флаг Англии
🏠 | 💻 PC | 🔨Тестирование ПО |

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

Содержание статьи
Skyeng Что такое API
Что такое Endpoint
Спецификация
HTTP Методы
Примеры API
Тестирование API без документации
Инструменты для тестирования API: Python, SOAP UI …
Обучение тестированию API

Что такое API

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

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

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

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

Крупные интернет-компании обычно предоставляют (платно или бесплатно) доступ к API своих сервисов. Например здесь Вы можете познакомиться со списком API от Google.

Одним из самых распространённых способов тестирования API является написание скриптов на Python, про то как это делать я рассказываю ЗДЕСЬ

Для чего обычно применяется API

Пример №1:

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

Пример №2:

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

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

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

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

Endpoint




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

http://andreyolegovich.ru:8080

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

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

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

Такое определение Endpoint и Resource используется, например, в SOAP UI для RESTful интерфейсов

https://andreyolegovich.ru:8080 - это Base URL

/resource1/status - это Resource

Endpoint = Base URL + Resource

Понятие Endpoint может использоваться в более широком смысле. Можно сказать, что какой-то определённый роутер или компьютер является Endpoint. Обычно это понятно из контекста.

Также следует обратить внимание на то, что понятие Endpoint выходит за рамки RESTful и может использовать как в SOAP так и в других протоколах.

Термир Resource также связан с RESTful, но в более широком смысле может означать что-то другое.

Спецификация

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

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

HTTP методы

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

В протоколе 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
POST http://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 с не самыми хорошими намерениями.




Инструменты для тестирования

Существует множество инструментов для тестирования. Здесь Вы можете познакомиться с одиними из самых популярных: Python и SOAP UI

Где учиться на профессию тестировщик ПО

Популярность профессии растёт, а в университетах такой программы ещё нет.

Эту нишу в данный момент закрывают различные курсы. Перечислю самые крупные. Советовать не буду - изучите лучше самостоятельно на их сайтах.

Курс от образовательного центра Mail.ru GEEKBRAINS GeekBrains

Перейти на сайт GEEKBRAINS

Курс от образовательного центра Нетология

Перейти на сайт Netology.ru

Курс от онлайн университета SkillBox

Перейти на сайт SkillBox.ru
В зависимости от того в какой области тестирования Вы будете специализироваться Вам могут понадобиться более глубокие знания по предмету.

Например, тестировщику web-приложений пригодятся знания Java-script или PHP, которые не особо нужны в других областях.

Если работа предусматривает написание сложных скриптов, например, для нагрузочного тестирования, то полезно изучить Python. Имейте в виду, что на август 2019-го года актуальная версия Python это 3.7. Если Вам предлагают изучить версию ниже 3.0 это должно вызвать подозрение, так как знания быстро устаревают и учиться нужно тому, что актуально в данный момент.

Большинству тестировщиков пригодятся знания по работе с базами данных.

Если продукт, который Вы будете тестировать, предназначен для конечных пользователей, например, покупателей интернет магазина, то Вам пригодятся знания в области UX/UI

Ниже я нашёл несколько курсов, которые могут хорошо дополнить набор умений современного тестировщика ПО.

GeekBrains Clumsy 0.2 Soap UI
Курсы тестирования ПО
Тестирование с помощью Python 🖄Postman
Nmap Webservices
Тестирование API Testlink
Pivotal Tracker 🦈 Wireshark

Вы нашли то, что искали на сайте?

Или оцените по десятибальной шкале

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

Например: у нас есть статья про аэропорт Хельсинки и про аэропорт Риги но в выдаче по Риге всё равно статья про Хельсинки.

Если статья Вам помогла, нажимайте ДА. Так мы поймём, что переделывать её не нужно.

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

Сделаем поиск лучше!

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети:
Timeweb Many GEOs
Finn Flare