如何正确地对 Web 应用程序进行单元测试?

lau*_*ids 3 python integration-testing unit-testing flask

我正在自学后端和前端 Web 开发(如果重要的话,我正在使用 Flaks)并且在对我的应用程序进行单元测试时我需要一些指示。

我最关心的是这些不同的情况:

  1. 数据的内部一致性:这很简单 - 我的目标是 100% 的覆盖率,当涉及到登录过程等问题时,最常见的是检查每次请求后 Python 代码和数据库之间发生的所有事情是否仍然存在持续的。

  2. JSON 响应:我正在做的 atm 是get/post对我的应用程序上的每个调用执行测试请求,然后断言json 响应必须是this-and-that,但老实说,我不太欣赏这样做的价值- 也许是因为我的应用程序仍处于早期阶段?

    • 我应该继续测试每个请求的每个 json 响应吗?
    • 如果是,长期利益是什么?
  3. 外部 API:我在这里读到了相互矛盾的意见。假设我正在使用外部 API 来翻译一些文本:

    • 我应该只测试非常高级的 API,即查看我是否获得访问令牌,仅此而已?
    • 我应该测试返回的 json 是否符合我的预期?
    • 我应该不测试任何东西来加速我的测试套件并且不让它依赖于第三方 API?
  4. 输出的 HTML:我也迷失了这一点。假设我正在测试函数add_post()

    • 我是否应该在请求的页面上测试所需的帖子实际上是否存在?
    • 我开始检查行中是否存在字符串/html 标签 response.data,但后来我有点放弃了,因为 1)它需要很多时间和 2)我必须不断地重写测试,因为我正在更改应用程序所以经常。
    • 在这种情况下推荐的方法是什么?

谢谢你,抱歉我的冗长。我希望我说清楚了!

Dou*_*ams 5

其中大部分是个人意见,会因开发人员而异。

  1. 有大量用于单元测试的 Python 库 - 作为项目的开发人员,最好由您做出决定,以找到最适合您的工具集/构建过程的库。

  2. 这本身并不完全是“单元测试”,我认为它更像是集成测试。这并不是说这没有价值,它只是一项不同的任务,通常会使用不同的工具。对于这样的事情,从长远来看,测试会带来回报,因为您会意识到您的错误修复和功能添加不会影响您的端到端代码。如果你已经这样做了,我会继续。在进行重构以确保一致的功能时,这些类型的测试非常有价值。

  3. 我不会浪费时间测试 3rd 方 API。他们的工作是确保他们的产品运行可靠。如果您开始测试 3rd 方功能,您将一整天都在那里。使用 3rd 方 API 的一个重要原因是您不必测试它们。如果您发现您的应用程序因 3rd 方 API 而崩溃,那么可能是时候选择不同的 API 了。如果您的项目扩展到每次 API 失败时您都会损失数千美元的规模,那么届时您将面临一系列全新的问题(希望有资源来解决这些问题)。

  4. 一般来说,我不测试静态内容或 html。有一些工具(网络抓取工具)可以让您浏览自己的网站以获得一致的功能。如果您有时间,我个人会将其作为最后一个改进阶段的最后优先事项。大多数网站的外观和感觉经常变化,以至于编写测试是不值得的。外观也很容易手动测试,因为它非常直观。