从空白开始:使用 PostgreSQL 进行集成测试

主要观点:

  • 公司在生产中使用 PostgreSQL 多年,随着数据库增长,需寻找管理方法,文中介绍了在 Carbon Health 集成测试管道中解决瓶颈的方法。
  • 单体应用存在代码库大、构建时间长等问题,需在 CI/CD 和测试环境中进行优化,集成测试虽能覆盖端到端流程,但数据依赖等问题导致编写困难。
  • 探讨了几种提高集成测试速度和隔离性的方法,如用事务包裹每个测试、为每个测试创建新数据库实例、清理所有表等,最终提出使用 PL/pgSQL 自动清理测试间使用的表的解决方案。
  • 该解决方案将 CI/CD 时间缩短了 30%,改善了开发者体验,未来将探索支持常量行和设置场景等工作,并开源了该工具。

关键信息:

  • 公司技术栈包括 30 多个微服务支持的单体服务器,数据库为 PostgreSQL,有 500 多张表和超过 10TB 数据,6 个开发团队。
  • 集成测试用于检查系统不同部分协同工作情况,虽优于单元测试但编写困难,数据依赖等导致初始化麻烦和状态泄漏。
  • 几种尝试的方法及其缺点,如用事务包裹测试不可行,为每个测试创建新数据库实例初始化慢,清理所有表的方法存在问题等。
  • 最终解决方案通过创建test_access表存储使用的表,使用触发器监控修改的表,创建函数清理访问过的表,并在测试中嵌入该功能。

重要细节:

  • 使用CREATE TABLE IF NOT EXISTS test_access创建存储访问表的表结构。
  • add_table_to_accessed_list函数用于向访问列表中添加表名。
  • setup_access_triggers函数用于设置访问触发器。
  • delete_from_accessed_tables函数用于删除访问过的表。
  • CleanDBBetweenTests trait 在测试前后进行表清理操作。
  • 该方案使 CI/CD 时间缩短 30%,改善开发者体验,未来将探索更多优化策略并开源工具。
阅读 12
0 条评论