5

我正在开发一个 Django 网站。我使用 Selenium 进行功能测试(从最终用户的角度来看)并进行 TDD。我还对我的所有模型进行基本的单元测试。

我通常会编写一个新的功能 Selenium 测试(例如,用于提交表单并检查是否存在更新),然后编写一些代码以使测试通过。我创建了一个视图、一些表单、模型方法、模板等。毕竟,测试通过了,我继续进行下一个 Selenium 测试。

问题是这种方法感觉并不完全正确。也许我也应该写更多的单元测试,所以这里有一些问题

  1. 如果功能测试似乎可以完成任务,为什么我需要单元测试?请注意,我的 Selenium 测试是完全自动化的,并通过 Jenkins CI 进行管理,因此管理许多功能测试并在每次提交后运行它们是没有问题的。
  2. 我应该对应用程序的哪些部分进行单元测试?

PS Harry Percival 写的用 Python 进行测试驱动开发(可免费在线获得)建议您使用以下工作流程:

测试工作流程

4

1 回答 1

9

我现在同时使用 selenium 和单元测试,以下是我的一些想法:

单元测试比 selenium 场景测试运行得更快。单元测试比 selenium 场景测试更容易编写。单元测试比 selenium 场景测试更细化。单元测试没有 selenium 场景测试那么脆弱。

与设计为在不到一秒内运行的单元测试相比,我的 selenium 测试往往在几分钟内运行(它们有几页长)。我必须花费大量时间为特定的 selenium 测试设置环境然后运行它,然后检查整个环境是否处于正确状态。为了测试一个稍微不同的场景,比如说,如果有人为一个字段输入了一个错误的值会发生什么,我必须从头开始。

另一方面,单元测试,尤其是一些巧妙的模拟,不需要整个环境。为给定的方法或函数设置所需的输入,运行该方法或函数,然后测试输出。他们往往需要更少的“设置”才能使其正常运行。

单元测试也没有硒测试那么脆弱。硒测试不仅取决于您要测试的内容,还取决于网页本身的结构。对视图层的 HTML 进行修改,你就有机会打破很多 Selenium 测试。因为单元测试包含更多内容,所以它们较少依赖于许多其他因素,例如视图层的确切结构。

一般来说,我从单元测试开始,然后将我的 selenium 测试用于更广泛的测试,而不是为每个场景编写 selenium 测试。

于 2013-08-01T21:03:50.587 回答