Тестирование Rest api

Всё про тестирование в Yii 2.0
Ответить
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Тестирование Rest api

Сообщение bambiq »

Как настроить и протестировать апи? В документации указано как подключить модуль:

Код: Выделить всё

modules:
   enabled:
       - REST:
           depends: PhpBrowser
           url: 'http://serviceapp/api/v1/' 
Но в какой файл это запихивать и где этот файл должен лежать? Если я использую yii2 basic,то этот файл надо в /tests кидать? За что отвечает параметр depends? Что в моем случае надо указывать? Объясните, что да и как, не могу разобраться. И стандартного yii codeception модуля хватает? Не надо устанавливать codeception с помощью: composer require "codeception/codeception". Есть ли между ними разница? Впервые сталкиваюсь с тестами, поэтому не понимаю =) Можно подробное объяснение, спасибо.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Тестирование Rest api

Сообщение ElisDN »

Запихивать в api.suite.yml и запускать как написано в README.md или tests/README.md.

http://www.elisdn.ru/blog/84/seo-servic ... on-testing
http://www.elisdn.ru/blog/78/yii2-codeception-testing
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

ElisDN писал(а):Запихивать в api.suite.yml и запускать как написано в README.md или tests/README.md.

http://www.elisdn.ru/blog/84/seo-servic ... on-testing
http://www.elisdn.ru/blog/78/yii2-codeception-testing
В README.md самого yii2 base?
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

И в depends что указывать? Yii2? Вот ещё кое что нашел:

Код: Выделить всё

class_name: ApiTester
modules:
    enabled:
        - REST:
            url: /api/v1
            depends: Yii2
        - \ApiBundle\Helper\Api
    config:
        - Yii2
Я не могу найти, где детально прочитать о настройках... Я понятия не имею что за путь: - \ApiBundle\Helper\Api...
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Тестирование Rest api

Сообщение ElisDN »

Впишите PhpBrowser как в первом варианте.
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

ElisDN писал(а):Впишите PhpBrowser как в первом варианте.
Создал папку апи внутри /tests командой:
vendor/bin/codecept generate:suite api
Настроил api.suite.yml как указано выше(он создался сам в tests)
Далее командой:
php codecept generate:cept api Login
Создал файлик с содержимым:

Код: Выделить всё

<?php 
$I = new ApiTester($scenario);
$I->wantTo('Login user');
$I->sendPOST('/user/login', ['username' => 'tester', 'password' => 'tester']);
$I->seeResponseContains('{"username":"tester"}');
 
Пишу в консоли
vendor/bin/codecept run tests/api/LoginCept.php
В ответ:
ApiTester class doesn't exist in suite folder.
Run the 'build' command to generate it
Я пишу потом:
vendor/bin/codecept build tests/api
В ответ:
Too many arguments, expected arguments "command"
Что не так?? api.suite.yml сам сгенерировался в корне /tests, а не /tests/api,
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

Пытался сделать так build из папки test:
../vendor/bin/codecept build
Но, апи проигнорило
Building Actor classes for suites: acceptance, functional, unit
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

Когда написал кое какое апи, но не можешь протестировать его по документации, на главной странице сайта которой написано:
Write and execute a test for an existing app
in less than 5 minutes!
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Тестирование Rest api

Сообщение ElisDN »

Ну а

Код: Выделить всё

class_name: ApiTester
по аналогии вписали?
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

ElisDN писал(а):Ну а

Код: Выделить всё

class_name: ApiTester
по аналогии вписали?
class_name: ApiTester
modules:
enabled:
- REST:
depends: PhpBrowser
url: 'http://lfn.dev/api/v1'
Да вроде все правильно, может я не из той папки запускаю? Вроде все правильно... Говорят можно через curL сделать, но хочу это разобрать до конца.
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Тестирование Rest api

Сообщение bambiq »

ElisDN писал(а):Ну а

Код: Выделить всё

class_name: ApiTester
по аналогии вписали?
ApiTester class doesn't exist in suite folder.
Run the 'build' command to generate it
Я пытался yml файл руками кидать в папку api но ничего не происходит, все тоже самое. Я правильно build вызываю? Нужно вызывать его с указанием директории сьюта или же директории с .yml?
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: Тестирование Rest api

Сообщение vitovt »

Может быть кто-то сталкивался, дошли руки до тестирования API

Все как у всех, директория api внутри tests все настроил и создал как в документации.

Проблема в том, что у меня в конфиге API есть такая строчка

Код: Выделить всё

 'errorHandler' => [
            'class' => 'api\components\ApiErrorHandler',
            'errorAction' => 'main/error',
        ],
и при запуске тестов

Код: Выделить всё

Codeception PHP Testing Framework v2.2.10
Powered by PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

Api\tests.api Tests (1) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
E CreateUserCept: Perform actions and see result
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Api\tests.unit Tests (0) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Api\tests.functional Tests (0) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Time: 339 ms, Memory: 10.00MB

There was 1 error:

---------
1) CreateUserCept: Perform actions and see result
 Test  tests/api/CreateUserCept.php
Class api\components\ApiErrorHandler does not exist

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
т.е он говорит что Class api\components\ApiErrorHandler does not exist

что не так? как узнать как он его видит и где пытается найти? Спасибо!
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: Тестирование Rest api

Сообщение vitovt »

Форум - классная вещь, спрашиваешь, а потом через пол часа сам находишь решение.

В итоге нужно было в /api/config/bootstrap.php

продублировать или подключить /common/config/bootstrap.php

где были определены все

Код: Выделить всё

Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
Ответить