如何使使用数据库的测试更快?
How making tests which using database faster?
我正在为我的公司制作一些概念。目标是使我们的集成测试更快。
特别是使用 and/or 操作数据库的集成测试。我将测试分为 2 个类别和目录:
- 单元测试
- Integration-Tests(这里是所有接触数据库的testclasses)
我们使用 Postgresql 9.3 版、Liquibase、Visualstudio 和 MSTest。
我们的测试执行步骤如下:
- 运行 测试(正在使用的项目)
- 创建数据库
- 填充数据库如果class中有一些方法需要数据库
问题:
我们在每个方法是 运行 TestInitiliaze 之前填充我们的数据库,如下所示:
[TestInitiliaze]
public void TestInit(){
Databaseclass.FillDatabase();
}
我们有 450 个测试正在使用该数据库。近50个测试操作数据库。
其他测试使用数据库读取测试数据,无需操作。
测试是混合的。这意味着我们有一个 class 测试正在操纵数据,而一些测试只读取数据。
目标:
使这个测试更快。我有一个概念在我们的项目中不起作用。使用数据库快照。
我的想法:
- 运行 测试
- 创建数据库
- 填充数据库
- 数据库快照
[TestInitiliaze]
public void testinitiliaze(){
DatabaseClass.revertToSnapshot()
}
- 或ClassInitiliaze:
DatabaseClass.revertToSnapshot()
我试着再做一个概念。但它也不适用于我们的 Postgresql 版本。
嵌套事务。
有人有其他可行的替代方案吗?
此致
哈杰姆
一种替代方法是编写集成测试,这样您就不需要不断地重新初始化数据库。这就是我们所做的。并非每个测试都需要 "fresh" 数据库。随机化名称之类的东西(即客户名称必须是唯一的 - 添加随机数),我们设法拥有 100% 独立的集成测试设置。如果这不可行,您可以 运行 分两个阶段进行集成测试(不是全部) - 首先是在开始时初始化 ONCE 的那些,然后是根据需要重新初始化数据库的其他阶段。
我正在为我的公司制作一些概念。目标是使我们的集成测试更快。 特别是使用 and/or 操作数据库的集成测试。我将测试分为 2 个类别和目录:
- 单元测试
- Integration-Tests(这里是所有接触数据库的testclasses)
我们使用 Postgresql 9.3 版、Liquibase、Visualstudio 和 MSTest。
我们的测试执行步骤如下:
- 运行 测试(正在使用的项目)
- 创建数据库
- 填充数据库如果class中有一些方法需要数据库
问题:
我们在每个方法是 运行 TestInitiliaze 之前填充我们的数据库,如下所示:
[TestInitiliaze] public void TestInit(){ Databaseclass.FillDatabase(); }
我们有 450 个测试正在使用该数据库。近50个测试操作数据库。
其他测试使用数据库读取测试数据,无需操作。
测试是混合的。这意味着我们有一个 class 测试正在操纵数据,而一些测试只读取数据。
目标: 使这个测试更快。我有一个概念在我们的项目中不起作用。使用数据库快照。 我的想法:
- 运行 测试
- 创建数据库
- 填充数据库
- 数据库快照
[TestInitiliaze] public void testinitiliaze(){ DatabaseClass.revertToSnapshot() }
- 或ClassInitiliaze:
DatabaseClass.revertToSnapshot()
- 或ClassInitiliaze:
我试着再做一个概念。但它也不适用于我们的 Postgresql 版本。 嵌套事务。
有人有其他可行的替代方案吗?
此致 哈杰姆
一种替代方法是编写集成测试,这样您就不需要不断地重新初始化数据库。这就是我们所做的。并非每个测试都需要 "fresh" 数据库。随机化名称之类的东西(即客户名称必须是唯一的 - 添加随机数),我们设法拥有 100% 独立的集成测试设置。如果这不可行,您可以 运行 分两个阶段进行集成测试(不是全部) - 首先是在开始时初始化 ONCE 的那些,然后是根据需要重新初始化数据库的其他阶段。