디버깅

디버깅 (Debugging)

테스트의 목적은 언제 문제가 깨지는지 알아내는 것이에요. 필연적으로 시스템에 가해지는 변경이 테스트 중 하나를 실패하게 만들고, 그럴 때 그 테스트를 디버깅해야 해요.

먼저 항상 디버그 모드로 실행하는 걸 권장해요. 시스템을 make debug 명령으로 컴파일하면 돼요. 둘째, 깨지는 테스트만 실행하는 걸 권장해요. 깨지는 테스트의 파일 이름을 명령줄 파라미터로 테스트 스위트에 넘기면 돼요 (예: build/debug/test/unittest test/sql/projection/test_simple_projection.test). 테스트 부분집합 실행의 더 많은 옵션은 어떤 테스트를 실행할지 트리거 섹션을 참고하세요.

그다음 디버거를 프로그램에 부착해 테스트를 디버깅할 수 있어요. sqllogictest에서는 특정 쿼리에 중단점을 거는 게 보통 어렵지만, 테스트 스위트를 확장해서 실행되는 모든 쿼리에 대해 query_break라는 함수가 줄 번호 line을 파라미터로 호출되게 만들었어요. 이를 통해 특정 쿼리에 조건부 중단점을 걸 수 있어요. 예를 들어 테스트 파일의 43번 줄에서 중단하고 싶다면 다음 중단점을 만들 수 있어요.

gdb: break query_break if line==43
lldb: break s -n query_break -c line==43

파일에 mode skip을 넣고 선택적으로 mode unskip을 넣어 특정 쿼리 실행을 건너뛸 수도 있어요. 두 문 사이의 쿼리는 실행되지 않아요.

출처: 문서

본문

어떤 테스트를 실행할지 트리거

unittest 프로그램을 실행하면 기본적으로 모든 빠른(fast) 테스트가 실행돼요. 특정 테스트는 테스트 이름을 인자로 추가해 실행할 수 있어요. sqllogictest의 경우 이는 테스트 파일의 상대 경로예요.

단일 테스트만 실행하려면:

build/debug/test/unittest test/sql/projection/test_simple_projection.test

주어진 디렉터리의 모든 테스트는 디렉터리를 대괄호로 감싼 파라미터로 제공해 실행할 수 있어요.

"projection" 디렉터리의 모든 테스트를 실행하려면:

build/debug/test/unittest "[projection]"

느린 테스트를 포함한 모든 테스트는 별표로 테스트를 실행하면 돼요.

느린 테스트를 포함한 모든 테스트를 실행하려면:

build/debug/test/unittest "*"

--start-offset--end-offset 파라미터로 테스트 부분집합을 실행할 수 있어요.

200...250 테스트를 실행하려면:

build/debug/test/unittest --start-offset=200 --end-offset=250

이들은 백분율로도 사용할 수 있어요. 10% - 20% 테스트를 실행하려면:

build/debug/test/unittest --start-offset-percentage=10 --end-offset-percentage=20

실행할 테스트 집합은 줄마다 테스트 이름 하나를 담은 파일에서 로드할 수도 있고, -f 명령으로 로드해요.

cat test.list
test/sql/join/full_outer/test_full_outer_join_issue_4252.test
test/sql/join/full_outer/full_outer_join_cache.test
test/sql/join/full_outer/test_full_outer_join.test

파일에 표시된 테스트만 실행하려면:

build/debug/test/unittest -f test.list

더 알아보기 (Learn more)