我正在开发 Django 网站。我使用 Selenium 进行功能测试(从最终用户的角度来看)并进行 TDD。我还对我的所有模型进行基本的单元测试。
我通常会编写一个新的功能性 Selenium 测试(例如,用于提交表单并检查更新是否存在)然后编写一些大量代码以使测试通过。我创建了一个 View 、一些表单、模型方法、模板等。毕竟,测试通过了,我继续进行下一个 Selenium 测试。
问题是这种方法感觉并不完全正确。也许我也应该编写更多的单元测试,所以这里是问题:
- 如果功能测试似乎可以完成任务,为什么还需要单元测试?请注意,我的 Selenium 测试是完全自动化的,并通过 Jenkins CI 进行管理,因此管理许多功能测试并在每次提交后运行它们没有问题。
- 我应该对应用的哪些部分进行单元测试?
附言 好书Test-Driven Development with Python Harry Percival(可免费在线获取)建议您使用以下工作流程:
最佳答案
我现在同时使用 selenium 和单元测试,以下是我的一些想法:
单元测试比 selenium 场景测试运行得更快。 单元测试比 selenium 场景测试更容易编写。 单元测试比 selenium 场景测试更精细。 单元测试没有 selenium 场景测试那么脆弱。
与设计为在不到一秒内运行的单元测试相比,我的 selenium 测试往往会在几分钟内运行(它们有几页长)。我必须花很多时间为特定的 selenium 测试设置环境然后运行它,然后检查整个环境是否处于正确的状态。为了测试稍微不同的场景,例如,如果有人为一个字段输入了错误的值会发生什么,我必须从头开始。
另一方面,单元测试,尤其是一些巧妙的模拟,不需要整个环境。为给定的方法或函数设置所需的输入,运行方法或函数,然后测试输出。他们往往需要更少的“设置”来使其正常运行。
单元测试也比 selenium 测试更不脆弱。 selenium 测试不仅非常依赖于您正在测试的内容,而且还依赖于网页本身的结构。对 View 层的 HTML 进行修改,您就有机会破坏许多 Selenium 测试。因为单元测试包含更多内容,所以它们较少依赖许多其他因素,例如 View 层的确切结构。
一般来说,我从单元测试开始,然后使用我的 selenium 测试进行更广泛的测试,而不是为每个场景编写 selenium 测试。
关于django - 何时以及为什么我应该在 Django 网络应用程序中从功能性 Selenium 测试切换到单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003592/