Disable on a test suite?
REBELinBLUE opened this issue · 6 comments
I know you can add the annotation to increase the timeout on a per test basis but is there a way to do it on a per test suite basis, for instance I know my integration tests are going to be slow because they tear down and recreate a database between tests
@REBELinBLUE It's not currently possible to set different slowness thresholds on a per-test suite basis. But I would love to add that feature.
How are you defining the test suites in your project? Would you mind posting an example?
Thanks :) I'm just defining them using the tag in the phpunit config file
@REBELinBLUE What might be the best way to disable the listener?
Setting an extremely high slownessThreshold
like 999999
would prevent a test reporting slow unless it ran for more than 999 seconds. However a more intentional threshold of 0
might be better. We already use reportLength = 0
to display all slow tests in the output instead of trimming to 5.
What if the SpeedTrapListener supported configuring test suites by supplying the testsuite name? The options configuration could be defined as an array of arrays, where each array has:
- testSuiteName
- slownessThreshold
- reportLength
The XML configuration would look like this for 2 test suites... what do you think?
<phpunit
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "true"
convertErrorsToExceptions = "true"
convertNoticesToExceptions = "true"
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
syntaxCheck = "false"
bootstrap = "vendor/autoload.php">
<testsuites>
<testsuite name="Database Test Suite">
<directory>src/*/*/*/Tests/Database</directory>
</testsuite>
<testsuite name="Not Database Test Suite">
<directory>src/*/*/*/Tests</directory>
<exclude>
<directory>src/*/*/*/Tests/Database</directory>
</exclude>
</testsuite>
</testsuites>
<listeners>
<listener class="JohnKary\PHPUnit\Listener\SpeedTrapListener">
<arguments>
<array>
<element>
<array>
<element key="testSuiteName">
<string>Database Test Suite</string>
</element>
<element key="slowThreshold">
<integer>0</integer>
</element>
</array>
</element>
<element>
<array>
<element key="testSuiteName">
<string>Not Database Test Suite</string>
</element>
<element key="slowThreshold">
<integer>500</integer>
</element>
<element key="reportLength">
<integer>0</integer>
</element>
</array>
</element>
</array>
</arguments>
</listener>
</listeners>
</phpunit>
Awesome, thanks that sounds ideal :)
@johnkary It would be great if we could use the @slowThreshold
annotation on classes too, not just test methods
Is this on the roadmap at all? I’m in the exact same boat (got an integration test suite that has “slow” tests that I’d like to increase the threshold on).