테스트
Springboot PSQLException: Unterminated dollar quote started at position $$ 해결방법
Springboot PSQLException: Unterminated dollar quote started at position $$ SpringBoot Junit5 환경에서, 일부 테스트 에만 sql 파일을 실행시켜 테스트 해야하는 경우가 있었습니다. 특정 sql 스크립트를 이용하여 테스트 하던 중 다음과 같은 오류를 만나 테스트가 실행되지 않는 문제를 해결한 방법입니다. Caused by: org.postgresql.util.PSQLException: Unterminated dollar quote started at position 62 in SQL CREATE FUNCTION random_age(age_in INTEGER) RETURNS INTEGER AS $$ DECLARE random_offse..
JMH (Java Microbenchmark Harness)
JMH 프로젝트와 코드를 테스트 하기 위해 알아보던 중 JMH를 알게 되었습니다. JMH는 JDK를 오픈소스로 제공하는 OpenJDK에서 만든 성능 측정용 라이브러리입니다. jit 컴파일러 개발자가 만들었습니다. https://github.com/openjdk/jmh 특정 코드에 대한 간단한 비교, 일부 로직에 대한 성능을 측정해야 할 경우에 사용할 수 있 실제 테스트하기전 워밍업 과정과 실제 측정 과정을 수행하는데 각 과정의 실행 수를 제어할 수 있고, 측정 후 결과로 나오는 시간의 단위를 지정하는 기능도 제공합니다. JMH을 사용하여 benchmark 과정은 크게 다음과 같습니다. benchmarking project 생성 benchmark 클래스 및 소스코드 작성 benchmark 수행 benchm..
nGrinder 에러 - Unsupported class file major version 61 해결방법
로컬 환경의 기본 JDK 버전은 17이였습니다. m1 pro Ventura 13.0.1 JDK 17 (amazon corretto) nGrinder로 groovy 스크립트를 작성하고 Validate를 실행했을 때 다음과 같은 오류를 만났습니다. 2023-04-25 21:57:47,218 ERROR Script error - Error while initialize test runner net.grinder.engine.common.EngineException: Error while initialize test runner at net.grinder.scriptengine.groovy.GroovyScriptEngine.(GroovyScriptEngine.java:71) at net.grinder.scrip..
nGridner 소개와 설치 방법, 간단 테스트
NGrinder nGrinder 공식 깃허브 문서 nGrinder란 네이버에서 진행한 오픈 소스 프로젝트로 서버의 부하 테스트를 위한 도구 입니다 The Grinder라는 오픈소스 기반에서 개발. 웹 애플리케이션을 서비스하기 전에 서버가 얼마나 많은 사용자를 수용할 수 있는지 요청을 전송해봄으로써 서버의 성능을 측정해볼 수 있다. 부하테스트는 성능테스트의 일종이지만, 성능테스트랑은 다르다. nGrinder는 다음과 같은 주요 기능을 제공합니다: 스크립트 레코딩: 웹 브라우저에서 사용자 동작을 녹화하여 테스트 스크립트를 생성할 수 있습니다. 분산 테스트: 다수의 에이전트 머신을 사용하여 대규모 테스트를 수행할 수 있습니다. 실시간 모니터링: 테스트 진행 중에 성능 지표를 실시간으로 모니터링할 수 있습니다...
성능 테스트, 부하 테스트, 스트레스 테스트
프로젝트를 진행하면서 성능 테스트 툴을 알아보고 있습니다, 기능은 만들 수 있지만, 올바르게 동작하는지, 성능은 문제 없는지, 애플리케이션의 성능에 대한 고민과 테스트를 해본적이 없어 관련 학습이 필요하였습니다. 기능의 목적 중 사용자에게 좋은 경험을 주기 위해선 신속하고 안정성이 있어야 합니다. 성능, 부하, 스트레스 테스트의 개념이 언뜻 비슷해 보이지만 세가지의 개념이 다른것을 알게 되었습니다. 개념을 제대로 알지 못하면, 목적에 맞게 진행하는지 알 수 없고 정확한 테스트가 어렵기 때문에 이 개념들을 정리해보려 합니다. 어느(Where) 부분을 테스트 해야 할까요? Application TPS(Transaction Per Second) 응답 시간(Response Time) Middleware Mess..
Apache JMeter를 사용해보자
Apache JMeter JMeter 깃허브 웹 어플리케이션 성능 테스트를 툴은 자바 오픈 소스 Apache Bench, Apache JMeter, 네이버에서 Grinder를 이용해서 만든 nGrinder, ,k6, Artillery, Gatling 등등이 있습니다. JMeter와 k6를 비교한 글 Apache JMeter는 서버의 성능 및 부하를 측정할 수 있는 오픈 소스 테스트 도구입니다. JMeter는 순수 Java 애플리케이션 오픈소스이며 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있습니다. 다음은 Apache JMeter가 가진 특징입니다 다양한 프로토콜/서버를 테스트할 수 있다. 웹 - HTTP, HTT..
변하는 값을 테스트 하는 방법(LocalDateTime, UUID, Random)
개발을 하다보면 현재 시간이나, 랜덤 값이 필요한 로직이 분명 필요합니다. 프로젝트를 진행하면서, LocalDate.now()와 UUID.randomUUID 등을 사용해야 했습니다. 하지만 테스트를 할 수가 없는 문제가 발생하였습니다. 모임 엔티티의 생성 조건과 참여 조건의 요구사항은 다음과 같습니다. 모임 시작날짜, 종료날짜는 현재시간 이유여야만 한다. 종료날짜 이후에는 참여하지 못하고 예외가 발생하게 된다. 이 때, 종료 날짜는 무조건 현재날짜 이후에만 지정 가능하고, 현재 요청한 시간은 항상 endDate 이므로 만약 endDate가 3월 16일이고, 3월 15일날 테스트를 하게된다면 항상 통과할 수 밖에 없게 되어 모임 가입이 불가능한 테스트를 할 수 없게 됩니다. public class Book..
JUnit5 리스트가 정렬 조건에 맞게 정렬되었는지 검증하는법
List가 특정한 기준으로 정렬할 때 보통, Comparator 인터페이스를 사용하여 정렬 기준을 지정한다. // List를 정렬할 Comparator Comparator comparator = (s1, s2) -> s1.compareTo(s2); // List를 정렬 List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add("cherry"); list.sort(comparator); 이제, List가 특정한 기준으로 정렬되었는지 확인하려면, 다음과 같이 assert 메소드를 사용하여 비교하면 된다. // List가 특정한 기준으로 정렬되었는지 확인 assertThat(list).isSortedAccordingTo(compa..
Mockito Stub 작성 시 주의 사항
InvalidUseOfMatchersException https://github.com/HomoEfficio/dev-tips/blob/master/Mockito%20Stub%20%EC%9E%91%EC%84%B1%20%EC%8B%9C%20%EC%A3%BC%EC%9D%98%20%EC%82%AC%ED%95%AD.md#mockito-stub-%EC%9E%91%EC%84%B1-%EC%8B%9C-%EC%A3%BC%EC%9D%98-%EC%82%AC%ED%95%AD com.nhaarman.mockitokotlin2.BDDMockitoKt.given https://github.com/HomoEfficio/dev-tips/blob/master/Mockito%20Stub%20%EC%9E%91%EC%84%B1%20%EC%8B..
SpringBoot 테스트시 초기 SQL 데이터 삽입 - Test SQL
Spring Boot 테스트 시 데이터를 로딩하는 방법은 직접 코드를 작성하는 방법과 @Sql을 사용하는 방법 2가지가 있다. 1. 직접 코드를 작성하여 데이터 로딩 https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html#testcontext-executing-sql-programmatically) @SpringBootTest @Transactional @TestInstance(TestInstance.Lifecycle.PER_CLASS) class ProductReviewControllerTest { @Autowired private DataSource dataSource; @BeforeAll ..