Java 测试后清理数据

Java 测试后清理数据,java,database,testing,automated-tests,serenity-bdd,Java,Database,Testing,Automated Tests,Serenity Bdd,在测试过程中,我们都会在不同的env级别上创建测试(虚拟)数据,比如(dev、QA、集群&有时是staging)。当你有少量的测试时,一切都很好,但是当你有大量的测试时,当它们像我的例子一样并行执行时,测试会产生干扰,因为它们使用相同的数据 因此,我的目标是隔离每个测试,使它们独立于其他测试。我计划为每个测试创建唯一的数据,每个测试都将使用自己的数据进行操作。 问题是如何清理在测试执行期间创建的所有数据,以便每次执行测试时都能创建相同的数据?有没有其他人经历过这样的案例并找到了很好的解决方案?

在测试过程中,我们都会在不同的env级别上创建测试(虚拟)数据,比如(dev、QA、集群&有时是staging)。当你有少量的测试时,一切都很好,但是当你有大量的测试时,当它们像我的例子一样并行执行时,测试会产生干扰,因为它们使用相同的数据

因此,我的目标是隔离每个测试,使它们独立于其他测试。我计划为每个测试创建唯一的数据,每个测试都将使用自己的数据进行操作。

问题是如何清理在测试执行期间创建的所有数据,以便每次执行测试时都能创建相同的数据?有没有其他人经历过这样的案例并找到了很好的解决方案?

我的测试框架是基于Java构建的,使用Cucumber和Serenity BDD以及Restassed(用于测试Web UI和API)


p、 我现在想到了一个解决方案,那就是跟踪(比如使用会话变量)我创建的每个对象,无论是使用Web UI还是API,以及每个测试的最后一步(通过使用“@After”方法)使用API获取我创建的每个对象的ID,然后执行删除Rest请求来删除这些项目,这也会将它们从数据库中删除。

我不知道这对您来说有多可行,但是使用h2这样的临时数据库,如果我诚实的话,我不知道serenity是如何工作的,此外,如果需要创建文件,请使用创建临时文件的功能,如果不在执行该方法之后,请使用擦除功能。这取决于您期望的解决方案和您想要的测试类型。对于单元测试,我将使用Fakes,并通过简单的Java结构(如列表、集合)实现数据库通信层。对于集成测试,我将考虑使用@ DMyTrasCuxSkyi自动化项目在后端(BSL代码)之外,因此我既不编写单元也不进行集成测试。目前我只编写E2E API和UI测试。@在我直接使用API的情况下,如何使用临时数据库?您考虑过使用docker吗?