如何有效地拆分大型phpunit testsuite?

时间:2015-08-24 15:16:01

标签: phpunit test-suite

我使用phpunit的testsuites功能来组织我的测试。我这样做是为了能够在以后并行运行测试。

对于不同的目录,这是相对简单的。因此,我可以通过捆绑分割测试套件。

<testsuite name="bundle-one">
    <directory>tests/BundleOne</directory>
</testsuite>

<testsuite name="bundle-two">
    <directory>tests/BundleTwo</directory>
</testsuite>

<testsuite name="bundle-three">
    <directory>tests/BundleThree</directory>
</testsuite>

但现在我有一个目录(服务),其中包含许多子文件夹。我可以手动制作这个文件夹的几个测试套件。但在我看来,这将是一个微弱的解决方案。因为如果我提及其中的每个子文件夹并且文件夹被重命名或删除,测试套件可能会轻易破坏。

我的想法是使用某种正则表达式来选择一系列子文件夹以包含在一个测试套件中,并选择另一个文件夹范围用于另一个测试套件。

<testsuite name="services-AM">
    <directory>tests/services/{A-M}</directory>
</testsuite>

<testsuite name="services-NZ">
    <directory>tests/services/{A-M}</directory>
</testsuite>

我找不到任何关于我的想法的文件。有人可能对此有所了解吗? : - )

1 个答案:

答案 0 :(得分:2)

更简单的解决方案可能是过滤您的测试:

# Only include test classes beginning with the letter A-M
phpunit --filter '/^[A-M]/'

# Only include test classes beginning with the letter N-Z
phpunit --filter '/^[N-Z]/'

假设您的所有测试类都以大写字母开头。

您需要尝试进行均匀分割。即如果你的所有测试都以A-M之间的字符开头,那么这将不起作用。

使用PHPUnit 5.4.6进行测试