一。創建docker容器
1.參考菜鳥教程https://www.runoob.com/docker/windows-docker-install.html ,完成dockers在win10上的環境安裝;
2.拉取指定版本的 CentOS 鏡像:docker pull centos:centos7
3.查看本地鏡像:docker images
4.運行容器:docker run -itd --name centos-test centos:centos7
5.查看容器的運行信息:docker ps
6.進入容器:docker exec -it centos-test /bin/bash
二。進入到Centos docker中,就相當於在虛擬機中玩了
1.安裝git:yum install -y git
本來安裝git是想從github上直接拉gtest的安裝包(git clone https://github.com/google/googletest),奈何網速實在不給力,就從頁面直接下載到本地,然后從本地拷貝的docker容器中
從windows本地拷貝到容器,先進入到本地放壓縮包的目錄,然后打開cmd窗口,執行命令將壓縮包拷貝到centos根目錄
docker cp release-1.8.0.zip centos-test:/
2.安裝zip unzip工具,用於解壓gtest包
yum install -y zip unzip
unzip release-1.8.0.zip
cd /googletest-release-1.8.0 進入解壓的包內
3.下來要編譯生成gtest的靜態庫,需要在centos中裝Cmake,這塊參考網上的博客即可,下面貼出來:
步驟一、安裝gcc等必備程序包(已安裝則略過此步)
yum install -y gcc gcc-c++ make automake
步驟二、安裝wget (已安裝則略過此步)
yum install -y wget
步驟三、獲取CMake源碼包(如果獲取不到,依舊從網頁下載下來,然后再拷貝的docker容器中)
wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
步驟四、解壓CMake源碼包
tar -zxvf cmake-2.8.10.2.tar.gz
步驟五、進入目錄
cd cmake-2.8.10.2
步驟六
./bootstrap
步驟七
gmake
步驟八
gmake install
4.生成gtest靜態庫
cd googletest
cmake CMakeLists.txt (生成Makefile)
make (生成兩個靜態庫:libgtest.a libgtest_main.a)
拷貝到系統目錄,注意,如果下訴目錄位置在不同版本位置有變動,用find . -name "libgtest*.a" 找到位置
cp libgtest*.a /usr/lib
cp –a include/gtest /usr/include
三 驗證gtest是否安裝成功。
自己創建個目錄,在里面用vim創建一個c++文件,比如:test.cc,內容如下:
#include<gtest/gtest.h>
int add(int a,int b){
return a+b;
}
TEST(testCase,test0){
EXPECT_EQ(add(2,3),5);
}
int main(int argc,char **argv){
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
然后在該目錄下執行
g++ test.cc -lgtest -lpthread
./a.out
出現下面結果即證明gtest可以用了
四。安裝lcov覆蓋率測試工具
1.依舊是下載lcov-1.14.tar.gz安裝包拷貝到docker容器中
解壓並進入lcov-1.14目錄:make install 安裝
2.安裝成功后,重新編譯test.cc那個文件,但是編譯的時候要加上兩個參數:-fprofile-arcs -ftest-coverage
進入到源碼目錄,執行 g++ -fprofile-arcs -ftest-coverage test.cc -lgtest -lpthread (會為每個源文件生成.gcno結尾的文件。)
3.執行編譯后的文件:./a.out (這里會為每個源文件生成gcda結尾的文件)
4.收集測試文件運行后產生的覆蓋率文件:lcov --rc lcov_branch_coverage=1 -c -d ./ -o cover.info
執行上述指令若出現Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /us錯誤的解決辦法:
yum -y install perl-Digest-MD5
5.某些情況下,需要屏蔽第三方庫的覆蓋率計算或者只統計某個文件夾下的覆蓋率計算,就需要用到lcov的文件過濾功能。
分為兩種情況,
- 移除指定的目錄,加參數--remove
lcov --remove cover.info '*/include/*' '' -o result.info
- 篩選固定目錄 加參數--extract
lcov --extract cover.info '*/include/*' '' -o result.info
這里,我只想統計我創建的目錄下源文件的覆蓋率,那么
lcov --extract cover.info '*/suchao/*' -o result.info
6 使用genhtml生成覆蓋率報表
genhtml --branch-coverage -o result result.info
得到覆蓋率
在docker環境下 我們看不到html統計報表,我們可以把測試目錄從容器拷貝到本地查看
docker cp centos-test:/suchao D:/
用瀏覽器打開index.html即可看到覆蓋率統計情況