주말 코딩: Google test 용 GUI runner

팀에서는 C++ 테스트 프레임웍으로 구글 테스트(gtest)를 사용한다. 여기에 불만스러운게 좀 있다면, 다름 아니라 GUI test-runner가 없다는 것. x-unit 류의 GUI Test-runner에서 흔히 볼 수 있는 녹색 테스트 프로그레스 바가 보고싶다는 점에서 python 프로그램을 하나 작성하게 되었다.

작업의 단초는,

  • pyunit의 GUI runner. 이걸로 GUI를 돌려보자
  • gtest 는 –gtest_list_tests 로 해당 실행 파일의 테스트 케이스를 볼 수 있다
  • 더불어, some_gtest_exe.exe –gtest_output=xml:some_file_name 하면 XML 형태의 결과를 쓸 수 있다

정도?

일단 간단한 python wrapper로,

  • 등록된, 혹은 특정 이름 패턴(eg. TEST_???.exe)의 gtest가 담긴 실행 파일을 지켜보다가,
  • 마지막 테스트 실행 시간 이후에 변경된 파일이 있으면,
  • 이걸 실행하고, 결과를 리포팅

하는 기능을 짜는게 1차 목표. 다만, C++ 코드를 직접 손대는 일은 가능하면 배제하고,

InitGoogleTest(&argcargv);
return RUN_ALL_TESTS();

만으로 main() 함수를 만든 테스트 들을 쉽게 처리하는데 중점을 둔다. C++ 코드에 손을 대면, EventListener 쪽을 확장해서 어느 정도 쉽게할 수 있겠지만, 그럼 컴파일 시간에 의존성이 생기기에, 기존 코드들을 고치는데는 별로 달가운 뭔가가 아니다…

그래서 대략 PyUnit 의 GUI 툴과, 몇 가지 파이썬 팩키지를 써서, 이런 녀석을 만들었다. 기본적으로 강제 실행이 가능하고, 수 초(기본은 10)마다 테스트 파일들의 시간을 보고 테스트를 실행한다. C++ 기반의 테스트에 영향을 주려면, 일종의 데이터가 아닌 이상은 link 시간에 뭔가 변화가 있어야할테니까. (링크 자체거나, 링커의 입력이거나…)

gtest_runner

UI는 PyUnit의  GUI runner랑 똑같음… PyTk 를 거의 모르니 일단은 가져다 쓰기.

이후에는,

  • 예전의 UnitTest++에 대응하는 VUTTP 처럼, 일부 테스트 케이스/테스트만 실행 할 수 있게 할 것
  • VS integration

같은걸 해봐야 겠다. 근데 일단 ipkn한테 물어보고, 저걸 top-most window로 띄우는 거 먼저 해야 -_-;