Я добавляю модульные тесты в старую производственную кодовую базу 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)