PhpUnit测试响应代码

时间:2013-10-30 18:12:18

标签: php unit-testing testing zend-framework2 phpunit

我有一个很大的应用程序,我想用phpunit测试。在第一步中,我想测试每个页面是否可访问并返回响应代码200。

我就是这样做的:

public function testIndexActionCanBeAccessed()
{
    $this->dispatch('/');
    $this->assertResponseStatusCode(200);
}

但正如我之前所说,我的申请很重要。所以有很多页面需要测试。这些测试需要很长时间。

有没有办法加速这些测试,或者这些测试是否相关?

感谢帮助

2 个答案:

答案 0 :(得分:2)

我曾经遇到过由于代码更改导致很少使用的页面被破坏的情况,管理层也在大声抱怨。简单地通过wget请求该页面就可以很容易地发现失败 - 那就是我作为常规工作添加到我们的Jenkins那里。之后,这份工作从未失败过,一天又一天,一个月又一个月,请两到三页,大约两年(然后页面被删除)。

如果您处于没有更好的测试可用或实施起来太麻烦的情况下,测试HTTP状态代码将是一种有效的方法。但是当你看到自己时,这将非常快速地变慢,因为你必须始终将整个系统测试为一个大黑盒子。而且你需要在测试环境中工作的所有东西。

如果你现在有一个几乎不稳定的系统,使用像Selenium这样的东西远程控制应用程序的功能测试是快速检测故障的良好的第一步。您可能希望并行执行这些测试,这需要适当的硬件功能,最有可能以多台机器的形式执行Selenium客户端。

另一方面,你应该争取更多的单元测试。这些将运行得非常快,因为您将注入模拟对象作为数据库连接等实际内容的替代。在后台没有数据库的情况下,测试不会与网络通信,也不会从磁盘写入和读取 - 模拟对象在内存中并几乎立即提供所需的答案。

组合使用时,单元测试与一组选定的功能测试(可能还有一些集成测试,将一些较大的部件组合在一起并单独测试,但不是整个应用程序)将显示一切都按预期工作。

但仅凭功能测试,情况永远不会如此。

答案 1 :(得分:-1)

从您的角度来看,为什么这样的测试应该是相关的?您正在测试环境或开发机器上运行测试套件,因此应用程序将隐式地在线"在线"。如果您确实需要测试应用程序是否响应,请为此执行单个测试,而不是每个页面执行一次测试。