持续测试生产环境是有意义的
when testing production environment continuously makes sense
假设我有一堆涵盖我的应用程序的单元测试、集成测试和 e2e 测试。让这些连续 运行 对抗产品是否有意义,例如每 10 分钟?
我认为不,原因如下:
每次产品部署后,我的测试已经 运行。如果他们通过了并且之后没有代码更改,他们应该继续通过。因此,此后对其进行测试没有意义。
我真正想持续测试的是我的基础架构——它仍然是 运行 吗?在这种情况下,运行 每 10 分钟进行一次 API 集成测试以检查我的 API 是否仍在工作是有意义的。所以我正在处理我的测试套件的一个子集——测试我的基础设施可用性(集成+e2e)的测试套件与仅测试单个代码(单元测试)的测试套件。所以在实践中,我是否会有单独的测试套件来测试产品正常运行时间而不是用于测试 pre/post 部署的套件?
此类 "redundant" 验证(它们也可以包括构建,顺便说一句,不仅包括测试)提供额外的数据点,提高实际生产过程的监控精度。
根据生产环境的复杂性,即使是简单的 "is it up/running?" 问题也可能没有简单的答案,subset/shortcut 版本的验证可能也没有削减它 - 你只会涵盖那些版本,而不是实际的生产版本。
例如,仅仅因为构建服务器已启动并不意味着它也能够成功构建产品,您需要检查构建本身的每个方面:每个工具、存储、依赖项、OS 资源等的可用性。对于复杂的构建,只执行构建本身可能比管理代码 可靠地 检查构建是否更简单是可行的 ;)
有 2 个生产过程属性可以从更精确的监控中获益(subset/shortcut 验证也不适合):
- reliability/stability - 间歇性故障的类型、发生率和根本原因(是的,那些令人讨厌的意外可能会影响是否满足发布日期)
- 性能 - 各种验证的avg/min/max持续时间;如果验证在涉及 duration/resources 方面代价高昂,则尤为重要;规划、预算、生产 ETA 等可能需要趋势
如果这些中的任何一个适用于或具有可接受的 cost/benefit 比率,请不要拒绝,但它们对于大多数非常 large/complex sw 项目来说绝对重要。
假设我有一堆涵盖我的应用程序的单元测试、集成测试和 e2e 测试。让这些连续 运行 对抗产品是否有意义,例如每 10 分钟?
我认为不,原因如下: 每次产品部署后,我的测试已经 运行。如果他们通过了并且之后没有代码更改,他们应该继续通过。因此,此后对其进行测试没有意义。
我真正想持续测试的是我的基础架构——它仍然是 运行 吗?在这种情况下,运行 每 10 分钟进行一次 API 集成测试以检查我的 API 是否仍在工作是有意义的。所以我正在处理我的测试套件的一个子集——测试我的基础设施可用性(集成+e2e)的测试套件与仅测试单个代码(单元测试)的测试套件。所以在实践中,我是否会有单独的测试套件来测试产品正常运行时间而不是用于测试 pre/post 部署的套件?
此类 "redundant" 验证(它们也可以包括构建,顺便说一句,不仅包括测试)提供额外的数据点,提高实际生产过程的监控精度。
根据生产环境的复杂性,即使是简单的 "is it up/running?" 问题也可能没有简单的答案,subset/shortcut 版本的验证可能也没有削减它 - 你只会涵盖那些版本,而不是实际的生产版本。
例如,仅仅因为构建服务器已启动并不意味着它也能够成功构建产品,您需要检查构建本身的每个方面:每个工具、存储、依赖项、OS 资源等的可用性。对于复杂的构建,只执行构建本身可能比管理代码 可靠地 检查构建是否更简单是可行的 ;)
有 2 个生产过程属性可以从更精确的监控中获益(subset/shortcut 验证也不适合):
- reliability/stability - 间歇性故障的类型、发生率和根本原因(是的,那些令人讨厌的意外可能会影响是否满足发布日期)
- 性能 - 各种验证的avg/min/max持续时间;如果验证在涉及 duration/resources 方面代价高昂,则尤为重要;规划、预算、生产 ETA 等可能需要趋势
如果这些中的任何一个适用于或具有可接受的 cost/benefit 比率,请不要拒绝,但它们对于大多数非常 large/complex sw 项目来说绝对重要。