У меня есть API, написанный на PHP с Slim
(3, скоро будет обновлен до 4), у меня также есть обширная спецификация, написанная в openapi3
формате YML (я мог бы преобразовать в другой формат при необходимости , но я думаю, что было бы лучше сохранить oas3). В настоящее время я тестирую все конечные точки на соответствие этой спецификации с Dredd . Это инструмент, который проходит через спецификацию API и отправляет примеры данных в реальный API и проверяет, соответствует ли результат спецификации c. Это работает, но не очень хорошо. Для тестового запуска я должен стереть и повторно инициализировать базу данных с PHP, а затем запустить Dredd с npm. Плюс, поскольку Dredd не поддерживает все функции oas3, мне нужно сначала выполнить какое-то преобразование.
Так как у меня в любом случае есть несколько юнит-тестов с PHPUnit, я хотел бы также запустить другие тесты с PHPUnit (и получить избавиться от Node-вещей вообще). Я нашел http://opensource.byjg.com/php-swagger-test/ и https://github.com/Maks3w/SwaggerAssertions. Оба они предоставляют именно эту функцию, но мне пришлось бы написать отдельную функцию для каждой конечной точки, содержащую примеры данных и т. Д., Которые уже есть в API spe c. Любая идея, как я мог бы избежать этого и просто использовать мою API spe c в качестве определения теста с PHPUnit или хотя бы любую библиотеку PHP?
Пример из спецификации:
/users:
get:
summary: get a list of users
description: get info about all registered users - in whole application or in a workspace.
parameters:
- in: header
name: AuthToken
schema:
$ref: '#/components/schemas/auth'
example:
at: 132token
- in: query
name: ws
description: id of a workspace to get users from. can be omitted for all users in system
required: false
examples:
a:
value: 0
b:
value: 1
С помощью byjg php -swagger-test мне нужно написать что-то вроде этого
public function usersA()
{
$request = new \ByJG\Swagger\SwaggerRequester();
$request
->withMethod('GET')
->withPath("/users")
->withHEader(blabla)
->withRequestBody(['ws'=>0]);
$this->assertRequest($request);
}
public function usersB()
{
$request = new \ByJG\Swagger\SwaggerRequester();
$request
->withMethod('GET')
->withPath("/users")
->withHEader(blabla)
->withRequestBody(['ws'=>1]);
$this->assertRequest($request);
}
Два теста (функции), содержащие только информацию, которая уже есть в spe c. Есть ли лучший инструмент / способ для запуска тестов на всех конечных точках против spe c без записи всех этих?