Spec-Zone.ru › Codeception

REST

Установка

Если вы используете Codeception, установленный с помощью Composer, установите этот модуль с помощью следующей команды:

composer require --dev codeception/module-rest

В качестве альтернативы, вы можете включить REST модуль в файле конфигурации набора и запустить

codecept init upgrade4

Этот модуль был включён в Codeception 2 и 3, но начиная с версии 4 его необходимо устанавливать отдельно.
Некоторые модули поставляются с файлами PHAR.
Предупреждение. Использование файла PHAR и Composer в одном проекте может привести к непредвиденным ошибкам.

Описание

Модуль для тестирования REST WebService.

Этот модуль требует либо PhpBrowser, либо модуль фреймворка (например, Symfony, Laravel) для отправки фактического HTTP запроса.

Настройка

  • url необязательно - URL API
  • shortDebugResponse необязательно - количество символов для ограничения длины ответа API

Пример

modules:
   enabled:
       - REST:
           depends: PhpBrowser
           url: 'https://example.com/api/v1/'
           shortDebugResponse: 300 # only the first 300 characters of the response

В случае необходимости конфигурации HTTP-заголовков низкого уровня, это делается на уровне PhpBrowser следующим образом:

modules:
   enabled:
       - REST:
           depends: PhpBrowser
           url: &url 'https://example.com/api/v1/'
   config:
       PhpBrowser:
           url: *url
           headers:
               Content-Type: application/json

JSONPath

JSONPath эквивалентен XPath для запроса данных JSON-структур. Вот онлайн-тестер выражений JSONPath

Публичные свойства

  • headers - массив заголовков, которые будут отправлены.
  • params - массив отправленных данных
  • response - последний ответ (строка)

Части

  • Json - действия для проверки ответов Json (без ответов Xml)
  • Xml - действия для проверки ответов XML (без ответов Json)

Конфликты

Конфликтует с модулем SOAP

Действия

amAWSAuthenticated

Позволяет отправлять REST-запросы с использованием авторизации AWS

Работает только с PhpBrowser Пример конфигурации:

yml
modules:
     enabled:
         - REST:
             aws:
                 key: accessKey
                 secret: accessSecret
                 service: awsService
                 region: awsRegion

Код:

<?php
$I->amAWSAuthenticated();
?>
  • param array $additionalAWSConfig @throws ConfigurationException

amBearerAuthenticated

Добавляет авторизацию Bearer через токен доступа.

  • param $accessToken
  • [Part] json
  • [Part] xml

amDigestAuthenticated

Добавляет авторизацию Digest через имя пользователя/пароль.

  • param $username
  • param $password
  • [Part] json
  • [Part] xml

amHttpAuthenticated

Добавляет HTTP-аутентификацию через имя пользователя/пароль.

  • param $username
  • param $password
  • [Part] json
  • [Part] xml

amNTLMAuthenticated

Добавляет аутентификацию NTLM через имя пользователя/пароль. Требует, чтобы клиент был Guzzle >=6.3.0. Не входит в функциональные модули.

Пример:

<?php
$I->amNTLMAuthenticated('jon_snow', 'targaryen');
?>
  • param $username
  • param $password @throws ModuleException
  • [Part] json
  • [Part] xml

deleteHeader

Удаляет HTTP-заголовок (который был первоначально добавлен методом haveHttpHeader()), чтобы последующие запросы больше его не отправляли.

Пример:

<?php
$I->haveHttpHeader('X-Requested-With', 'Codeception');
$I->sendGet('test-headers.php');
// ...
$I->deleteHeader('X-Requested-With');
$I->sendPost('some-other-page.php');
?>
  • param string $name имя заголовка для удаления.
  • [Part] json
  • [Part] xml

dontSeeBinaryResponseEquals

Проверяет, что хэш двоичного ответа не совпадает с предоставленным.

<?php
$I->dontSeeBinaryResponseEquals("8c90748342f19b195b9c6b4eff742ded");
?>

Противоположность seeBinaryResponseEquals

  • param string $hash ожидаемый хэшированный ответ
  • param string $algo алгоритм хэширования. По умолчанию md5.
  • [Part] json
  • [Part] xml

dontSeeHttpHeader

Проверяет, что данный HTTP-заголовок (и его значение, если указано) отсутствует.

  • param $name
  • param $value
  • [Part] json
  • [Part] xml

dontSeeResponseCodeIs

Проверяет, что код ответа не равен указанному значению.

<?php
$I->dontSeeResponseCodeIs(200);

// preferred to use \Codeception\Util\HttpCode
$I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
  • [Part] json
  • [Part] xml
  • param $code

dontSeeResponseContains

Проверяет, что последний ответ не содержит указанный текст.

  • param $text
  • [Part] json
  • [Part] xml

dontSeeResponseContainsJson

Противоположно seeResponseContainsJson

  • [Part] json
  • param array $json

dontSeeResponseJsonMatchesJsonPath

См. #jsonpath для общей информации о JSONPath. Противоположно seeResponseJsonMatchesJsonPath()

  • param string $jsonPath
  • [Part] json

dontSeeResponseJsonMatchesXpath

Противоположно seeResponseJsonMatchesXpath

  • param string $xpath
  • [Part] json

dontSeeResponseMatchesJsonType

Противоположно seeResponseMatchesJsonType.

  • [Part] json
  • param array $jsonType Структура JsonType
  • param string $jsonPath @see seeResponseMatchesJsonType

dontSeeXmlResponseEquals

Проверяет, что ответ XML не равен предоставленному XML. Сравнение выполняется путём канонизации обоих XML.

Параметр может быть передан в виде XmlBuilder, DOMDocument, DOMNode, XML-строки или массива (если нет атрибутов).

  • param $xml
  • [Part] xml

dontSeeXmlResponseIncludes

Проверяет, что ответ XML не включает предоставленный XML. Сравнение выполняется путём канонизации обоих XML. Параметр может быть передан в виде XmlBuilder, DOMDocument, DOMNode, XML-строки или массива (если нет атрибутов).

  • param $xml
  • [Part] xml

dontSeeXmlResponseMatchesXpath

Проверяет, что ответ XML не соответствует XPath

<?php
$I->dontSeeXmlResponseMatchesXpath('//root/user[@id=1]');
  • [Part] xml
  • param $xpath

grabAttributeFromXmlElement

Находит и возвращает атрибут элемента. Элемент соответствует либо CSS, либо XPath.

  • param $cssOrXPath
  • param $attribute
  • return string
  • [Part] xml

grabDataFromResponseByJsonPath

См. #jsonpath для общей информации о JSONPath. Даже для одного значения возвращается массив. Пример:

<?php
// match the first `user.id` in json
$firstUserId = $I->grabDataFromResponseByJsonPath('$..users[0].id');
$I->sendPut('/user', array('id' => $firstUserId[0], 'name' => 'davert'));
?>
  • param string $jsonPath
  • return array Массив соответствующих элементов @throws \Exception
  • [Part] json

grabHttpHeader

Возвращает значение указанного имени заголовка.

  • param $name
  • param Boolean $first Возвращать ли первое значение или все значения заголовка

  • return string|array The first header value if $first, если true, массив значений, иначе одно значение
  • [Part] json
  • [Part] xml

grabResponse

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

Пример:

<?php
$user_id = $I->grabResponse();
$I->sendPut('/user', array('id' => $user_id, 'name' => 'davert'));
?>
  • return string
  • [Part] json
  • [Part] xml

grabTextContentFromXmlElement

Находит и возвращает текстовое содержимое элемента. Элемент соответствует либо CSS, либо XPath.

  • param $cssOrXPath
  • return string
  • [Part] xml

haveHttpHeader

Устанавливает HTTP-заголовок, который будет использоваться во всех последующих запросах. Используйте deleteHeader, чтобы его удалить.

<?php
$I->haveHttpHeader('Content-Type', 'application/json');
// all next requests will contain this header
?>
  • param $name
  • param $value
  • [Part] json
  • [Part] xml

haveServerParameter

Устанавливает параметр SERVER, действительный для всех последующих запросов.

$I->haveServerParameter('name', 'value');

seeBinaryResponseEquals

Проверяет, что хэш двоичного ответа точно такой же, как предоставленный. Параметр может быть передан как любая строка хэша, поддерживаемая функцией hash(), с необязательным вторым параметром для указания типа хэша, который по умолчанию равен md5.

Пример: Использование ключа хэша md5

<?php
$I->seeBinaryResponseEquals("8c90748342f19b195b9c6b4eff742ded");
?>

Пример: Использование md5 для содержимого файла

<?php
$fileData = file_get_contents("test_file.jpg");
$I->seeBinaryResponseEquals(md5($fileData));
?>

Пример: Использование хэша sha256

<?php
$fileData = '/9j/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/yQALCAABAAEBAREA/8wABgAQEAX/2gAIAQEAAD8A0s8g/9k='; // very small jpeg
$I->seeBinaryResponseEquals(hash("sha256", base64_decode($fileData)), 'sha256');
?>
  • param string $hash ожидаемый хэшированный ответ
  • param string $algo алгоритм хэширования. По умолчанию md5.
  • [Part] json
  • [Part] xml

seeHttpHeader

Проверяет наличие заданного HTTP-заголовка (и его значения, если указано).

  • param $name
  • param $value
  • [Part] json
  • [Part] xml

seeHttpHeaderOnce

Проверяет, что HTTP-заголовок ответа получен только один раз. HTTP RFC2616 допускает несколько заголовков ответа с одинаковым именем. Вы можете проверить, что вы случайно не отправили один и тот же заголовок дважды.

<?php
$I->seeHttpHeaderOnce('Cache-Control');
?>>
  • param $name
  • [Part] json
  • [Part] xml

seeResponseCodeIs

Проверяет, что код ответа равен предоставленному значению.

<?php
$I->seeResponseCodeIs(200);

// preferred to use \Codeception\Util\HttpCode
$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK);
  • [Part] json
  • [Part] xml
  • param $code

seeResponseCodeIsClientError

Проверяет, что код ответа — 4xx

  • [Part] json
  • [Part] xml

seeResponseCodeIsRedirection

Проверяет, что код ответа — 3xx

  • [Part] json
  • [Part] xml

seeResponseCodeIsServerError

Проверяет, что код ответа — 5xx

  • [Part] json
  • [Part] xml

ПроверкаКодаОтветаНаУспех

Проверяет, что код ответа равен 2xx

  • [Part] json
  • [Part] xml

ПроверкаНаличиеТекстаВОтвете

Проверяет, содержит ли последний ответ текст.

  • param $text
  • [Part] json
  • [Part] xml

ПроверкаНаличияJSONМассиваВОтвете

Проверяет, содержит ли последний JSON-ответ предоставленный массив. Ответ преобразуется в массив с помощью json_decode($response, true). Таким образом, JSON представлен ассоциативным массивом. Этот метод проверяет, что массив ответа содержит предоставленный массив.

Примеры:

<?php
// response: {name: john, email: john@gmail.com}
$I->seeResponseContainsJson(array('name' => 'john'));

// response {user: john, profile: { email: john@gmail.com }}
$I->seeResponseContainsJson(array('email' => 'john@gmail.com'));

?>

Этот метод рекурсивно проверяет, можно ли найти один массив внутри другого.

  • param array $json
  • [Part] json

ПроверкаРавенстваОтвета

Проверяет, является ли ответ точно таким же, как предоставленный.

  • [Part] json
  • [Part] xml
  • param $response

ПроверкаВадидностиJSONОтвета

Проверяет, был ли последний ответ валидным JSON. Это делается с помощью функции json_last_error.

  • [Part] json

ПроверкаСоответствияОтветаJSONСхеме

Проверяет, соответствует ли последний ответ предоставленной JSON-схеме (https://json-schema.org/). Укажите путь к схеме относительно корня проекта или абсолютный путь.

@see codecept_absolute_path()

  • param string $schemaFilename
  • [Part] json

ПроверкаСоответствияОтветаJSONСхеме(строка)

Проверяет, соответствует ли последний ответ предоставленной JSON-схеме (https://json-schema.org/). Укажите схему в виде JSON-строки.

Примеры:

<?php
// response: {"name": "john", "age": 20}
$I->seeResponseIsValidOnJsonSchemaString('{"type": "object"}');

// response {"name": "john", "age": 20}
$schema = [
 "properties" => [
     "age" => [
         "type" => "integer",
         "minimum" => 18
     ]
 ]
];
$I->seeResponseIsValidOnJsonSchemaString(json_encode($schema));

?>
  • param string $schema
  • [Part] json

ПроверкаВадидностиXMLОтвета

Проверяет, был ли последний ответ валидным XML. Это делается с помощью функции libxml_get_last_error.

  • [Part] xml

ПроверкаСоответствияJSONОтветаJSONPath

См. #jsonpath для общей информации о JSONPath. Проверяет, соответствует ли структура JSON в ответе JSONPath.

  { "store": {
      "book": [
        { "category": "reference",
          "author": "Nigel Rees",
          "title": "Sayings of the Century",
          "price": 8.95
        },
        { "category": "fiction",
          "author": "Evelyn Waugh",
          "title": "Sword of Honour",
          "price": 12.99
        }
   ],
      "bicycle": {
        "color": "red",
        "price": 19.95
      }
    }
  }
<?php
// at least one book in store has author
$I->seeResponseJsonMatchesJsonPath('$.store.book[*].author');
// first book in store has author
$I->seeResponseJsonMatchesJsonPath('$.store.book[0].author');
// at least one item in store has price
$I->seeResponseJsonMatchesJsonPath('$.store..price');
?>
  • param string $jsonPath
  • [Part] json

ПроверкаСоответствияJSONОтветаXPath

Проверяет, соответствует ли структура JSON в ответе предоставленному XPath. JSON не должен проверяться по XPath, но его можно преобразовать в xml и использовать с XPath. Это утверждение позволяет проверить структуру ответа json. *

  { "store": {
      "book": [
        { "category": "reference",
          "author": "Nigel Rees",
          "title": "Sayings of the Century",
          "price": 8.95
        },
        { "category": "fiction",
          "author": "Evelyn Waugh",
          "title": "Sword of Honour",
          "price": 12.99
        }
   ],
      "bicycle": {
        "color": "red",
        "price": 19.95
      }
    }
  }
<?php
// at least one book in store has author
$I->seeResponseJsonMatchesXpath('//store/book/author');
// first book in store has author
$I->seeResponseJsonMatchesXpath('//store/book[1]/author');
// at least one item in store has price
$I->seeResponseJsonMatchesXpath('/store//price');
?>
  • param string $xpath
  • [Part] json

ПроверкаСоответствияJSONТипу

Проверяет, что JSON соответствует предоставленным типам. В случае, если вы не знаете фактических значений возвращенных данных JSON, вы можете сопоставить их по типу. Проверка начинается с корневого элемента. Если данные JSON представляют собой массив, он проверит все элементы массива. Вы можете указать путь в JSON, который нужно проверить с помощью JsonPath

Базовый пример:

<?php
// {'user_id': 1, 'name': 'davert', 'is_active': false}
$I->seeResponseMatchesJsonType([
     'user_id' => 'integer',
     'name' => 'string|null',
     'is_active' => 'boolean'
]);

// narrow down matching with JsonPath:
// {"users": [{ "name": "davert"}, {"id": 1}]}
$I->seeResponseMatchesJsonType(['name' => 'string'], '$.users[0]');
?>

Вы можете проверить, содержит ли запись поля с ожидаемыми типами данных. Список возможных типов данных:

  • строка
  • целое число
  • вещественное число
  • массив (объект json тоже массив)
  • булево значение
  • null

Вы также можете использовать вложенные структуры типов данных и определять несколько типов для одного поля:

<?php
// {'user_id': 1, 'name': 'davert', 'company': {'name': 'Codegyre'}}
$I->seeResponseMatchesJsonType([
     'user_id' => 'integer|string', // multiple types
     'company' => ['name' => 'string']
]);
?>

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

Вот список возможных фильтров:

  • integer:>{val} - проверяет, что целое число больше {val} (работает и с вещественными числами и строками).
  • integer:<{val} - проверяет, что целое число меньше {val} (работает и с вещественными числами и строками).
  • string:url - проверяет, является ли значение допустимым URL.
  • string:date - проверяет, является ли значение датой в формате JavaScript: https://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates
  • string:email - проверяет, является ли значение допустимым адресом электронной почты в соответствии с http://emailregex.com/
  • string:regex({val}) - проверяет, соответствует ли строка предоставленному регулярному выражению с {val}

Вот как можно использовать фильтры:

<?php
// {'user_id': 1, 'email' => 'davert@codeception.com'}
$I->seeResponseMatchesJsonType([
     'user_id' => 'string:>0:<1000', // multiple filters can be used
     'email' => 'string:regex(~\@~)' // we just check that @ char is included
]);

// {'user_id': '1'}
$I->seeResponseMatchesJsonType([
     'user_id' => 'string:>0', // works with strings as well
]);
?>

Вы также можете добавить пользовательские фильтры, используя {@link JsonType::addCustomFilter()}. См. Справочник по JsonType.

  • [Part] json
  • param array $jsonType
  • param string $jsonPath @see JsonType

ПроверкаРавенстваXMLОтвета

Проверяет, равен ли ответ XML предоставленному XML. Сравнение выполняется путем канонизации обоих XML.

Параметры могут быть переданы в виде DOMDocument, DOMNode, XML-строки или массива (если нет атрибутов).

  • param $xml
  • [Part] xml

ПроверкаВключенияXMLОтвета

Проверяет, содержит ли ответ XML предоставленный XML. Сравнение выполняется путем канонизации обоих XML. Параметр может быть передан либо как XmlBuilder, DOMDocument, DOMNode, XML-строка или массив (если нет атрибутов).

Пример:

<?php
$I->seeXmlResponseIncludes("<result>1</result>");
?>
  • param $xml
  • [Part] xml

ПроверкаСоответствияXMLОтветаXPath

Проверяет, соответствует ли ответ XML предоставленному XPath

<?php
$I->seeXmlResponseMatchesXpath('//root/user[@id=1]');
  • [Part] xml
  • param $xpath

ОтправкаHTTPЗапроса

Отправляет HTTP-запрос.

  • param $method
  • param $url
  • param array|string|\JsonSerializable $params
  • param array $files
  • [Part] json
  • [Part] xml

ОтправкаЗапросаDELETE

Отправляет запрос DELETE на указанный URI.

  • param $url
  • param array $params
  • param array $files
  • [Part] json
  • [Part] xml

ОтправкаЗапросаGET

Отправляет запрос GET на указанный URI.

  • param $url
  • param array $params
  • [Part] json
  • [Part] xml

ОтправкаЗапросаHEAD

Отправляет запрос HEAD на указанный URI.

  • param $url
  • param array $params
  • [Part] json
  • [Part] xml

ОтправкаЗапросаLINK

Отправляет запрос LINK на указанный URI.

  • param $url
  • param array $linkEntries (элемент — массив с ключами “uri” и “link-param”)

@link http://tools.ietf.org/html/rfc2068#section-19.6.2.4

@author samva.ua@gmail.com

  • [Part] json
  • [Part] xml

ОтправкаЗапросаOPTIONS

Отправляет запрос OPTIONS на указанный URI.

  • param $url
  • param array $params
  • [Part] json
  • [Part] xml

ОтправкаЗапросаPATCH

Отправляет запрос PATCH на указанный URI.

  • param $url
  • param array|string|\JsonSerializable $params
  • param array $files
  • [Part] json
  • [Part] xml

ОтправкаЗапросаPOST

Отправляет запрос POST на указанный URI. Параметры и файлы могут быть предоставлены отдельно.

Пример:

<?php
//simple POST call
$I->sendPost('/message', ['subject' => 'Read this!', 'to' => 'johndoe@example.com']);
//simple upload method
$I->sendPost('/message/24', ['inline' => 0], ['attachmentFile' => codecept_data_dir('sample_file.pdf')]);
//uploading a file with a custom name and mime-type. This is also useful to simulate upload errors.
$I->sendPost('/message/24', ['inline' => 0], [
    'attachmentFile' => [
         'name' => 'document.pdf',
         'type' => 'application/pdf',
         'error' => UPLOAD_ERR_OK,
         'size' => filesize(codecept_data_dir('sample_file.pdf')),
         'tmp_name' => codecept_data_dir('sample_file.pdf')
    ]
]);
// If your field names contain square brackets (e.g. `<input type="text" name="form[task]">`),
// PHP parses them into an array. In this case you need to pass the fields like this:
$I->sendPost('/add-task', ['form' => [
    'task' => 'lorem ipsum',
    'category' => 'miscellaneous',
]]);
  • param $url
  • param array|string|\JsonSerializable $params
  • param array $files Список имен файлов или «моков» $_FILES (каждый элемент — массив со следующими ключами: name, type, error, size, tmp_name (указывает на реальный путь к файлу). Каждый ключ работает как атрибут «name» поля ввода файла.

@see http://php.net/manual/en/features.file-upload.post-method.php @see codecept_data_dir()

  • [Part] json
  • [Part] xml

ОтправкаЗапросаPUT

Отправляет запрос PUT на указанный URI.

  • param $url
  • param array|string|\JsonSerializable $params
  • param array $files
  • [Part] json
  • [Part] xml

ОтправкаЗапросаUNLINK

Отправляет запрос UNLINK на указанный URI.

  • param $url
  • param array $linkEntries (элемент — массив с ключами “uri” и “link-param”) @link http://tools.ietf.org/html/rfc2068#section-19.6.2.4 @author samva.ua@gmail.com
  • [Part] json
  • [Part] xml

УстановитьПараметрыСервера

Устанавливает параметры SERVER, действующие для всех последующих запросов. Это удалит старые.

$I->setServerParameters([]);

НачатьОтслеживаниеПеренаправлений

Включает автоматическое отслеживание перенаправлений клиентом

<?php
$I->startFollowingRedirects();
  • [Part] xml
  • [Part] json

ОстановитьОтслеживаниеПеренаправлений

Запрещает автоматическое отслеживание перенаправлений клиентом

<?php
$I->stopFollowingRedirects();
  • [Part] xml
  • [Part] json

© 2011 Michael Bodnarchuk and contributors
Licensed under the MIT License.
https://codeception.com/docs/modules/REST

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API