【问题标题】:PhpUnit Test response codePhpUnit 测试响应代码
【发布时间】:2013-11-10 12:37:34
【问题描述】:

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

这就是我的做法:

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

但正如我之前所说,我的应用程序很大。所以有很多页面要测试。这些测试需要很长时间。

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

感谢帮助

【问题讨论】:

  • 嗯,每次调度都是一个完整的请求,所以这自然需要时间。您可以自己决定这样的单元测试是否相关。没有办法神奇地加速请求,只是因为它是一个单元测试;)
  • 使用单元测试来测试公共方法。瞄准代码中的最小单元。你可以看看 behat 用于测试响应,在其中发送 GET/POST/PUT 或 DELETE 请求并验证响应,包括标题和正文内容。

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


【解决方案1】:

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

【讨论】:

  • 检查一下或者某些页面给出了正确的状态码怎么样..你知道的还有更多。以我为例.. 我需要检查休息 api 的响应代码.. 几个例子 404、400、401、422、500 是的,那么你也有 200 个。
  • @FlipVernooij 你在说的是集成测试,而不是单元测试。单元测试的主要范围是测试单个单元 -> 当前正在测试的单元,而不是整个服务链和依赖关系。此外,不单独运行单元测试的一个重要副作用是速度。 HTTP 请求需要时间,测试将运行缓慢,因此开发人员将停止运行测试套件。
  • 完美世界场景并不常见,很多项目甚至没有测试,有时理论也没有那么实用。
【解决方案2】:

我曾经遇到过一个很少使用的页面由于代码更改而损坏的情况,管理层大声抱怨。只需使用wget 请求该页面即可轻松发现故障 - 这就是我当时添加到我们的 Jenkins 的常规工作。之后这项工作从未失败过,日复一日,月复一月,愉快地请求两到三页,大约两年(然后这些页被删除了)。

如果您处于没有更好的测试可用或实施起来过于繁琐的情况,那么测试 HTTP 状态代码将是一种有效的方法。但是正如您自己看到的那样,这会变得非常缓慢,因为您必须始终将整个系统作为一个大黑匣子进行测试。而且您需要在测试环境中工作。

如果您现在有一个几乎无法测试的系统,那么使用诸如 Selenium 之类的远程控制应用程序的功能测试是快速检测故障的良好第一步。您可能希望并行执行这些测试,这需要适当的硬件能力,很可能是以多台机器的形式来执行 Selenium 客户端。

另一方面,您的目标应该是获得更多的单元测试。这些将运行得非常快,因为您将注入模拟对象作为数据库连接等真实事物的替代品。如果后台没有数据库,测试将无法与网络通信,也不会从磁盘读写 - 模拟对象在内存中,几乎可以立即给出所需的答案。

结合起来,单元测试与一组选定的功能测试(可能还有一些集成测试将一些较大的部分放在一起并单独测试它们,但不是整个应用程序)将表明一切都按预期工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2021-02-08
    • 2013-10-01
    • 1970-01-01
    • 2011-10-29
    • 2021-03-20
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多