Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Странное поведения codeception при тестировании Symfony 4 Flex

codeception
php
testng
Теги: #<Tag:0x00007fedc74a2010> #<Tag:0x00007fedc74a1d18> #<Tag:0x00007fedc74a1b38>

(Злобус Злобин) #1

Всем привет. Codeception установлен глобально:

$ whereis codecept
codecept: /home/nkl/.config/composer/vendor/bin/codecept

Если просто запускаю codecept run -vvv, то все тесты проходят нормально:

$ codecept run -vvv
Codeception PHP Testing Framework v2.3.7
Powered by PHPUnit 6.4.4 by Sebastian Bergmann and contributors.

App\Tests.acceptance Tests (1) --------------------------------------------------------------------------------------
Modules: PhpBrowser, \App\Tests\Helper\Acceptance
---------------------------------------------------------------------------------------------------------------------
Testing App\Tests.acceptance
FirstCest: Open landing page
Signature: App\Tests\FirstCest:tryToTest
Test: tests/acceptance/FirstCest.php:tryToTest
Scenario --
 I am on page "/"
  [Request Headers] {"env":"test"}
  [Page] /
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"Server":["nginx/1.10.3 (Ubuntu)"],"Content-Type":["text/html; charset=UTF-8"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"Set-Cookie":["PHPSESSID=pmmdb7n1u26dc3m02otsmj4fpm; path=/; HttpOnly"],"Cache-Control":["max-age=0, must-revalidate, private"],"Date":["Wed, 14 Feb 2018 06:46:08 GMT"],"X-Debug-Token":["c7b6cf"],"X-Debug-Token-Link":["http://woop2.sf/_profiler/c7b6cf"]}
 I see element "h1.landing-jumbo__title"
 PASSED 

---------------------------------------------------------------------------------------------------------------------

App\Tests.functional Tests (1) --------------------------------------------------------------------------------------
Modules: Symfony, Doctrine2, Asserts, Sequence, \App\Tests\Helper\Functional
---------------------------------------------------------------------------------------------------------------------
- CabinetTest: Some feature  [Database] Transaction started
  [Request Headers] []
  [Page] /cabinet
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"cache-control":["no-cache, private"],"date":["Wed, 14 Feb 2018 06:46:09 GMT"],"content-type":["text/html; charset=UTF-8"],"x-debug-token":["0bbdba"]}
  [User] anon. []
✔ CabinetTest: Some feature (0.04s)
  [Database] Transaction cancelled; all changes reverted.
---------------------------------------------------------------------------------------------------------------------

App\Tests.unit Tests (6) --------------------------------------------------------------------------------------------
Modules: Asserts, \App\Tests\Helper\Unit
---------------------------------------------------------------------------------------------------------------------
✔ StrategyTest: Id comparator | #0 (0.00s)
✔ StrategyTest: Id comparator | #1 (0.00s)
✔ StrategyTest: Id comparator | #2 (0.00s)
✔ StrategyTest: Date comparator | #0 (0.00s)
✔ StrategyTest: Date comparator | #1 (0.00s)
✔ StrategyTest: Date comparator | #2 (0.00s)
---------------------------------------------------------------------------------------------------------------------


Time: 214 ms, Memory: 26.00MB

OK (8 tests, 8 assertions)

Если по отдельности, то все проходит нормально. КРОМЕ функциональных тестов:

$ codecept run functional -vvv
Codeception PHP Testing Framework v2.3.7
Powered by PHPUnit 6.4.4 by Sebastian Bergmann and contributors.
PHP Fatal error:  Class 'Symfony\Component\HttpKernel\Kernel' not found in /home/nkl/projects/woop2/src/Kernel.php on line 11

Т.к., codecept у меня установлен глобальный, то для того, что бы у меня работала автозагрузка классов из фреймворка я естественно в каждой папки с наборами тестов разместил файл _bootstrap.php с таким содрежимым:

<?php

require __DIR__ . '/../../vendor/autoload.php';

Вот собственно сам конфиг codeception.yml:

namespace: App\Tests
paths:
    tests: tests
    output: tests/_output
    data: tests/_data
    support: tests/_support
    envs: tests/_envs
actor_suffix: Tester
settings:
    bootstrap: _bootstrap.php
extensions:
    enabled:
        - Codeception\Extension\RunFailed
params:
    - .env

А вот functional.suite.yml:

actor: FunctionalTester
modules:
    enabled:
        - Symfony:
            app_path: 'src'
            environment: 'test'
        - Doctrine2:
            depends: Symfony
            cleanup: true
        - Asserts
        - Sequence
        - \App\Tests\Helper\Functional

Как вы уже могли догадаться, разрабатываю и пытаюсь тестировать приложение на Symfony 4 Flex. У меня все настроено в точности, как в официальном репозитории codeception: https://github.com/Codeception/symfony-demo

И что я заметил, если я запускаю codecept run functional, то у меня явно не читается файл _bootstrap.php из папки tests/functional. Потому что если я допускаю в этом файле ошибку синтаксиса, он на неё не ругается, а продолжает вываливать все туже ошибку с невозможностью подклчить HttpKernek (см. выше). А если я запускаю просто codecept run и в этом файле (tests/functional/_bootsrtap.php) будет ошибка синтаксиса, то весь сеанс тестирования будет завален фаталом из за ошибки синтаксиса в файле _bootstrap.php.

Что за странности господа?

P.S.
Я новичок в тестировании.
P.S.S.
Вопрос к администрации форума: Почему нет тега Symfony?


(Ray Romanov) #2

Такая-же беда, но решил просто, в начале каждого сьюта ставлю:
require_once '_bootstrap.php';


(Злобус Злобин) #3

Мне не помогло. Вообще как-будто этой строчки и не добавлял. Хоть поставил её перед определением namespace’a и должен был быть fatal, но у меня по прежнему:

$ codecept run functional
Codeception PHP Testing Framework v2.3.7
Powered by PHPUnit 6.4.4 by Sebastian Bergmann and contributors.
PHP Fatal error:  Class 'Symfony\Component\HttpKernel\Kernel' not found in /home/nkl/projects/woop2/src/Kernel.php on line 11


(Злобус Злобин) #4

А можешь код произвольного функционального теста показать? У меня вот такой:

<?php
namespace App\Tests;

class CabinetTest extends \Codeception\Test\Unit
{
    /**
     * @var \App\Tests\FunctionalTester
     */
    protected $tester;

    protected function _before()
    {
    }

    protected function _after()
    {
    }

    // tests
    public function testSomeFeature()
    {
        $this->tester->wantTo('Open Cabinet page');
        $this->tester->amOnPage('/cabinet');
        $this->tester->seeElement('h2.title.main__title');
    }
}

Мне кажется я неправильно наследуюсь.


(Ray Romanov) #5
<?php
require_once '_bootstrap.php';
/**
 * Тестирование SEO .ru
 * @group SEO
 * @group SEORu
 * 
 */

class SEORuFunctionalCest
{

	/**
	* @dataprovider pagesProvider
	* @env SEO
	* @env SEOMob
	*/
	function SEORuAuditTest(Step\Functional\SEOSteps $I, \Codeception\Example $pages, \Codeception\Scenario $scenario)
	{
		$I->wantTo('Автоматический ' . $scenario->current('env') . ' аудит .ru' . $pages['uri']);
		if ($scenario->current('env') == 'SEOMob') {
			$I->haveHttpHeader('User-agent', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36');
		}
		$I->nowURL = $pages['uri'];
		$I->amOnPage($pages['uri']);
...

(Злобус Злобин) #6

А как ты кейс создаешь? Генерируешь или ручками?


(Ray Romanov) #7

Уже не помню, вроде через генерацию.