首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何准备在内存替换中使用PostgreSQL的集成测试?

如何准备在内存替换中使用PostgreSQL的集成测试?
EN

Stack Overflow用户
提问于 2017-04-19 11:02:06
回答 4查看 6.1K关注 0票数 5

我已经了解到,在集成测试中使用实际的数据库会大大降低测试速度。因此,我必须使用内存中的数据库,这可能会大大提高集成测试的速度。

我正在使用Springboot进行应用程序开发。如何为测试目的配置PostgreSQL?内存数据库中是否有与PostgreSQL语法高度兼容的?

如果没有,我应该如何执行集成测试。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-09 02:15:13

我在真正的postgres上进行的一些db测试,每个测试花费10 my。我在每个测试中做多次提交。因此:

要覆盖postgres-本机特性,您需要相同的db (正如您注意到的,h2和其他内存中的db并不完全兼容)。postgres没有内存模式。对于功能测试,真正的数据库本身并不比任何内存中的数据库慢得多。不同之处通常在于启动时间(Postgres9.6是~4s)。但是,如果您的测试生命周期是智能的,并且可以将db的启动数减少到1或0(通过让开发db始终准备就绪),那么问题就不再明显了。

因此,获得真正的postgres并正确设置其生命周期。有一些工具可以帮助您解决一些问题:

  1. 测试容器将帮助您提供真正的db。
  2. 迪布尼特 -将帮助您清理测试之间的数据。 缺点:
代码语言:javascript
运行
复制
- a lot of work is required to create and maintain schema and data. especially when your project is in a intensive development stage.
- it's another abstraction layer so if suddenly you want to use some db feature that is unsupported by this tool, it may be difficult to test it

  1. 检出 -旨在为您提供完整、可使用和可扩展的生命周期(公开:我是一个创建者)。 缺点:
代码语言:javascript
运行
复制
- free only for small projects
- very young project

另一个步骤是在OS级别将db移动到内存。同样,第一次启动时间与需要加载的所有内容都是相似的。这里这里的一些起点

缺点:

  • 您团队中的每个开发人员都必须修改自己的本地环境。
  • 不能在OSes之间移植(如果您的团队具有异源环境)
票数 3
EN

Stack Overflow用户

发布于 2019-11-17 10:49:11

实际上,您可以获得一个真正的Postgres,以便在测试环境中表现良好。

我还建议您使用一个已被文档化的数据库,但是使用tmpfs来映射数据文件夹:

代码语言:javascript
运行
复制
docker run --name postgres95 -p 5432:5432 --tmpfs /var/lib/postgresql/data:rw -e POSTGRES_PASSWORD=admin -d postgres:9.5.6

这与“内存中”一样接近,你可以使用真实的东西。

我认为缓慢集成测试的一个主要问题不是数据库本身的性能,而是为每个测试设置它所需的时间。

我编写了一个小库,以帮助您快速将数据库恢复到“干净”状态。这样,您只需要运行一次代价高昂的数据库迁移,然后您就可以为每个测试快速恢复数据库。

我们在生产系统中使用它来在集成测试中获得4倍的加速:

https://github.com/ayedo/postgres-db-restore

票数 4
EN

Stack Overflow用户

发布于 2017-04-19 11:24:04

这个问题是征求意见的,但如下所述:

如果要测试将使用PostgreSQL的应用程序,则必须在测试中使用PostgreSQL。SQL方言和行为在不同的数据库管理系统之间变化太大了。

如果您使用的数据库足够小,可以安装到RAM中,那么您可以非常快地制作PostgreSQL,这样就可以进行只针对功能而不是整体性能的集成测试。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43493885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档