为什么缓存通常在测试环境中被禁用?

时间:2013-09-20 12:57:30

标签: caching testing selenium symfony1 automated-tests

在我们的应用程序中,我们通过硒进行了大量的功能测试。

我们理解,让运行测试的服务器尽可能与生产服务器尽可能相似是一种很好的做法,我们会尽可能地遵循它。
但这很难实现100%,因此我们为服务器提供了一个不同的设置文件,以便我们在暂存环境中进行一些更改(例如,由于需要额外的架构,我们选择关闭电子邮件)。
事实上,许多服务器框架都建议使用隔离的前端控制器(环境)进行测试,以便轻松实现这一微小变化。

默认情况下,大多数框架(如ours)建议他们的测试环境应关闭其缓存。 WHY吗

如果我们想尽可能地模拟生产,那么在执行功能测试时关闭服务器缓存的可能优势是什么?可能存在仅在缓存上找到的错误,并且启用它可能还有加速我们的测试执行的好处!

在开始新一批功能测试之前,我们是否只需确保清除缓存,就像我们在将新版本部署到生产环境时清除缓存一样?

我的一位同事建议,原因可能是缓存可能会产生误报,错误不是由严重实现的功能(这些测试的主要目标)引起的,而是缓存系统本身......但即使这些真的发生了(我想这取决于缓存的使用方式有多高级),为什么它们会被误报?

1 个答案:

答案 0 :(得分:0)

为了最好地回答这个问题,我将澄清一些观点。

(请注意,这是基于我的经验)

使用浏览器的集成测试通常是“Black Blox Tests”,这意味着它们是在不知道代码的情况下制作的。也就是说,不知道是否正在使用缓存。

这些测试通常基于在系统正常使用期间执行的某些任务来设计。但是,根据某些使用条件(主要是可重用性,关键性/重要性以及实施成本),选择这些任务进行自动化。所以大多数时候,我们不需要/不会测试缓存行为。

按照惯例,必须创建一个具有单一目的的测试(任何),并且具有较少的可能依赖性。为什么?

  • 当测试失败时,我们可以快速找到失败的来源。
  • 较小的测试更容易扩展,修复,删除......
  • 我们不会花太多时间,先调试测试代码 调试系统代码。

集成测试应遵循此惯例。

回答问题:
如果我们想检查一个特定的任务,我们必须尽可能地隔离它。
例如,如果我们要验证用户是否正确登录,我们必须删除cookie以确保它们不会影响结果(因为它们可能)。另一方面,如果我们想测试cookie,我们必须以某种方式使用不删除它们的环境。

所以,简而言之:
如果需要测试缓存行为,那么我们需要在可能的情况下创建一个“隔离”环境。
通常的集成测试目的是测试功能,因此框架默认值是禁用缓存。
这并不意味着我们不应该创建自己的环境来测试缓存行为。