【问题标题】:PHPUnit : Execute testSuites in specific orderPHPUnit : 按特定顺序执行 testSuites
【发布时间】:2013-12-10 07:04:16
【问题描述】:

我有一些testsuites(PHPUnit-Selenium,PHPUnit),我想按特定顺序运行它们。所以我想运行“安装(硒驱动)”测试套件然后“单元测试”测试套件。我知道我应该在单元测试中避免依赖关系,但我的问题不在于这个(我使用具有许多依赖关系的旧应用程序,我需要安装并使用 selenium 测试这个安装,然后运行单元测试等)。

所以,我的“测试用例”不需要特定的顺序,这没关系,但只适用于我的“测试套件”。这是我的phpunit.xml 配置文件:

<phpunit backupGlobals="false">

    <selenium>
      <browser name="Firefox" browser="*firefox" timeout="600" />
    </selenium>

    <testsuites>
        <testsuite name="install (selenium driven)">
            <file>./_install.php</file>
            <exclude>./bin</exclude>
        </testsuite>
        <testsuite name="unit tests">
            <directory>./</directory>
            <exclude>./selenium</exclude>
        </testsuite>
    </testsuites>
</phpunit>

所以当我运行 phpunit 时,它似乎没有等待“安装(硒驱动)”结果,所以“单元测试”失败(MySQL 错误,但没关系)。我该如何处理?我想要两个单独的步骤:

  1. 运行“安装(硒驱动)”测试套件
  2. 运行“单元测试”测试套件

其他信息:

  • 我有很多 testCases 文件,所以我不想指定它们
  • 我知道我也应该避免backupGlobals=false,对不起,我不能:( ...
  • 我知道bootstrap 选项,但我需要“测试”安装(所以它是一个测试套件)

如果您有线索,非常感谢! (我试图找到解决方案,但我暂时没有找到任何解决方案......)

【问题讨论】:

  • 也许使用批处理文件一个接一个地调用每个测试套件,使用命令行开关或不同的 XML 配置文件启动 PHPUnit 以运行 1 个测试套件,因此您可以手动安排顺序。维护起来很痛苦,但现在可以工作。

标签: php selenium phpunit


【解决方案1】:

Steven Scott 关于使用批处理文件和两个配置文件的评论是我会做的。它遵循 Unix 的哲学,即使用简单的工具将简单的工具串在一起,而不是一个大型的复杂工具包罗万象。

这是一个替代方案,基于猜测“安装”不仅仅是进行功能测试,还设置了单元测试所需的数据库和其他固定装置。那么,如何将功能测试移至单元测试套件中的setupBeforeClass() 调用。使用shell_exec() 运行phpunit 运行功能测试,如果失败,则调用die 或类似的方法,使单元测试不运行。

附:您听起来好像知道自己在做什么,但是对于以后来的人来说:当您有机会时,应该重构单元测试以使用模拟数据库,以便它们可以首先并且经常运行。仍然保留现有的单元测试套件,但将其合并到功能测试套件中,因为这听起来像是它所属的地方。事实上(合并两个测试套件,然后在任何地方使用显式的@depends)是另一种方法。

【讨论】:

  • 感谢达伦库克和史蒂文斯科特!现在好了,我运行了两个单独的 phpunit(由 jenkins 驱动),它可以工作了。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
相关资源
最近更新 更多