如何正确单元测试Web应用程序?

时间:2014-05-24 20:07:09

标签: python unit-testing flask integration-testing

我正在教自己后端和前端Web开发(如果重要的话我正在使用Flaks)并且我需要一些关于单元测试我的应用程序的指示。

我主要关注这些不同的情况:

  1. 数据的内部一致性:这很简单 - 当涉及到登录程序等问题时,我的目标是100%覆盖率,最常见的是检查所有内容在每个请求保持一致后,在python代码和数据库之间发生。

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

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

    • 我应该只测试非常高级别的API,即看看我是否获得了访问令牌,那就是它?
    • 我应该测试返回的json是否符合预期?
    • 我应该测试什么来加速我的测试套件并且不依赖于第三方API吗?
  4. 输出的HTML :我也迷失了这个。假设我正在测试函数 add_post()

    • 我应该在请求后的页面上测试所需的帖子实际上在那里吗?
    • 我开始检查行response.data中是否存在字符串/ html标签,但后来我放弃了因为1)它需要花费很多时间而2)我必须不断重写测试因为我经常更换应用程序。
    • 在这种情况下推荐的方法是什么?
  5. 谢谢你,并且对于冗长而感到抱歉。我希望自己清楚明白!

1 个答案:

答案 0 :(得分:4)

这大多是个人意见,因开发人员而异。

  1. 有大量用于单元测试的python库 - 作为项目开发人员,最好留给您一个最适合您的工具集/构建过程的决策。

  2. 这不是完全单位测试'本身,我认为它更像集成测试。这并不是说这不值钱,它只是一个不同的任务,并且经常使用不同的工具。对于类似这样的事情,从长远来看,测试会得到回报,因为您可以清楚地知道您的错误修复和功能添加不会影响您的端到端代码。如果您已经这样做了,我会继续。在重构道路以确保一致的功能时,这些类型的测试非常有价值。

  3. 我不会浪费时间测试第三方API。他们的工作是确保他们的产品行为可靠。如果您开始测试第三方功能,您将整天待在那里。使用第三方API的一个重要原因是您不必测试它们。如果您发现您的应用因第三方API而中断,那么可能是时候选择不同的API了。如果您的项目规模扩大到每次API失败时您都会损失数千美元,那么您当时就会有一个全新的问题要处理(并希望有资源来解决这些问题)。

  4. 一般情况下,我不会测试静态内容或HTML。有一些工具(网络抓取工具),可以让你自己的网站,以获得一致的功能。如果你有时间,我个人会把这作为最后阶段的最后优先考虑。大多数网站的外观和感觉经常变化,以至于编写测试并不值得。外观也很容易手动测试,因为它非常直观。