본문 바로가기

개인/싱가포르

싱가포르 출장 첫 번째 업무 (1)

싱가포르 출장을 오면서 첫 번째 업무는 프로젝트에 이미 존재하는 각 google test suite 를 실행하고 그 결과를 취합하여 레포트를 생성하는 스크립트/배치 파일을 생성하는 것이었다.

 

C로 어플리케이션만 개발하다가 출장 와서 갑자기 이게 왠 쌩뚱 맞는 소리인가 싶었다. 이 사람들이 내가 뭐하다 온 사람인 줄은 아나.. 싱가포르 매니저에게 물어보니 그는 내 경력 중 테스트 자동화를 수행했다는 경력이 마음에 들어서 나를 요청했다고 했다.

뭔가 오해가 있는 듯 했다. 내 부서와 파견 온 부서가 다르기 때문에 사용하는 테스트 자동화 툴이 달랐다. 본질적으로 나는 테스트 자동화 수트를 생성하고 케이스를 만들어 본 경험이 있지, 테스트 자동화 스크립트 통합 및 지원 경험은 없는데...

하지만 또 찬찬히 들여다 보니 그렇게 어려운 일도 아니고 하면서 근본적으로 여기서 사용하는 구글 테스트가 어떻게 작동하는지 파악할 수 있을 것 같아서 한 번 해보기로 했다.

 

1. 각각의 테스트가 어떻게 수행되고 리포트가 생성되는가?

    1) 각각 테스트 수트 파일이 존재하고(.cpp) Mock 파일은 인터페이스별로(_if.h) 따로 존재한다.

    2) 테스트수트에 대한 CMakeLists.txt 파일이 존재하고 이를 Mingw32 도구를 통해 Make 파일로 생성한다.

    3) Make 파일을 실행하면 .exe 파일이 생성된다. .exe를 실행시키면 .gdca / .gcno 파일이 생성된다.

    4) gCoverage.bat을 실행하면 3)의 출력결과를 바탕으로 lcov.perl에서 커버리지 결과가 lcov.info 파일로 생성된다. 테스트 결과는 .xml로 생성된다.

    5) .info 파일을 입력으로 genhtml.perl을 돌리면 최종적으로 coverage에 대한 리포트가 생성된다.

2. 추가적으로 필요한 작업은 무엇인가?

    1) 각 폴더를 돌아다니면서 CMakeLists.txt가 있는지 확인

    2) 존재한다면 1의 과정을 수행 및 이후 lcov.info를 가장 상위 lcov.info로 통합

    3) 가장 상위의 lcov.info를 입력으로 genhtml.perl을 수행, 최종적을 coverage 리포트 생성

    4) 각 폴더를 돌아다니면서 임시적으로 생성되었던 찌꺼기 파일 삭제

 

위를 바탕으로 생성한 첫 번째 초안 bat 파일은 다음과 같다. 윈도우 프롬프트 명령어에 대한 지식이 전무해서 배치파일을 작성하기가 무척 애먹었다. 프롬프트 명령어에 대한 지식이 전무한 가운데 어떻게 작동하는지 보려고 하니 초안은 조금 불필요한 항목들이 많이 들어간 것 같다.

 

gtest_draft.bat

더보기

@echo off

set VUC_DIR=%CUR_DIR%\..\..
for %%i in ("%VUC_DIR%") do SET "VUC_DIR=%%~fi"
set LCOV_PREFIX_DIR=%VUC_DIR%\VUC_APP\application\Source
for %%i in ("%LCOV_PREFIX_DIR%") do SET "absLCOV_PREFIX_DIR=%%~fi"
if exist gTestResult (
rmdir /s /q gTestResult
)
md "%CD%\gTestResult"
set REPORT_DIR=%CD%\gTestResult

REM Run each test scripts and create each test report
for /r /d %%a in (*) do if exist "%%a\CMakeLists.txt" (
pushd %%a
cmake -G "MinGW Makefiles" CMakeLists.txt
mingw32-make.exe
if exist gCoverage.bat (
call gCoverage.bat
)
popd
if not exist %REPORT_DIR%\gcov (
md "%REPORT_DIR%\gcov"
)
type %%a\gcov\lcov.info >> %REPORT_DIR%\gcov\lcov.info
)

REM Merge each test coverage report into one consolidated report
set absLCOV_PREFIX_DIR=%absLCOV_PREFIX_DIR:\=/%
%CD%\lcov-master\genhtml.perl -o "%REPORT_DIR%/coverage_html"  "%REPORT_DIR%/gcov/lcov.info" -p "%absLCOV_PREFIX_DIR%" --branch-coverage

REM Remove each test executable and each test report
for /r /d %%a in (*) do if exist "%%a\CMakeLists.txt" (
pushd %%a
del /q *.exe
del /q cmake_install.cmake
del /q CMakeCache.txt
del /q *.tu.c
del /q Makefile
rmdir /s /q CMakeFiles
if exist gCoverage.bat (
del /q testresults.xml
rmdir /s /q gcov
rmdir /s /q coverage_html
)
popd
)

 

'개인 > 싱가포르' 카테고리의 다른 글

싱가포르 출장 첫 번째 업무 (3)  (0) 2019.11.26
싱가포르 출장 첫 번째 업무 (2)  (0) 2019.11.26