Модульные тесты в Symfony 2.8 выполняются в сотни раз медленнее, чем должны - PullRequest
1 голос
/ 07 ноября 2019

Я добавляю модульные тесты в старую производственную кодовую базу Symfony 2.8, в которой их никогда не было, поэтому я могу обновить Symfony до поддерживаемой версии. Мы также будем обновлять PHP, так как в настоящее время мы работаем с PHP 5.5, который также больше не поддерживается, но Symfony 2.8 выдает слишком много ошибок, если он работает под PHP 7.3.

Хотя я могу получить модультесты, выполняемые как в PHPUnit, так и в Codeception (на основе PHPUnit), они выполняются невероятно медленно.

Например:

SimpleTest.php

<?php
class SimpleTest extends PHPUnit_Framework_TestCase {
  public function testShouldDoNothing() {
    $this->assertTrue(true);
  }
}

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
    <php>
        <server name="KERNEL_DIR" value="app/"/>
    </php>
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>tests/unit</directory>
        </testsuite>
    </testsuites>
</phpunit>

Вывод прогона PHPUnit

PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Runtime:        PHP 5.5.9 with Xdebug 2.5.5

.

Time: 19.52 seconds, Memory: 6.00MB

OK (1 test, 1 assertion)

codeception.yml

paths:
    tests: tests
    output: tests/_output
    data: tests/_data
    support: tests/_support
    envs: tests/_envs
actor_suffix: Tester
extensions:
    enabled:
        - Codeception\Extension\RunFailed
coverage:
    enabled: true
    include:
        - src/*
    low_limit: 50
    high_limit: 100

Вывод прогона Codeception

Codeception PHP Testing Framework v2.3.9
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Unit Tests (1) --------------------------------------------------
Testing unit
+ SimpleTest: Should do nothing (0.29s)
-----------------------------------------------------------------

Time: 30.96 seconds, Memory: 23.25MB

OK (1 test, 1 assertion)

Этот тест должен последовательно выполняться в 0.00s, а общее время должно быть меньше 5 seconds, а не 20 seconds или более.

Как ускорить юнит-тестирование в Symfony 2.8 в PHP 5.5?


Я отследил проблему до запуска PHP 5.5, который в настоящее время является обязательным. Я создал ванильную установку Symfony 2.8 с PHP 5.5, и без кода тесты по-прежнему практически неосуществимы. Когда я переключаюсь на PHP 7.3, тесты выполняются так быстро, как я ожидал в прошлом, однако наш проект еще не работает под PHP 7.3, поскольку он вызывает фатальные ошибки.

D:\server\Apache24\htdocs\symfony-2.8>php55 vendor\codeception\codeception\codecept run unit
Codeception PHP Testing Framework v2.3.9
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Unit Tests (1) --------------------------------------------------
+ SimpleTest: Should do nothing (0.20s)
-----------------------------------------------------------------

Time: 21.84 seconds, Memory: 14.50MB

OK (1 test, 1 assertion)

D:\server\Apache24\htdocs\symfony-2.8>php73 vendor\codeception\codeception\codecept run unit
Codeception PHP Testing Framework v2.3.9
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Unit Tests (1) --------------------------------------------------
+ SimpleTest: Should do nothing (0.00s)
-----------------------------------------------------------------

Time: 264 ms, Memory: 10.00MB

OK (1 test, 1 assertion)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...