CTest, CTest란 ?

728x90
반응형

vsc에서 c/c++빌드를하기위해 CMake Quick Start를 선택해 프로젝트를 만드는 과정에서 CPackCTest를 선택하는 과정이나온다.

2024.08.02 - [개발 관련 지식 및 Tool 사용방법/Visual studio code(VSC, VSCode)] - vsc에서 Cmake 개발환경 구축하기

[vsc에서 Cmake 개발환경 구축하기

이전에 반드시 컴파일러가 설치되어 있어야하고, 시스템 환경 변수에 컴파일러 경로가 추가되어 있어야 한다. 컴파일러 설치는 아래 포스팅 참고2024.09.16 - [개발 관련 지식 및 Tool 사용방법] - gcc

vuzwa.tistory.com](https://vuzwa.tistory.com/entry/vsc%EC%97%90%EC%84%9C-Cmake-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0)

이번 포스팅에서는 CTest에 대해 알아보자.

CTest는 CMake와 함께 제공되는 테스트 도구로, 빌드된 프로그램의 테스트를 자동화하고 관리할 수 있게 해준다. 이를 통해 유닛 테스트, 통합 테스트 등을 쉽게 실행할 수 있다.

CTest 설정 단계

  1. 테스트 사용 설정: CMakeLists.txt 파일에 enable_testing() 명령어를 추가해 테스트를 활성화한다.
  2. 테스트 추가: add_test() 명령어를 사용해 테스트 실행 파일과 명령어를 등록한다.
  3. CTest 명령어 실행: CMake로 프로젝트를 빌드한 후 ctest 명령어를 사용해 테스트를 수행한다.

예제: CMakeLists.txt 파일 설정

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# 소스 파일 추가
add_executable(MyExecutable main.cpp)

# CTest 사용 설정
enable_testing()

# 테스트 추가 (예: MyExecutable을 테스트로 사용)
add_test(NAME MyTest COMMAND MyExecutable)

enable_testing()add_test() 명령어를 통해 CTest가 테스트를 인식하고 실행할 수 있도록 설정한다.

CTest 실행 절차

  1. 빌드 디렉토리 생성 및 이동:
    mkdir build
    cd build
  2. CMake 실행:
    cmake ..
  3. 빌드 실행:
    cmake --build .
  4. CTest 실행:
    ctest

이 명령어들을 실행하면, CTest가 설정된 테스트를 실행하며 add_test()로 등록된 모든 테스트가 수행된다.

고급 설정

CTest는 다양한 고급 기능을 제공하며, 이를 통해 테스트를 그룹으로 나누거나 병렬로 실행할 수 있다.

테스트 그룹 설정

# 여러 개의 테스트 추가
add_test(NAME Test1 COMMAND MyExecutable arg1)
add_test(NAME Test2 COMMAND MyExecutable arg2)

# 테스트 그룹 설정
set_tests_properties(Test1 PROPERTIES LABELS "group1")
set_tests_properties(Test2 PROPERTIES LABELS "group2")

병렬 테스트 실행

테스트를 병렬로 실행하려면 -j 옵션을 사용한다.

ctest -j4

이 명령어는 4개의 병렬 작업으로 테스트를 수행한다.

테스트 타임아웃 설정

각 테스트에 타임아웃을 설정할 수 있다.

set_tests_properties(Test1 PROPERTIES TIMEOUT 10)

이 설정은 Test1이 10초 이상 실행되지 않도록 한다.

CTest와 CDash 연동

CTest는 CDash라는 웹 기반 대시보드와 연동해 테스트 결과를 시각화하고 관리할 수 있다. 이를 위해 CTest 설정을 CMakeLists.txt에 추가해야 한다.

# CDash 설정
set(CTEST_PROJECT_NAME "MyProject")
set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")

# CTestConfig.cmake 파일 생성
file(WRITE "${CMAKE_BINARY_DIR}/CTestConfig.cmake"
  "set(CTEST_PROJECT_NAME \"MyProject\")\n"
  "set(CTEST_NIGHTLY_START_TIME \"01:00:00 UTC\")\n"
  "set(CTEST_DROP_METHOD \"http\")\n"
  "set(CTEST_DROP_SITE \"cdash.example.com\")\n"
  "set(CTEST_DROP_LOCATION \"/submit.php?project=MyProject\")\n"
  "set(CTEST_DROP_SITE_CDASH TRUE)\n"
)

# CPack 설정
include(CTest)

이 설정은 CTest가 테스트 결과를 CDash 서버에 업로드할 수 있도록 구성한다.

예제 프로젝트

간단한 C++ 프로젝트 예제는 다음과 같다.

main.cpp

#include <iostream>
int main(int argc, char** argv) {
    if (argc > 1 && std::string(argv[1]) == "arg1") {
        std::cout << "Test1 passed\n";
        return 0;
    }
    std::cout << "Test2 passed\n";
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# 소스 파일 추가
add_executable(MyExecutable main.cpp)

# CTest 사용 설정
enable_testing()

# 테스트 추가
add_test(NAME Test1 COMMAND MyExecutable arg1)
add_test(NAME Test2 COMMAND MyExecutable)

이 예제는 main.cpp를 빌드하고 두 개의 테스트를 추가한다. ctest 명령어를 사용해 테스트를 실행할 수 있다.

728x90
반응형