Flask应用中的单元测试与功能测试有何区别?

3

我正在阅读以下手册:http://flask.pocoo.org/docs/testing/

Flask具有模拟请求和检查结果的功能,整个应用程序都包含在测试中,包括数据库。

它与Python模块unittest相容。但是这对我来说似乎像是端到端或功能测试,其他工具如Selenium(带有Python绑定)也会出现在脑海中。

  1. 单元测试只测试完全隔离的特定模块/函数/类,并使用模拟外部资源(数据库、网络、文件)吗?

  2. 使用单元测试框架来驱动功能/端到端测试是否可行?

2个回答

3
Flask不会妨碍Python/JavaScript测试工具。例如,可以处理各种测试类型(我故意不想称之为单元/功能/验收/集成测试等,因为总有人会发现分类不正确):
- 测试简单和/或纯函数或类 - 在此基础上加入数据库(例如SQLAlchemy)(这通常比使用ORM/数据对象的模拟更实用、更有效,尽管速度较慢) - 请求级别的测试(测试视图/路由)-没有真正的HTTP请求,但目的相当接近 - 使用真实的HTTP请求进行浏览器测试,包括测试JavaScript模块
例如,使用pytest只需要一些conftest.py文件和固定装置,它们提供appdb、http服务器和Selenium驱动程序(在两个独立的线程中),等等。甚至可以通过替换(monkeypatching)commit方法来使用事务回滚,从而使某些测试更快。在测试期间,Flask可以通过注册仅限测试时间的蓝图来提供特殊的静态文件夹,以使用所选择的JavaScript特定测试框架测试JavaScript模块。
我猜其他通用测试框架(我不称之为单元测试!)可以使用更多或更少的样板代码和装置组织完成同样的工作。

1
Flask测试工具可以很好地服务于与HTTP通信相关的内容。
但是,一旦您创建了一个应用程序,在其中浏览器通过渲染部分输出,影响了可以和不能做的事情时,您应该选择像Selenium这样的解决方案。

但是使用单元测试框架来操作功能测试工具(如Selenium)呢?为什么这是被接受的? - artvolk
@artvolk 你的问题和我的回答都是关于 Flask 测试框架的。当然,你可以使用其他 unittest 工具并扩展它以使用 Selenium - 这些东西正在起作用。但是,Flask 测试工具集中没有包含这个(就我所知)。我认为适合这个目的非常好且有前途的其他工具是 behavebehaving,它们将 behave 的概念应用于 Web 应用程序测试(使用 selenium)。 - Jan Vlcinsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接