前端测试:测试的内容和方法,以及使用的工具?

DJ *_*rth 52 testing frontend ui-automation jasmine casperjs

我已经为我的Ruby代码编写了一段时间的测试,但作为一个前端开发人员,我显然很有兴趣将它带入我为前端代码编写的代码中.我一直在玩的有很多不同的选择:

人们用于测试的是什么?还有人们测试的是什么?只是JavaScript?链接?形式?硬编码的内容?

任何想法将不胜感激.

小智 83

几个月前我遇到了同样的问题,在与许多开发人员交谈并做了大量研究之后,这就是我发现的.您应该对JavaScript进行单元测试,编写一小组UI集成测试并避免使用记录和回放测试工具.让我更详细地解释一下.

首先,考虑一下 测试金字塔.这是Mike Cohn创建的一个有趣的类比,它将帮助您决定应该进行哪种测试.在金字塔的底部是单元测试,它们是坚固的并提供快速反馈.这些应该是您的测试策略的基础,因此占据金字塔的最大部分.在顶部,您有UI测试.这些是直接与您的UI交互的测试,例如Selenium.虽然这些测试可能会帮助您找到错误,但它们更昂贵且反馈速度非常慢.此外,根据您使用的工具,它们会变得非常脆弱,您最终会花费更多时间来维护这些测试,而不是编写实际的生产代码.中间的服务层包括不需要UI的集成测试.例如,在Rails中,

现在,回到你的问题.我发现我可以大大减少我的项目中的错误数量,这是一个使用大量JavaScript编写的Spring Roo(Java)Web应用程序,只需为JS编写足够的单元测试.在我的应用程序中,有很多用JS编写的逻辑,这就是我在这里测试的那种东西.我不关心页面的实际外观或动画是否应该播放.我测试我在JS中编写的模块是否会执行预期的逻辑,如果元素类被正确分配并且错误条件得到妥善处理.对于这些测试,我一直在使用Jasmine.这是一个很棒的工具.它非常容易学习并具有很好的模拟功能,称为间谍.茉莉的jQuery如果您使用jQuery,则会添加更多功能.特别是,它允许您指定夹具,它们是HTML代码的片段,因此您不必手动模拟DOM.我已将此工具与maven集成,这些测试是我的CI策略的一部分.

你必须小心UI测试,特别是如果你依赖像Selenium这样的记录/回放工具.由于UI经常变化,这些测试会不断发生,您将花费大量时间查明测试是否真的失败或者它们是否刚刚过时.此外,它们不会增加单元测试的价值.由于他们需要一个集成的环境来运行,所以你最常喜欢在完成开发之后运行它们,而修复事物的成本更高.

但是,对于烟雾/回归测试,UI测试非常有用.如果你需要自动化这些,那么你应该注意一些危险.写下你的测试,不要记录它们.记录的测试通常依赖于自动生成的xpath,这些xpath会因您对代码所做的每一点改动而中断.我相信Cucumber是编写这些测试的好框架,您可以将它与WebDriver一起使用来自动化浏览器交互.代码考虑测试.在UI测试中,您必须使元素更容易找到,因此您不必依赖复杂的xpath.添加class和id元素通常不会频繁出现.不要为每个小角落案件编写测试.这些测试编写起来很昂贵,而且运行时间太长.您应该专注于探索大部分功能的案例.如果您在此级别编写太多测试,则可能会测试您之前在单元测试中测试的相同功能(假设您已编写它们).

在我目前的项目中,我使用Spock和Geb编写UI测试.我发现这些工具很棒.它们是用Groovy编写的,它更适合我的Java项目.