我有一个Spring应用程序,需要测试所有东西。我遇到了这个问题。
当我启动我的测试(例如来自Gitlab管道)时,测试从一开始就运行得很快。但是测试越多,测试的速度就越慢。为另一个测试类加载Spring应用程序上下文的速度越来越慢。我还发现,在测试期间,数据库连接保持活动的,应用程序在所有测试都完成之后释放它们--尽管大多数类很久以前就已经完成了。有没有人遇到过这个问题,并找到了解决办法?
我在测试中使用的注释:
// Service test class example
@ExtendWith(SpringExtension.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import({SomeService.class})
@Sql("classpath:testdata/some_test_data.sql")
public class SomeServiceTest {// Controller test class example
@ComponentScan(basePackages = {"some.package.with.tests"})
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@SpringBootTest
@Transactional
@Sql("classpath:testdata/some_test_data.sql")
public class SomeControllerTest {发布于 2020-09-16 13:36:09
我用两个步骤解决了这个问题:
步骤1: DirtiesContext注释-在完成来自特定类的测试后发布的DB连接,所以如果我设置了maximum-pool-size: 5,它现在将只使用这5个连接。
用法:
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)步骤2:增加测试内存,-我还必须增加单元测试的内存,这样就不会得到OutOfMemoryException。MAVEN_OPTS不适合我,所以我不得不在pom.xml中使用并配置插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<argLine>-Xmx2048m</argLine>
</configuration>
</plugin>在此之后,我的测试管道时间要快得多。从之前的20分钟到30分钟,现在花了8分钟.
“非常感谢”安迪·威尔金森给出的好建议。
编辑!之后,我的测试在Sonar上得到了0%的报道。经过一段时间的搜索,我也找到了解决办法:
步骤3:定义属性sonar.surefire.argLine
<properties>
...
<sonar.surefire.argLine>-Xmx2048m</sonar.surefire.argLine>
</properties>步骤4:重写插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<argLine>@{argLine} ${sonar.surefire.argLine}</argLine>
</configuration>
</plugin>这里的问题是,jacoco插件需要访问surefire的argLine,但是在手动添加它之后,它就不可能了。这就是为什么我必须添加@{argLine}的原因,jacoco使用了@{argLine}。${sonar.surefire.argLine}只是为了更好的代码外观,所以我可以与其他定义的属性进行-Xmx2048m争论。
https://stackoverflow.com/questions/63843274
复制相似问题