From 8e464bfbdb644aff4886484a8bf93255810aa03b Mon Sep 17 00:00:00 2001 From: kwonhee1 Date: Thu, 2 Oct 2025 15:49:08 +0900 Subject: [PATCH] feat query test profile --- src/main/resources/application.yml | 16 +++- .../demo/query/make/MakeTestQuery.java | 41 +++++++++++ .../demo/query/projectlist/MyPage.java | 73 +++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 src/test/java/NextLevel/demo/query/make/MakeTestQuery.java create mode 100644 src/test/java/NextLevel/demo/query/projectlist/MyPage.java diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f563300..a888db6 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -122,4 +122,18 @@ DOMAIN: nextlevel.r-e.kr FRONT: baseUrl: - https://nextlevel.r-e.kr \ No newline at end of file + https://nextlevel.r-e.kr + +--- +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://${DB_URL}_test + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + config: + activate: + on-profile: query-test + jpa: + hibernate: + ddl-auto: create # 무조건 새로 생성함 \ No newline at end of file diff --git a/src/test/java/NextLevel/demo/query/make/MakeTestQuery.java b/src/test/java/NextLevel/demo/query/make/MakeTestQuery.java new file mode 100644 index 0000000..88b7445 --- /dev/null +++ b/src/test/java/NextLevel/demo/query/make/MakeTestQuery.java @@ -0,0 +1,41 @@ +//package NextLevel.demo.query.make; +// +//import NextLevel.demo.user.dto.RequestUserCreateDto; +//import NextLevel.demo.user.dto.login.RequestEmailLoginDto; +//import NextLevel.demo.user.service.LoginService; +//import NextLevel.demo.user.service.UserService; +//import org.junit.jupiter.api.Test; +//import org.junit.jupiter.api.extension.ExtendWith; +//import org.mockito.junit.jupiter.MockitoExtension; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +//import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.test.context.ActiveProfiles; +// +//import java.util.ArrayList; +// +//@SpringBootTest +//@ActiveProfiles("query-test") +//@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +//@ExtendWith(MockitoExtension.class) +//public class MakeTestQuery { +// +// @Autowired +// private LoginService loginService; +// +// @Test +// public void makeUser100() { +// for(int i = 0; i < 100; i++) { +// loginService.register(randomDto(), new ArrayList<>()); +// } +// } +// +// private RequestUserCreateDto randomDto(int count){ +// RequestUserCreateDto dto = RequestUserCreateDto +// .builder() +// .name("user" + count) +// .email("email"+count) +// . +// } +// +//} diff --git a/src/test/java/NextLevel/demo/query/projectlist/MyPage.java b/src/test/java/NextLevel/demo/query/projectlist/MyPage.java new file mode 100644 index 0000000..1ab081d --- /dev/null +++ b/src/test/java/NextLevel/demo/query/projectlist/MyPage.java @@ -0,0 +1,73 @@ +package NextLevel.demo.query.projectlist; + +import NextLevel.demo.project.project.dto.response.ResponseProjectListDto; +import NextLevel.demo.user.dto.user.request.RequestMyPageProjectListDto; +import NextLevel.demo.user.entity.UserEntity; +import NextLevel.demo.user.repository.MyPageProjectListType; +import NextLevel.demo.user.repository.UserRepository; +import NextLevel.demo.user.service.UserService; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.List; + +@SpringBootTest +@ActiveProfiles("query-test") +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@ExtendWith(MockitoExtension.class) +public class MyPage { + + @PersistenceContext + private EntityManager em; + + RequestMyPageProjectListDto dto; + @Autowired + private UserService userService; + @Autowired + private UserRepository userRepository; + + @Test + public void select100() { + List userIdList = userRepository.findAll().stream().map(UserEntity::getId).toList(); + for(int i = 0; i < 100; i++) { + dto = randomDto(userIdList); + LocalDateTime start = LocalDateTime.now(); + + ResponseProjectListDto result = userService.mypageProjectList(dto); + + System.out.println("검색 개수 : " + result.getProjects().size() + ", 걸린 시간 + " + Duration.between(start, LocalDateTime.now()).toMillis()); + em.flush(); + em.clear(); + } + } + + private RequestMyPageProjectListDto randomDto(List userIdList) { + Integer random = (int) Math.random()*100; // 0~10 정수 + RequestMyPageProjectListDto dto = new RequestMyPageProjectListDto(); + dto.setUserId(userIdList.get(random % userIdList.size())); + + switch(random % 3) { + case 0: + dto.setType(MyPageProjectListType.PROJECT); break; + case 1: + dto.setType(MyPageProjectListType.FUNDING); break; + case 2: + dto.setType(MyPageProjectListType.LIKE); break; + case 3: + dto.setType(MyPageProjectListType.VIEW); break; // view는 일단 제외 시킴 + } + dto.setPageCount((long)random % 10); + dto.setPage(0); // page는 무조건 첫 번째 조회하기 + return dto; + } + +}