【问题标题】:Unit testing vs functional testing in Flask applications?Flask 应用程序中的单元测试与功能测试?
【发布时间】:2014-05-15 08:42:45
【问题描述】:

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

Flask 具有模拟请求和检查结果的功能。整个应用程序都经过测试,包括 DB。

它与 Python 模块 unittest 配合得很好。但在我看来,这就像端到端或功能测试以及 Selenium(带有 Python 绑定)等其他工具。

  1. 单元测试是否只是测试完全隔离的特定模块/功能/类 模拟外部资源(数据库、网络、文件)?

  2. 可以用单元测试框架来驱动吗 功能\端到端测试?

【问题讨论】:

    标签: python unit-testing selenium


    【解决方案1】:

    Flask 不会妨碍 Python/JavaScript 测试工具。例如,可以处理各种测试(我故意不想将它们命名为单元/功能/验收/集成测试,因为总会有人发现分类错误)

    • 测试简单和/或纯函数或类
    • 作为以前的 plus 数据库(例如,SQLAlchemy)(这通常比对 ORM/数据对象使用模拟更实用和有效,尽管速度较慢)
    • 请求级测试(用于测试视图/路由) - 没有真正的 HTTP 请求,但非常接近目的
    • 使用真实 HTTP 请求进行浏览器内测试,包括测试 JavaScript 模块

    例如,使用 pytest 只需 conftest.py 文件和固定装置,它们提供 appdb、http 服务器和 Selenium 驱动程序(在两个单独的线程中)等。甚至可以使通过使用事务回滚而不是通过替换 (monkeypatching) commit 方法来重新制作数据库夹具,某些测试更快。在测试期间,Flask 可以提供特殊的静态文件夹(通过注册仅测试时的蓝图)来使用所选的 JavaScript 特定测试框架来测试 JavaScript 模块。

    我猜,其他通用测试框架(我不称它们为单元测试!)可以或多或少地使用样板代码和夹具组织。

    【讨论】:

      【解决方案2】:

      只要与 http 通信相关,Flask 测试工具就能很好地为您服务。

      一旦您创建了一个应用程序,其中浏览器通过渲染部分输出发挥重要作用,影响可以做什么和不可以做什么,您应该选择像 Selenium 这样的解决方案。

      【讨论】:

      • 但是使用单元测试框架来操作功能测试工具(如 Selenium)呢?为什么会被接受?
      • @artvolk 你的问题和我的回答都是关于 Flask 测试框架的。当然,您可以使用其他单元测试的东西并将其扩展为使用 Selenium - 这些东西正在工作。但这不包含在 Flask 测试工具集中(据我了解)。其他在我看来非常好的和有前途的工具是behavebehaving,它们将behave 概念应用于网络应用程序测试(使用硒)
      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多