我有一个大型应用程序,我想用 phpunit 对其进行测试。在第一步中,我想测试是否每个页面都可以访问并返回响应代码 200。
我是这样做的:
public function testIndexActionCanBeAccessed()
{
$this->dispatch('/');
$this->assertResponseStatusCode(200);
}
但正如我之前所说,我的应用程序很大。所以要测试的页面很多。这些测试将花费很长时间。
有没有办法加快这些测试,或者这些测试不相关?
感谢帮助
最佳答案
我曾经有过这样的情况,一个很少用的页面因为改代码而坏掉了,管理层大声提示。只需使用 wget
请求该页面,就可以很容易地发现失败 - 这就是我当时作为常规工作添加到 Jenkins 的内容。那项工作之后从未失败过,日复一日、月复一月地愉快地请求两三页,持续了大约两年(然后页面被删除)。
如果您所处的情况没有更好的测试可用或实现起来太麻烦,那么测试 HTTP 状态代码将是一种有效的方法。但是正如您自己看到的那样,这很快就会变得太慢,因为您必须始终将整个系统作为一个大黑匣子进行测试。而且您需要在测试环境中运行的所有内容。
如果您现在有一个几乎无法测试的系统,使用诸如 Selenium 之类的东西远程控制应用程序的功能测试是快速检测故障的良好第一步。您可能希望并行执行这些测试,这需要适当的硬件能力,最有可能以多台机器的形式来执行 Selenium 客户端。
另一方面,您应该以获取更多单元测试为目标。这些将运行得非常快,因为您将注入(inject)模拟对象作为数据库连接等真实事物的替代品。如果后台没有数据库,测试将不会与网络通信,不会从磁盘写入和读取 - 模拟对象在内存中并几乎立即给出所需的答案。
结合使用,单元测试与一组选定的功能测试(可能还有一些集成测试将一些较大的部分放在一起并单独测试它们,但不是整个应用程序)将表明一切都按预期工作。
但仅通过功能测试,情况永远不会是这样。
关于PhpUnit 测试响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690715/