# Performance Testing ## Навигация - [🏠 Главная страница курса](../../../README.md) - [📚 Модуль 10](../README.md) --- ## Типы тестов производительности ### 1. Load Testing ```java // Load тестирование с JMeter @Component public class LoadTestRunner { public void runLoadTest() { // Настройка JMeter теста JMeterEngine engine = new StandardJMeterEngine(); // Загрузка тестового плана HashTree testPlanTree = new HashTree(); TestPlan testPlan = new TestPlan(); testPlan.setName("User Service Load Test"); // Настройка потока ThreadGroup threadGroup = new ThreadGroup(); threadGroup.setName("Users"); threadGroup.setNumThreads(100); threadGroup.setRampUp(60); threadGroup.setDuration(300); // 5 минут // Настройка HTTP запроса HTTPSamplerProxy httpSampler = new HTTPSamplerProxy(); httpSampler.setDomain("localhost"); httpSampler.setPort(8080); httpSampler.setPath("/api/users"); httpSampler.setMethod("GET"); // Добавление элементов в тест testPlanTree.add(testPlan); testPlanTree.add(testPlan, threadGroup); testPlanTree.add(threadGroup, httpSampler); // Запуск теста engine.configure(testPlanTree); engine.run(); } } ``` ### 2. Stress Testing ```java // Stress тестирование @Service public class StressTestService { @Autowired private UserService userService; public void runStressTest() { int numberOfThreads = 200; int requestsPerThread = 1000; ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads); CountDownLatch latch = new CountDownLatch(numberOfThreads); for (int i = 0; i < numberOfThreads; i++) { executor.submit(() -> { try { for (int j = 0; j < requestsPerThread; j++) { // Выполняем запрос userService.getUser((long) (Math.random() * 1000)); // Небольшая задержка Thread.sleep(10); } } catch (Exception e) { log.error("Stress test error", e); } finally { latch.countDown(); } }); } try { latch.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } executor.shutdown(); } } ``` ### 3. Endurance Testing ```java // Endurance тестирование @Component public class EnduranceTestRunner { @Autowired private UserService userService; @Scheduled(fixedRate = 1000) // каждую секунду public void runEnduranceTest() { try { // Выполняем запрос userService.getUser(1L); // Логируем метрики log.info("Endurance test - request completed"); } catch (Exception e) { log.error("Endurance test error", e); } } } ``` ## Автоматизация тестов производительности ### 1. Automated Performance Tests ```java // Автоматизированные performance тесты @SpringBootTest @TestPropertySource(properties = { "spring.datasource.url=jdbc:h2:mem:testdb", "spring.jpa.hibernate.ddl-auto=create-drop" }) public class PerformanceTestSuite { @Autowired private UserService userService; @Test public void testUserServicePerformance() { // Подготовка данных List users = createTestUsers(1000); // Измерение времени выполнения long startTime = System.currentTimeMillis(); for (User user : users) { userService.createUser(user); } long endTime = System.currentTimeMillis(); long duration = endTime - startTime; // Проверка производительности assertThat(duration).isLessThan(5000); // менее 5 секунд // Проверка пропускной способности double throughput = (double) users.size() / duration * 1000; assertThat(throughput).isGreaterThan(100); // более 100 RPS } @Test public void testDatabaseQueryPerformance() { // Подготовка данных createTestUsers(10000); // Измерение времени выполнения запроса long startTime = System.currentTimeMillis(); List users = userService.findUsersByName("Test"); long endTime = System.currentTimeMillis(); long duration = endTime - startTime; // Проверка производительности assertThat(duration).isLessThan(1000); // менее 1 секунды } } ```