【问题标题】:Should you end-to-end test code in production? If yes, how do you avoid corrupting database? [closed]你应该在生产中端到端测试代码吗?如果是,您如何避免损坏数据库? [关闭]
【发布时间】:2018-06-22 08:06:39
【问题描述】:

上下文:

假设您有 2 个分支,开发分支和生产分支。 您对 dev 分支进行单元测试,它通过,然后将 dev 分支与生产分支合并。 (我假设从服务器端开始的端到端测试。)

问题

您是否应该对生产分支运行端到端测试,以确保代码也可以在生产环境中运行?

如果答案是肯定的,那么如何避免破坏生产分支中的数据库状态?例如,我不认为有一天有人可能会编写一个错误的测试来创建/更新/删除不应该的东西。

如果答案是否定的,您如何知道您的代码是否确实在生产环境中工作?我猜是简单的烟雾测试?

编辑

我之前误用了单元测试这个词。我将其替换为端到端测试。

【问题讨论】:

  • 好吧,如果它是真正的单元测试,那么测试应该完全独立于数据库,甚至不需要访问数据库即可运行
  • 我既不会在生产环境中进行测试,也不会期望单元测试会写入数据库。
  • 我所有的单元测试都可以在我的本地机器上运行,甚至不需要互联网连接
  • 您可能将单元测试与集成测试混淆了。单元测试应该是在不需要任何外部依赖项(如数据库或 API)的情况下测试功能 - 如果需要,可以模拟这些功能,以便您可以测试组件对不同响应的反应。另一方面,集成测试将允许您与实际数据库端到端运行。一种方法是拥有一个单独的环境,其中部署了所有依赖项,然后首先从那里部署生产分支的代码。

标签: unit-testing production-environment dev-to-production


【解决方案1】:

单元测试不会修改数据库状态,所以这无关紧要。如果您正在进行端到端测试,那么这是可能的,但是适当的数据库权限和访问控制应该很容易防止这种情况发生。

您应该能够在远离生产服务器很远的地方运行所有测试。除非测试是专门为此设计的(即健康检查),否则切勿直接在服务器上运行测试

【讨论】:

  • Never run tests on the server directly 虽然这是个好建议,但遗憾的是,大多数公司都没有实践这个建议:(
  • 好吧,我误用了“单元测试”这个词。如果您不直接在服务器上运行测试,您如何保证代码在生产环境中工作? (例如,可能缺少一个全局库,这实际上会破坏在测试环境中通过的一些测试。)
  • @Kacy 你向网神祈祷
  • @Kacy:你尽力了。如果你失败了,你适应并下次再试一次,为出错的确切事情做准备。在某些时候,您要么没有可能出错的事情,要么没有尝试的机会。 (编辑:如果您无法克隆生产环境,那么您应该继续努力)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2021-03-04
  • 2011-12-15
相关资源
最近更新 更多