it-swarm.com.ru

Автоматизированное тестирование для REST Api

Я хотел бы написать пакет автоматизированного тестирования для API REST. По мере того, как мы выполняем новые услуги, мы хотели бы убедиться, что все ранее созданные службы работают должным образом. Любые предложения о лучших инструментах для достижения этой цели? Я знаю, что существуют такие инструменты, как Apigee, которые позволяют вам тестировать 1 услугу за раз, но мы хотели бы найти способ протестировать все сервисы одним нажатием кнопки.

78
user1492422

На моей работе мы недавно собрали несколько тестовых наборов, написанных на Java, для тестирования некоторых RESTful API, которые мы создали. Наши Сервисы могут вызывать другие API RESTful, от которых они зависят. Мы разделили его на два апартамента.


  • Suite 1 - Тестирование каждой службы изолированно
    • Подделка любых одноранговых сервисов, от которых зависит API, используя restito . Другие альтернативы включают rest-driver , wiremock и betamax .
    • Тестирует сервис, который мы тестируем, и макеты работают в одной JVM
    • Запускает сервис в пристани

Я определенно рекомендую сделать это. Это сработало очень хорошо для нас. Основными преимуществами являются:

  • Одноранговые сервисы являются поддельными, поэтому вам не нужно выполнять какие-либо сложные настройки данных. Перед каждым тестом вы просто используете restito, чтобы определить, как должны вести себя одноранговые сервисы, как если бы вы использовали классы в модульных тестах с Mockito. 
  • Вы можете спросить у насмешных партнеров, звонили ли они. Вы не можете сделать эти утверждения так же легко с реальными равноправными услугами.
  • Пакет очень быстрый, так как фиктивные сервисы обслуживают предварительно настроенные ответы в памяти. Таким образом, мы можем получить хорошее покрытие без набора возраста, чтобы бежать. 
  • Пакет является надежным и воспроизводимым, поскольку он изолирован в своей собственной JVM, поэтому не нужно беспокоиться о других пакетах/людях, которые портятся в совместно используемой среде в то же время, когда пакет работает и приводит к сбою тестов.

  • Suite 2 - Полный конец в конец
    • Suite работает в полной среде, развернутой на нескольких машинах 
    • API, развернутый на Tomcat в среде
    • Одноранговые сервисы являются реальными «живыми» полными развертываниями 

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

Тесты в этом наборе, как правило, занимают больше времени, поэтому мы помещаем большую часть нашего покрытия в Suite 1. При этом в этом наборе все еще есть очевидная ценность, поскольку наши макеты в Suite 1 могут вести себя не совсем так, как настоящие сервисы. 


35
theon

Frisby - это REST среда тестирования API, основанная на node.js и Jasmine, которая делает тестирование конечных точек API простым, быстрым и увлекательным. http://frisbyjs.com

Пример:

var frisby = require('../lib/frisby');

var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:[email protected]:3000/';

frisby.globalSetup({ // globalSetup is for ALL requests
  request: {
    headers: { 'X-Auth-Token': 'fa8426a0-8eaf-4d22-8e13-7c1b16a9370c' }
  }
});

frisby.create('GET user johndoe')
  .get(URL + '/users/3.json')
  .expectStatus(200)
  .expectJSONTypes({
    id: Number,
    username: String,
    is_admin: Boolean
  })
  .expectJSON({
    id: 3,
    username: 'johndoe',
    is_admin: false
  })
  // 'afterJSON' automatically parses response body as JSON and passes it as an argument
  .afterJSON(function(user) {
    // You can use any normal jasmine-style assertions here
    expect(1+1).toEqual(2);

    // Use data from previous result in next test
    frisby.create('Update user')
      .put(URL_AUTH + '/users/' + user.id + '.json', {tags: ['jasmine', 'bdd']})
      .expectStatus(200)
    .toss();
  })
.toss();
25
chx007

По этой причине я сотрудничал с одним из моих коллег по запуску платформы PyRestTest: https://github.com/svanoort/pyresttest

Хотя вы можете работать с тестами в Python, нормальный формат теста - в YAML. 

Пример набора тестов для базового приложения REST - проверяет, правильно ли реагируют API, проверяя коды состояния HTTP, хотя вы также можете проверить его тела ответов:

---
- config:
    - testset: "Tests using test app"

- test: # create entity
    - name: "Basic get"
    - url: "/api/person/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
    - method: 'DELETE'
- test: # create entity by PUT
    - name: "Create/update person"
    - url: "/api/person/1/"
    - method: "PUT"
    - body: '{"first_name": "Gaius","id": 1,"last_name": "Baltar","login": "gbaltar"}'
    - headers: {'Content-Type': 'application/json'}
- test: # create entity by POST
    - name: "Create person"
    - url: "/api/person/"
    - method: "POST"
    - body: '{"first_name": "Willim","last_name": "Adama","login": "theadmiral"}'
    - headers: {Content-Type: application/json}
18
BobMcGee

Я использовал SOAP UI для функционального и автоматического тестирования. Пользовательский интерфейс SOAP позволяет запускать тесты одним нажатием кнопки. Существует также тестирование пружинных контроллеров страница, созданная Тедом Янгом. Я использовал эту статью для создания модульных тестов Rest в нашем приложении.

2
randominstanceOfLivingThing

Одна из проблем, связанных с автоматическим тестированием API-интерфейсов, заключается в том, что для работы многих инструментов требуется, чтобы сервер API был запущен и запущен до запуска набора тестов. Реальным преимуществом может быть наличие инфраструктуры модульного тестирования, способной запускать и запрашивать API в полностью автоматизированной тестовой среде.

Опция, которая подходит для API, реализованных с помощью Node.JS/Express, заключается в использовании mocha для автоматического тестирования. В дополнение к модульным тестам, его легко написать функциональные тесты по API, разделенные на различные наборы тестов. Вы можете автоматически запустить сервер API в локальной тестовой среде и настроить локальную тестовую базу данных. Используя make, npm и сервер сборки, вы можете создать цель «make test» и инкрементную сборку, которая будет запускать весь набор тестов каждый раз, когда часть кода передается в ваш репозиторий. Для действительно привередливого разработчика он даже сгенерирует отчет о покрытии HTML-кода Nice, показывающий, какие части вашей кодовой базы покрыты тестами или нет. Если это звучит интересно, вот сообщение в блоге , которое предоставляет все технические детали.

Если вы не используете узел, то какой бы ни была базовая структура тестирования для языка (jUnit, cucumber/capybara и т.д.) - посмотрите на ее поддержку раскручивания серверов в локальной тестовой среде и выполнения запросов HTTP. Если это большой проект, усилия по автоматическому тестированию API и непрерывной интеграции окупятся довольно быстро.

Надеюсь, это поможет.

2
Darren

Runscope - это облачная служба, которая может отслеживать веб-API с помощью набора тестов. Тесты могут быть запланированы и/или выполнены через параметризованные веб-хуки. Тесты также могут выполняться в дата-центрах по всему миру, чтобы обеспечить приемлемое время отклика для глобальной клиентской базы.

Бесплатный уровень Runscope поддерживает до 10 000 запросов в месяц.

Отказ от ответственности: я сторонник разработчика для Runscope.

2
Darrel Miller

Вы также можете использовать библиотеку Rest Assured. Для демонстрации с примером сценария обратитесь к http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html

1
Kuldeep Rana

Я реализовал множество случаев автоматизации на основе REST Assured, jave DSL для тестирования спокойного сервиса . https://code.google.com/p/rest-assured/

Синтаксис прост, он поддерживает json и xml . https://code.google.com/p/rest-assured/wiki/Usage

До этого я пробовал SOAPUI и имел некоторые проблемы с бесплатной версией. Плюс дела в XML-файлах, которые трудно расширять и использовать повторно, просто мне не нравится

1
Max Shen

Автоматизация тестирования API (до одного раза в минуту) - это услуга, доступная через theRightAPI . Вы создаете свои тестовые сценарии и выполняете их. Как только эти тесты сделают то, что вы ожидаете, вы можете запланировать их. Тесты могут быть объединены в цепочку для сценариев, требующих аутентификации. Например, у вас может быть тест, который отправляет OAuth-запрос в Twitter и создает общий токен, который затем может использоваться любым другим тестом. К тестам также могут быть прикреплены критерии проверки, чтобы гарантировать коды статуса http, или даже детальная проверка ответов с использованием проверки JavaScript или схемы. После того, как тесты запланированы, вы можете получать оповещения, уведомляющие вас, как только конкретный тест не проходит проверку или ведет себя вне установленных диапазонов для времени ответа или размера ответа.

0
Roger

Я использовал HTTP-классы TestNG и Apache для создания своей собственной тестовой среды API REST Я разработал эту концепцию после двух лет работы в Selenium.

Все то же самое, за исключением того, что вы должны использовать HTTP-классы Apache вместо классов Selenium.

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

0
Karthic.K