Как написать стресс-тест сервисного уровня с TestNG? - PullRequest
0 голосов
/ 05 апреля 2011

Мне нужно написать стресс-тест для моего сервисного уровня.Я начал делать это с 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, все будет отлично.Но всякий раз, когда я изменяю его на многопоточный, я получаю исключение, которое говорит, что сессия была закрыта.

1 Ответ

0 голосов
/ 05 апреля 2011

Это весь код, который нам нужно знать? Похоже, у вас может быть @BeforeMethod или @AfterMethod, который закрывает сессию.

Или это делается одной из других аннотаций, с которыми я не знаком (возможно, @Transactional?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...