Skip to main content
이 가이드는 C++ 확장의 테스트-반복 루프를 다룹니다: 로컬 서버 설정, .veb 파일 설치, 회귀 테스트 실행, 실패 디버깅. 초기 빌드를 다루는 C++로 확장 만들기, 그리고 VDF 작성 심층 내용을 다루는 C++ 개발의 동반 자료입니다.
확장을 빌드하는 것이 아니라 VillageSQL 서버 자체에 기여하는 경우, mysql-test-run.pl을 직접 사용하여 서버 스위트를 실행하는 방법과 디버깅 및 기여 워크플로를 다루는 서버 개발 가이드를 참조하세요.

환경 설정

확장을 개발하고 테스트하려면 빌드된 VillageSQL 서버가 필요합니다. 클론 후 소스에서 빌드하기 가이드를 따라 서버 바이너리를 컴파일하세요. VillageSQL 릴리스 패키지의 villagesql CLI를 사용하여 로컬 개발 서버 인스턴스를 관리하세요. 소스 빌드 트리에는 이 CLI가 포함되지 않습니다. 모든 명령은 패키지의 루트 디렉터리에서 실행하세요.

로컬 개발 서버 시작하기

서버 인스턴스를 초기화하고 시작합니다:
초기화 시 root 비밀번호를 설정하려면:
테스트 실행을 위해 mysqld 기능을 활성화하거나 비활성화하려면 -- 구분자 뒤에 플래그를 전달하세요; 그 뒤의 모든 것은 그대로 mysqld로 전달됩니다:
-- 앞에 있는 인식되지 않는 인수는 거부되므로, mysqld에 전달하려는 모든 플래그에는 --를 사용하세요. 여러 독립 인스턴스를 관리하려면 명령 앞에 --dir <path>를 전달하거나, 현재 작업 디렉터리에 서버 디렉터리를 만들려면 --here를 사용하세요:

확장 파일 관리

SQL을 통해 확장을 설치하기 전에, 해당 .veb 파일이 서버에 존재해야 합니다. CLI는 실행 중인 인스턴스의 veb 디렉터리(기본값은 instances/default/veb/, --dir를 사용할 때는 <dir>/veb, --here를 사용할 때는 .vsql_here/veb)를 관리합니다:
패키지 루트의 lib/veb/는 일회성 시드 소스일 뿐입니다. init 전에 그곳에 배치된 .veb 파일은 인스턴스가 생성될 때 새 인스턴스의 veb 디렉터리로 복사되며, 그 이후에는 lib/veb/를 건드리지 않습니다. 파일을 추가한 후에는 SQL을 통해 확장을 설치하세요:

회귀 테스트 실행

VillageSQL 빌드 디렉터리에서 MySQL Test Runner를 사용하여 확장 회귀 테스트를 실행하세요.

전체 스위트 실행

확장의 모든 테스트를 실행하려면:

개별 테스트 실행

단일 테스트 케이스를 실행하려면 스위트 경로와 테스트 이름을 지정하세요:

새 테스트 만들기

새 기능을 추가하거나 버그를 수정할 때는 그에 상응하는 회귀 테스트를 추가해야 합니다.

테스트 위치

확장 테스트는 VillageSQL 서버의 mysql-test/suite/ 트리가 아니라, 확장 자체 저장소의 mysql-test/ 디렉터리 아래에 위치합니다.
  • 테스트 파일은 .test로 끝나며 mysql-test/t/에 들어갑니다.
  • 예상 결과 파일은 .result로 끝나며 mysql-test/r/에 들어갑니다.
예를 들어, my_extension이라는 확장의 경우:
  • mysql-test/t/my_new_test.test
  • mysql-test/r/my_new_test.result

테스트 파일 규칙

일반적인 확장 테스트는 확장을 설치하고, SQL을 실행한 다음, 제거합니다:
테스트 출력에 테스트 러너의 임시 디렉터리 경로가 포함되는 경우, 경로를 출력하는 각 문 바로 앞 줄에 다음 지시어를 추가하세요 — 이 지시어는 다음 문에만 적용됩니다 — 그러면 기록된 결과에 다른 머신에서 깨지는 절대 경로가 포함되지 않습니다:

테스트 추가 단계

  1. 확장의 mysql-test/t/ 디렉터리에 .test 파일을 만듭니다.
  2. 확장의 mysql-test/r/ 디렉터리에 빈 .result 파일을 만듭니다.
  3. 예상 출력을 생성하기 위해 --record로 테스트를 실행합니다:
  4. 생성된 .result 파일이 예상과 일치하는지 확인합니다.

테스트 디버깅

테스트가 실패하면 테스트 프레임워크가 상세한 로그를 제공합니다.
  • 테스트 출력: mysql-test/var/log/mysqltest.log(통합 로그) 또는 mysql-test/var/log/<test_name>.log(테스트별)를 확인하세요.
  • 서버 오류 로그: mysql-test/var/log/mysqld.1.err를 확인하세요. 정보 수준의 VillageSQL 전용 로그 메시지(LogVSQL()을 통해 출력됨)는 서버가 --log-error-verbosity=3으로 실행될 때 나타나며, 이 값은 테스트 서버의 기본값입니다.
  • Diff: 프레임워크는 실제 출력과 예상 .result 파일 사이의 diff를 출력합니다.
추가 디버그 정보와 함께 테스트를 실행하려면:

참고