我已经了解到,在集成测试中使用实际的数据库会大大降低测试速度。因此,我必须使用内存中的数据库,这可能会大大提高集成测试的速度。
我正在使用Springboot进行应用程序开发。如何为测试目的配置PostgreSQL?内存数据库中是否有与PostgreSQL语法高度兼容的?
如果没有,我应该如何执行集成测试。
发布于 2017-09-09 02:15:13
我在真正的postgres上进行的一些db测试,每个测试花费10 my。我在每个测试中做多次提交。因此:
要覆盖postgres-本机特性,您需要相同的db (正如您注意到的,h2和其他内存中的db并不完全兼容)。postgres没有内存模式。对于功能测试,真正的数据库本身并不比任何内存中的数据库慢得多。不同之处通常在于启动时间(Postgres9.6是~4s)。但是,如果您的测试生命周期是智能的,并且可以将db的启动数减少到1或0(通过让开发db始终准备就绪),那么问题就不再明显了。
因此,获得真正的postgres并正确设置其生命周期。有一些工具可以帮助您解决一些问题:
- 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
- free only for small projects
- very young project
另一个步骤是在OS级别将db移动到内存。同样,第一次启动时间与需要加载的所有内容都是相似的。这里和这里的一些起点
缺点:
发布于 2019-11-17 10:49:11
实际上,您可以获得一个真正的Postgres,以便在测试环境中表现良好。
我还建议您使用一个已被文档化的数据库,但是使用tmpfs来映射数据文件夹:
docker run --name postgres95 -p 5432:5432 --tmpfs /var/lib/postgresql/data:rw -e POSTGRES_PASSWORD=admin -d postgres:9.5.6
这与“内存中”一样接近,你可以使用真实的东西。
我认为缓慢集成测试的一个主要问题不是数据库本身的性能,而是为每个测试设置它所需的时间。
我编写了一个小库,以帮助您快速将数据库恢复到“干净”状态。这样,您只需要运行一次代价高昂的数据库迁移,然后您就可以为每个测试快速恢复数据库。
我们在生产系统中使用它来在集成测试中获得4倍的加速:
发布于 2017-04-19 11:24:04
这个问题是征求意见的,但如下所述:
如果要测试将使用PostgreSQL的应用程序,则必须在测试中使用PostgreSQL。SQL方言和行为在不同的数据库管理系统之间变化太大了。
如果您使用的数据库足够小,可以安装到RAM中,那么您可以非常快地制作PostgreSQL,这样就可以进行只针对功能而不是整体性能的集成测试。
https://stackoverflow.com/questions/43493885
复制相似问题