0

在我们的应用程序中,我们通过 selenium 进行了很多功能测试。

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

默认情况下,像我们这样的大多数框架都建议他们的测试环境应该关闭缓存。为什么?

如果我们想尽可能地模拟生产,那么在执行功能测试时关闭服务器缓存可能有什么好处?可能存在只有在缓存开启时才能发现的错误,并且开启缓存也可能有助于加速我们的测试执行!

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

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

4

1 回答 1

0

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

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

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

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

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

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

集成测试应该遵循这个约定。

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

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

于 2013-09-25T15:46:30.723 回答