GoogleTestFrameworkをUbuntu+Jenkinsで動かす
#ソフトウェアテスト
C++
やりたいこと
CMakeとGoogleTestFrameworkを使って単体テストを実行する
GitHubにpushしたら、Jenkinsでビルド自動実行
やったこと
https://gyazo.com/dd37adfac7c00a280c5c58d58e29fc81
上の図はGoogleTestFrameworkをWindows上で動かすの図。そのうち描き直す。
フォルダ構成およびCMakeLists.txtはこの通り。
上記の図では、描画ツールの都合上 (フォルダ名)_CMakeLists.txt としているが、本来のファイル名はすべて CMakeLists.txtであることに注意。
applicationはfunc1を使用する。
test1は、func1のテストコード。
start.batのかわりに、build.shを作成。CMakeでビルドする処理を記述する。
build.shは、ユーザーまたはJenkinsから実行される。
このリポジトリは以下。
https://github.com/sngm45/GoogleTestSample.git
GitHubにpushしたら、ローカルのJenkinsにトリガがかかり、ビルド自動実行されるようにした。
Install Ubuntu MATE into Raspberry Pi 3 B+
table:Jenkins設定
Discard old builds ON
Source Code Management Git
Repository URL https://github.com/sngm45/GoogleTestSample.git
Credentials none その他はdefaultのまま
Build Triggers
GitHub hook trigger for GITScm polling ON
Build Environment
Abort the build if it's stuck
Time-out strategy Absolute
Timeout minutes 10
Time-out actions Abort the build
Build
Execute Shell 以下参照
code:command
export WORKSPACE
export GIT_URL
export JOB_NAME
cd ${WORKSPACE}/..
if -d ${JOB_NAME} ; then
rm -rf ${JOB_NAME}
fi
git clone ${GIT_URL}
cd ${JOB_NAME}
bash ./build.sh
毎回gitからcloneする設定。
以下ビルド結果。
Running as SYSTEM
EnvInject - Loading node environment variables.
Building in workspace /var/lib/jenkins/workspace/GoogleTestSample
The recommended git tool is: NONE
No credentials specified
> git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/GoogleTestSample/.git # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/sngm45/GoogleTestSample.git # timeout=10
Fetching upstream changes from https://github.com/sngm45/GoogleTestSample.git
> git --version # timeout=10
> git --version # 'git version 2.25.1'
> git fetch --tags --force --progress -- https://github.com/sngm45/GoogleTestSample.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 33f5b92fe5a87a05f8cf5504d8dc26ee8adafa1f (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 33f5b92fe5a87a05f8cf5504d8dc26ee8adafa1f # timeout=10
Commit message: "add build.sh"
> git rev-list --no-walk 33f5b92fe5a87a05f8cf5504d8dc26ee8adafa1f # timeout=10
GoogleTestSample $ /bin/sh -xe /tmp/jenkins17552495018465418579.sh
+ export WORKSPACE
+ export GIT_URL
+ export JOB_NAME
+ cd /var/lib/jenkins/workspace/GoogleTestSample/..
+ -d GoogleTestSample
+ rm -rf GoogleTestSample
+ git clone https://github.com/sngm45/GoogleTestSample.git
Cloning into 'GoogleTestSample'...
+ cd GoogleTestSample
+ bash ./build.sh
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- ENABLE_GTEST=ON
-- Started Google Test!
CMake Warning (dev) at googletest/CMakeLists.txt:19 (option):
Policy CMP0077 is not set: option() honors normal variables. Run "cmake --help-policy CMP0077" for policy details. Use the cmake_policy command to set the policy and suppress this warning.
For compatibility with older versions of CMake, option is clearing the normal variable 'gtest_build_tests'.
This warning is for project developers. Use -Wno-dev to suppress it.
-- Found PythonInterp: /usr/bin/python3.8 (found version "3.8.10")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Finished Google Test!
-- Configuring done
-- Generating done
-- Build files have been written to: /var/lib/jenkins/workspace/GoogleTestSample/build
/usr/bin/cmake -S/var/lib/jenkins/workspace/GoogleTestSample -B/var/lib/jenkins/workspace/GoogleTestSample/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /var/lib/jenkins/workspace/GoogleTestSample/build/CMakeFiles /var/lib/jenkins/workspace/GoogleTestSample/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make1: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
make -f MyApp/CMakeFiles/MyApp.dir/build.make MyApp/CMakeFiles/MyApp.dir/depend
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
cd /var/lib/jenkins/workspace/GoogleTestSample/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /var/lib/jenkins/workspace/GoogleTestSample /var/lib/jenkins/workspace/GoogleTestSample/MyApp /var/lib/jenkins/workspace/GoogleTestSample/build /var/lib/jenkins/workspace/GoogleTestSample/build/MyApp /var/lib/jenkins/workspace/GoogleTestSample/build/MyApp/CMakeFiles/MyApp.dir/DependInfo.cmake --color=
Scanning dependencies of target MyApp
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
make -f MyApp/CMakeFiles/MyApp.dir/build.make MyApp/CMakeFiles/MyApp.dir/build
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
10% Building CXX object MyApp/CMakeFiles/MyApp.dir/src/main.cpp.o
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyApp && /usr/bin/c++ -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/MyApp -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/PUBLIC -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/include -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/PRIVATE -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/src -g -O -Wall -std=c++11 -o CMakeFiles/MyApp.dir/src/main.cpp.o -c /var/lib/jenkins/workspace/GoogleTestSample/MyApp/src/main.cpp
20% Building CXX object MyApp/CMakeFiles/MyApp.dir/src/SampleFunction.cpp.o
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyApp && /usr/bin/c++ -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/MyApp -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/PUBLIC -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/include -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/PRIVATE -I/var/lib/jenkins/workspace/GoogleTestSample/MyApp/src -g -O -Wall -std=c++11 -o CMakeFiles/MyApp.dir/src/SampleFunction.cpp.o -c /var/lib/jenkins/workspace/GoogleTestSample/MyApp/src/SampleFunction.cpp
30% Linking CXX static library libMyApp.a
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyApp && /usr/bin/cmake -P CMakeFiles/MyApp.dir/cmake_clean_target.cmake
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyApp && /usr/bin/cmake -E cmake_link_script CMakeFiles/MyApp.dir/link.txt --verbose=1
/usr/bin/ar qc libMyApp.a CMakeFiles/MyApp.dir/src/main.cpp.o CMakeFiles/MyApp.dir/src/SampleFunction.cpp.o
/usr/bin/ranlib libMyApp.a
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
30% Built target MyApp
make -f googletest/CMakeFiles/gtest.dir/build.make googletest/CMakeFiles/gtest.dir/depend
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
cd /var/lib/jenkins/workspace/GoogleTestSample/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /var/lib/jenkins/workspace/GoogleTestSample /var/lib/jenkins/workspace/GoogleTestSample/googletest /var/lib/jenkins/workspace/GoogleTestSample/build /var/lib/jenkins/workspace/GoogleTestSample/build/googletest /var/lib/jenkins/workspace/GoogleTestSample/build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake --color=
Scanning dependencies of target gtest
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
make -f googletest/CMakeFiles/gtest.dir/build.make googletest/CMakeFiles/gtest.dir/build
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
40% Building CXX object googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
cd /var/lib/jenkins/workspace/GoogleTestSample/build/googletest && /usr/bin/c++ -I/var/lib/jenkins/workspace/GoogleTestSample/googletest/include -I/var/lib/jenkins/workspace/GoogleTestSample/googletest -g -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -std=c++11 -o CMakeFiles/gtest.dir/src/gtest-all.cc.o -c /var/lib/jenkins/workspace/GoogleTestSample/googletest/src/gtest-all.cc
50% Linking CXX static library libgtest.a
cd /var/lib/jenkins/workspace/GoogleTestSample/build/googletest && /usr/bin/cmake -P CMakeFiles/gtest.dir/cmake_clean_target.cmake
cd /var/lib/jenkins/workspace/GoogleTestSample/build/googletest && /usr/bin/cmake -E cmake_link_script CMakeFiles/gtest.dir/link.txt --verbose=1
/usr/bin/ar qc libgtest.a CMakeFiles/gtest.dir/src/gtest-all.cc.o
/usr/bin/ranlib libgtest.a
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
50% Built target gtest
make -f googletest/CMakeFiles/gtest_main.dir/build.make googletest/CMakeFiles/gtest_main.dir/depend
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
cd /var/lib/jenkins/workspace/GoogleTestSample/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /var/lib/jenkins/workspace/GoogleTestSample /var/lib/jenkins/workspace/GoogleTestSample/googletest /var/lib/jenkins/workspace/GoogleTestSample/build /var/lib/jenkins/workspace/GoogleTestSample/build/googletest /var/lib/jenkins/workspace/GoogleTestSample/build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake --color=
Scanning dependencies of target gtest_main
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
make -f googletest/CMakeFiles/gtest_main.dir/build.make googletest/CMakeFiles/gtest_main.dir/build
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
60% Building CXX object googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
cd /var/lib/jenkins/workspace/GoogleTestSample/build/googletest && /usr/bin/c++ -I/var/lib/jenkins/workspace/GoogleTestSample/googletest/include -I/var/lib/jenkins/workspace/GoogleTestSample/googletest -g -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -std=c++11 -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -c /var/lib/jenkins/workspace/GoogleTestSample/googletest/src/gtest_main.cc
70% Linking CXX static library libgtest_main.a
cd /var/lib/jenkins/workspace/GoogleTestSample/build/googletest && /usr/bin/cmake -P CMakeFiles/gtest_main.dir/cmake_clean_target.cmake
cd /var/lib/jenkins/workspace/GoogleTestSample/build/googletest && /usr/bin/cmake -E cmake_link_script CMakeFiles/gtest_main.dir/link.txt --verbose=1
/usr/bin/ar qc libgtest_main.a CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
/usr/bin/ranlib libgtest_main.a
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
70% Built target gtest_main
make -f MyTest/CMakeFiles/MyTest.dir/build.make MyTest/CMakeFiles/MyTest.dir/depend
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
cd /var/lib/jenkins/workspace/GoogleTestSample/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /var/lib/jenkins/workspace/GoogleTestSample /var/lib/jenkins/workspace/GoogleTestSample/MyTest /var/lib/jenkins/workspace/GoogleTestSample/build /var/lib/jenkins/workspace/GoogleTestSample/build/MyTest /var/lib/jenkins/workspace/GoogleTestSample/build/MyTest/CMakeFiles/MyTest.dir/DependInfo.cmake --color=
Scanning dependencies of target MyTest
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
make -f MyTest/CMakeFiles/MyTest.dir/build.make MyTest/CMakeFiles/MyTest.dir/build
make2: Entering directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
80% Building CXX object MyTest/CMakeFiles/MyTest.dir/src/main.cpp.o
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyTest && /usr/bin/c++ -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../MyApp/include -I/var/lib/jenkins/workspace/GoogleTestSample/build/MyTest/include -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../googletest -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../build/googletest -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../googletest/include -Wall -O2 -Wformat -std=c++11 -o CMakeFiles/MyTest.dir/src/main.cpp.o -c /var/lib/jenkins/workspace/GoogleTestSample/MyTest/src/main.cpp
/var/lib/jenkins/workspace/GoogleTestSample/MyTest/src/main.cpp:39:21: warning: extra tokens at end of #ifdef directive
39 | #ifdef ENABLE_GTEST || ENABLE_GMOCK
| ^~
90% Building CXX object MyTest/CMakeFiles/MyTest.dir/test/SampleTestCase.cpp.o
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyTest && /usr/bin/c++ -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../MyApp/include -I/var/lib/jenkins/workspace/GoogleTestSample/build/MyTest/include -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../googletest -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../build/googletest -I/var/lib/jenkins/workspace/GoogleTestSample/MyTest/../googletest/include -Wall -O2 -Wformat -std=c++11 -o CMakeFiles/MyTest.dir/test/SampleTestCase.cpp.o -c /var/lib/jenkins/workspace/GoogleTestSample/MyTest/test/SampleTestCase.cpp
100% Linking CXX executable MyTest
cd /var/lib/jenkins/workspace/GoogleTestSample/build/MyTest && /usr/bin/cmake -E cmake_link_script CMakeFiles/MyTest.dir/link.txt --verbose=1
/usr/bin/c++ -Wall -O2 -Wformat -rdynamic CMakeFiles/MyTest.dir/src/main.cpp.o CMakeFiles/MyTest.dir/test/SampleTestCase.cpp.o -o MyTest ../MyApp/libMyApp.a ../googletest/libgtest.a ../googletest/libgtest_main.a -lpthread
make2: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
100% Built target MyTest
make1: Leaving directory '/var/lib/jenkins/workspace/GoogleTestSample/build'
/usr/bin/cmake -E cmake_progress_start /var/lib/jenkins/workspace/GoogleTestSample/build/CMakeFiles 0
========== Running 1 test from 1 test case.
---------- Global test environment set-up.
---------- 1 test from SampleFunctionUnitTest
RUN SampleFunctionUnitTest.hoge
OK SampleFunctionUnitTest.hoge (1 ms)
---------- 1 test from SampleFunctionUnitTest (1 ms total)
---------- Global test environment tear-down
========== 1 test from 1 test case ran. (1 ms total)
PASSED 1 test.
Finished: SUCCESS
Warining 1個のこっている。