Тестирование приложения SLIM на соответствие спецификации API с помощью PHPUnit - PullRequest
0 голосов
/ 08 января 2020

У меня есть 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 без записи всех этих?

...