我需要为服务层编写压力测试。我开始使用Unitils,JUnit4和JUnitPerf,但没有运气。这就是我决定尝试TestNG的原因,但是在尝试以多线程模式运行测试时,会遇到会话关闭和事务的问题。
我正在使用以下框架堆栈:Spring,Hibernate,TestNG,Unitils
我需要一个非事务性的多线程测试。测试将调用服务层方法。每次通话都将开始新的交易。因此,有几个线程同时启动多个事务。
所以测试应该是这样的:
public class ServiceStressTest extends UnitilsTestNG
@SpringBeanByType
private MyService myService;
@DataSet
@Test
public void createTestData() {
}
@Test(invocationCount = 100, threadPoolSize = 50, dependsOnMethods = "createTestData")
public void test1() throws Exception {
myService.method1(); // Starts new transaction and commit it.
myService.method2(); // Starts new transaction and commit it.
}
}
该服务如下所示:
...
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
...
@Transactional
@Service
public class MyServiceImpl implements MyService {
public void method1(){
sessionFactory.getCurrentSession().save(smth); (update/delete)
}
public void method2(){
sessionFactory.getCurrentSession().save(smth); (update/delete)
}
}
如果我将 threadPoolSize 设置为1,一切正常。但每当我将其更改为多线程时,我都会遇到异常,即会话已关闭。
答案 0 :(得分:0)
这是我们需要了解的所有代码吗?听起来你可能有一个关闭会话的@BeforeMethod或@AfterMethod。
或者这是由我不熟悉的其他注释之一完成的(可能是@Transactional?)。