何时以及为什么我应该从功能性Selenium测试切换到Django Web应用程序中的单元测试?

Den*_*zov 5 testing django tdd selenium functional-testing

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

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

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

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

PS 由Harry Percival 撰写的伟大的书籍测试驱动开发(免费在线提供)表明您使用以下工作流程:

测试工作流程

Bri*_*ver 8

我现在正在使用selenium和单元测试,这里有一些我的想法:

单元测试比硒情景测试运行得更快.单元测试比硒场景测试更容易编写.单元测试比硒情景测试更精细.单元测试比硒情景测试更不易碎.

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

另一方面,单元测试,尤其是一些聪明的模拟,不需要整个环境.为给定的方法或函数设置所需的输入,运行方法或函数,然后测试输出.他们往往没有太多的"设置"来使其正常运行.

单元测试也比硒测试脆弱得多.硒测试不仅取决于您正在测试的内容,还取决于网页本身的结构.对视图层的HTML进行修改,您就有可能破坏很多Selenium测试.由于单元测试更受限制,因此它们更少依赖于许多其他因素,例如视图层的确切结构.

一般来说,我从单元测试开始,然后使用我的硒测试进行更广泛的测试,而不是为每个场景编写硒测试.