REST и автоматизированное тестирование развития сети

Передача репрезентативного состояния, или более часто называемая REST, - это архитектурный стиль, который использует HTTP и его простые глаголы, такие как GET, PUT, POST и DELETE, для взаимодействия между двумя сущностями.

Простота и непревзойденное использование REST всеми типами приложений делает его очевидным выбором для автоматизации и тестирования. Его упрощенная структура, использование HTTP и готовность к работе в облаке позволяют ему беспрепятственно интегрироваться в системы автоматизации тестирования. REST может использоваться автономно для создания новых тестов автоматизации, но поскольку это просто HTTP-запросы и ответы, буквально любой язык программирования, например Python или Perl, может обернуться вокруг вызовов REST API.

Начиная

Пользователи могут загрузить библиотеку Ixia Python, которая обернет команды REST из веб-интерфейса BreakingPoint.

Веб-интерфейс BreakingPoint можно использовать для загрузки примеров API REST и справочных документов.

Чтобы попробовать пример Ixia Python, вам понадобится Python 2.7 и дополнительные пакеты «запросы» и «json», используемые в приведенной выше библиотеке примеров Ixia.

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

Чтобы проверить свою среду, запустите файл «sample_script.py», включенный в вышеуказанную загрузку. Просто настройте скрипт с настройками вашего шасси (IP-адрес шасси, имя пользователя, пароль, слот и порты):

# Детали шасси, имя пользователя и пароль bps = BPS ( 'IP-of-Chassis' , 'user' , 'pass' ) # Следующая процедура подключится к шасси BPS. бит / с login () # Показывает текущее состояние резервирования порта bps . portsState () # Резервирование первых двух портов первой карты в шасси bps . ReservePorts ( slot = 1 , portList = [ 0 , 1 ] , group = 1 , force = True )

BreakingPoint REST API - под X-Ray Как и в других продуктах Ixia, доступ к RESTAPI осуществляется по адресу: https: // <REST Server> / api / v1 / <имя продукта> (для точки останова: https: // <IP -Из-шасси> / API / v1 / бит в секунду)

Давайте рассмотрим один простой пример с библиотекой REST BreakingPoint Python, абстрагирующей вызовы REST. Приведенный ниже скрипт войдет в систему, получит статус порта и выйдет из шасси.

#! / usr / bin / env python # Эта команда импортирует библиотеку BPS REST из импорта bpsRest * # Создание экземпляра объекта BPS, определенного в bpsRest lib bps = BPS ( 'IP-Of-Chassis' , 'admin' , 'admin' ) # логин бпс . login () # показывает текущее состояние резервирования порта bps . portsState () # выход из системы bps . выход ()

Теперь давайте рассмотрим пример тех же действий (вход в систему, получение статуса порта, выход из системы) с вызовами интерфейса REST, без использования библиотеки-оболочки примера bpsRest:

#! / usr / bin / env Python запросы на импорт import json # Сведения о соединении, такие как IP и учетные данные, в bps-шасси ipstr = 'IP-из-шасси' username = '<username>' password = '<password>' # Создание экземпляр для http сессии в python session = запросы . Session () # Вход в URL с использованием пост-запроса с учетными данными в виде json body "jdata" url = 'https: //' + ipstr + '/ api / v1 / auth / session' jheaders = { 'content-type' : 'application / json' } jdata = json . dumps ({ 'username' : username , 'password' : password }) r = сессия . post ( url , data = jdata , headers = jheaders , verify = False ) if ( r . status_code == 200 ): print 'Вход в систему успешен. Добро пожаловать » + имя пользователя еще : печать r . content # Использование GET-запроса для получения статуса портов. url = 'https: //' + ipstr + '/ api / v1 / bps / ports /' r = сеанс . получить ( URL ) # Если успешно. Из возвращаемого json выведите значение portReservationState < if ( r . Status_code == 200 ): выведите «Port Status:» , r . json () [ 'portReservationState' ] else : print r . content # Выйти, используя запрос DELETE url = 'https: //' + ipstr + '/ api / v1 / auth / session' r = session . delete ( url ) if ( r . status_code == 204 ): распечатать 'Выйти успешно. До свидания ' + имя пользователя еще : print r . содержание

Как вы можете видеть из двух приведенных выше примеров, библиотека bpsRest.py значительно упрощает действия. Тем не менее, пользователям также рекомендуется создавать свои собственные вызовы REST без оболочки, чтобы пользоваться гибкостью, которую он обеспечивает.

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

  1. Настройка методов путем расширения класса BreakingPoint:

В первых нескольких блоках мы создаем класс MY_BPS_REST, который наследует класс BPS с 3 пользовательскими методами: saveAsNormalTest, viewNormalTest и stopTest.

класс MY_BPS_REST ( BPS ): def saveAsNormalTest ( self , name_ , force , enableRequestPrints = False ): ... def viewNormalTest ( self , enableRequestPrints = False ): ... def stopTest ( self , runid , enableRequestPrints = False ): .. ,
  1. Изменение стратегии тестирования - Использование Rest API для изменения компонента безопасности:

Мы загружаем тест, который уже существует в системе (в данном случае: «Clientside Strikes»), и изменяем значение компонента attackPlanIterations на 2. Чтобы определить компонент и имя параметра, который мы хотим изменить, мы напечатал тестовую конфигурацию в виде строки json с помощью пользовательского метода (определенного в пункте 2.a выше): bps.viewNormalTest (enableRequestPrints = True). Аналогично, вы можете изменить другие тестовые элементы, параметры (для Сетевого соседства используйте метод modifyNetwork из библиотеки) или лабораторные работы, используя соответствующие методы.

выведите «Mofifying существующего шаблона% s и сохраните как:% s» % ( template , testModel ) # bps.viewNormalTest (enableRequestPrints = True) bps . modifyNormalTest ( componentId = 'Security1' , elementId = 'attackPlanIterations' , Value = 2 )
  1. Запустите тестирование, используя настроенное Сетевое окружение:
runid = бит / с runTest (имя модели = testModel , окрестность = 'Переключение точек останова на большие кадры' , группа = 1 )
  1. Мониторинг тестового прогона - получение статистики в реальном времени

Мы получаем статистику в реальном времени и распечатываем ее, используя метод из библиотеки: 'getRTS (<runid>)'. Этот метод используется для извлечения статистики из системы и печати ее непрерывно в «цикле» в этом случае. В этом примере мы отменяем выполнение, когда прогресс теста достигает 2%.

# показывает прогресс и текущую статистику. Остановите тест при 2% прогресса выполнения = 0, в то время как ( прогресс < 2 ): прогресс = бит / с . getRTS ( runid ) время . сон ( 1 ) бит / с . stopTest ( runid )

Пример вывода статистики, также изображающей конец выполнения при 2% -ом прогрессе

В итоге

Создавая библиотеку BreakingPoint REST, мы учитывали проникновение и успех REST в мире автоматизации и его будущий потенциал. Наши клиенты BreakingPoint Virtual уже используют преимущества таких API. Поскольку большинство облачных приложений интенсивно используют REST, они смогут легко интегрировать BreakingPoint в Amazon Web Services (AWS) в существующую инфраструктуру автоматизации. Ixia продолжит укреплять свои API, чтобы наши клиенты могли использовать REST для большинства своих текущих и будущих потребностей в автоматизации. Это хороший путь вперед, поскольку другие организации также разрабатывают системы автоматизации (например, Robot Framework ) который может работать поверх REST.