目錄
一. 修改gn文件,編譯執(zhí)行測(cè)試套
1.?修改業(yè)務(wù)側(cè)BUILD.gn文件,增加編譯選項(xiàng)
2.設(shè)置lcov統(tǒng)計(jì)“branch coverage”的方法
3. 編譯測(cè)試版本+目標(biāo)用例
4. 在windows下搭建執(zhí)行環(huán)境,執(zhí)行測(cè)試用例
5. 查看測(cè)試生成gcda文件
二. 使用本地代碼覆蓋率腳本
7. 修改python腳本中的路徑
8. 執(zhí)行腳本
?三 . 本地接口覆蓋率腳本使用
9. 檢查接口覆蓋率的必要文件路徑
10. 修改localCoverage/interfaceCoverage/get_innerkits_json.py到對(duì)應(yīng)路徑:
11. 執(zhí)行python get_innerkits_json.py
12.?修改localcoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py
13. 執(zhí)行python interfaceCoverage_gcov_lcov.py
14.查看報(bào)告
?四. 使用命令行生成本地代碼覆蓋率(步驟二也可手動(dòng)操作,已完成步驟二可忽略此步)
1. 將生成的.gcda合并到.o/.gcno文件夾中
2. 生成info文件
3. 去除非本模塊信息
?4. 生成可視化數(shù)據(jù)
一. 修改gn文件,編譯執(zhí)行測(cè)試套
1.?修改業(yè)務(wù)側(cè)BUILD.gn文件,增加編譯選項(xiàng)
涉及到自己子系統(tǒng)的BUILD.gn中cflags或cfalgs_cc及idflags都需要加--coverage字段
C:
C++:
cflags_cc = [
“--coverage”,
]
2.設(shè)置lcov統(tǒng)計(jì)“branch coverage”的方法(若不需要分支覆蓋率,可忽略此步驟)
Lcov(1.10及往后)默認(rèn)是關(guān)閉?分支覆蓋率的。?
若要locv生成分支branch信息、輸出基本塊,需要修改/etc/lcovrc或~/.lcovrc文件,修改如下配置:
vi /etc/lcovrc
# Specify if branch coverage data should be collected andprocessed.
lcov_branch_coverage = 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? //去掉注釋,值改為1
# Include branch coverage datadisplay (can be disabled by the --no-branch-coverage option of genhtml)
genhtml_branch_coverage = 1 ? ? ? ? ? ? ? ? ? ? ? ? //去掉注釋,值改為1.
3. 編譯測(cè)試版本+目標(biāo)用例
./build.sh --product-name rk3568 --ccache --target-cpu arm64
./build.sh --product-name rk3568 --ccache --target-cpu arm64 --build-target make_test
tips:?make_test為編譯全部測(cè)試用例,也可編譯指定測(cè)試用例
?
Tips:如何檢查覆蓋率版本是否編譯成功?
編譯完成后需要在out/產(chǎn)品(rk3568)/obj/目錄下,根據(jù)源碼目錄查找到對(duì)應(yīng)的C/C++文件的gcno,說(shuō)明覆蓋率插樁成功
4. 在windows下搭建執(zhí)行環(huán)境,執(zhí)行測(cè)試用例
Windows環(huán)境搭建可參考官方文檔:
test_developertest: Development self-test framework | 開(kāi)發(fā)者自測(cè)試框架
執(zhí)行測(cè)試用例前可檢查設(shè)備是否在線,start.bat中執(zhí)行l(wèi)ist,若顯示online則設(shè)備在線。若設(shè)備離線,可在config文件夾中的user_config.xml文件中添加port和sn號(hào)。
?還需要在user_config.xml文件配置用例路徑(可參考以上搭建執(zhí)行環(huán)境官方文檔)
?tips:?<testcase>標(biāo)簽表示是否需要編譯用例;<dir>標(biāo)簽表示測(cè)試用例查找路徑。若不配置,覆蓋率文件會(huì)自動(dòng)生成在設(shè)備側(cè)的對(duì)應(yīng)源碼的編譯路徑下
在windows壞境下啟動(dòng)測(cè)試框架developtest/start.bat
執(zhí)行測(cè)試用例,這里以account子系統(tǒng)中的account_event_provider_test為例
run -t UT -ts account_event_provider_test -cov coverage
tips:?-t [TESTTYPE]: 指定測(cè)試用例類型,有UT,MST,ST,PERF,F(xiàn)UZZ,BENCHMARK等。(必選參數(shù))-tp [TESTPART]: 指定部件,可獨(dú)立使用。-tm [TESTMODULE]: 指定模塊,不可獨(dú)立使用,需結(jié)合-tp指定上級(jí)部件使用。-ts [TESTSUITE]: 指定測(cè)試套,可獨(dú)立使用。-tc [TESTCASE]: 指定測(cè)試用例,不可獨(dú)立使用,需結(jié)合-ts指定上級(jí)測(cè)試套使用。-h : 幫助命令。
執(zhí)行過(guò)程中可在設(shè)備中查看(tips: 此步是為了查看覆蓋率文件是否生成)
hdc_std shell在設(shè)備的data/test/obj查看
5. 查看測(cè)試生成gcda文件
執(zhí)行完畢后設(shè)備中的gcda會(huì)pull到test/developertest/reports/coverage中
Tips:(1)若在步驟3中生成gcda文件,但是在reports中沒(méi)有生成coverage,檢查coverage outpath是否配置正確
(2)在reports在建立coverage/data/cxx/測(cè)試套名,然后手動(dòng)將對(duì)應(yīng)obj目錄pull到coverage/data/cxx/測(cè)試套名 目錄下即可
-
二. 使用本地代碼覆蓋率腳本
6. 將localCoverage目錄解壓并挪至編譯機(jī)的test目錄
localCoverage的python腳本已上傳至gitee,鏈接如下:
本地代碼和接口覆蓋率: 用于本地代碼和接口覆蓋率的python腳本
?將步驟4中生成的coverage文件夾復(fù)制到localCoverage/codeCoverage/results目錄下
解壓完之后執(zhí)行
dos2unix test/localCoverage/codeCoverage/codeCoverage_gcov_lcov.py
7. 修改python腳本中的路徑
打開(kāi)localCoverage/codeCoverage/?codeCoverage_gcov_lcov.py
修改CODEPATH至代碼根目錄
修改OUTPUT路徑,此處產(chǎn)品名為rk3568
修改llvm-cov工具的路徑:修改codeCoverage目錄下的llvm-gcov.sh文件為(可通過(guò)在源碼路徑下搜索find . -name “l(fā)lvm-cov”即可)
Llvm-gcov.sh文件格式如果是dos,請(qǐng)改成unix(dos2unix llvm-gcov.sh)
exec?/home/cjj/open/prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-cov gcov "$@"
8. 執(zhí)行腳本
在test/localCoverage/codeCoverage目錄下執(zhí)行python codeCoverage_gcov_lcov.py即可
若出現(xiàn)下圖中錯(cuò)誤(若無(wú)錯(cuò)誤可忽略直接查看報(bào)告)
?可單獨(dú)運(yùn)行“single_test**”后面的命令:
lcov -c -b /home/cjj/open/out/rk3568 -d /home/cjj/open/test/localCoverage/codeCoverage/results/coverage/data/cxx/AccountEventProviderTest/obj/base/account --gcov-tool /home/cjj/open/test/localCoverage/codeCoverage/llvm-gcov.sh -o /home/cjj/open/test/localCoverage/codeCoverage/results/coverage/reports/cxx/single_test/AccountEventProviderTest/account_output.info --ignore-errors source,gcov
若運(yùn)行后出現(xiàn)need tool ...llvm-gcov.sh
?則可為llvm-gcov.sh賦予執(zhí)行權(quán)限:chmod 777 llvm-gcov.sh
重新執(zhí)行
lcov -c -b /home/cjj/open/out/rk3568 -d /home/cjj/open/test/localCoverage/codeCoverage/results/coverage/data/cxx/AccountEventProviderTest/obj/base/account --gcov-tool /home/cjj/open/test/localCoverage/codeCoverage/llvm-gcov.sh -o /home/cjj/open/test/localCoverage/codeCoverage/results/coverage/reports/cxx/single_test/AccountEventProviderTest/account_output.info --ignore-errors source,gcov
若出現(xiàn)以下錯(cuò)誤
可執(zhí)行dos2unix llvm-gcov.sh,將DOS格式文本文件轉(zhuǎn)換成Unix格式
重新運(yùn)行上述lcov -c -b...腳本直到出現(xiàn)
?然后再執(zhí)行
python codeCoverage_gcov_lcov.py
查看報(bào)告:在codeCoverage/results/coverage/reports/cxx/html下生成可視化報(bào)告,打開(kāi)index.html即可查看。
?
?
?三 . 本地接口覆蓋率腳本使用
9. 檢查接口覆蓋率的必要文件路徑
接口覆蓋率數(shù)據(jù)生成是依賴步驟二中代碼覆蓋率生成的info文件(ohos_codeCoverage.info)
10. 修改localCoverage/interfaceCoverage/get_innerkits_json.py到對(duì)應(yīng)路徑:
可直接修改為絕對(duì)路徑:
11. 執(zhí)行python get_innerkits_json.py
?檢查out/rk3568/packages/phone/innerkits/ohos-arm64/kits_modules_info.json文件的存在
12.?修改localcoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py
修改腳本中的line3~9到對(duì)應(yīng)路徑:
13. 執(zhí)行python interfaceCoverage_gcov_lcov.py
14.查看報(bào)告
在localCoverage/interfaceCoverage/results/coverage/interface_kits目錄挪至本地,查看報(bào)告
?
?四. 使用命令行生成本地代碼覆蓋率(步驟二也可手動(dòng)操作,已完成步驟二可忽略此步)
1. 將生成的.gcda合并到.o/.gcno文件夾中
.o/.gcno文件路徑一般為(可通過(guò)find . -name “*.gcno”查找)
Z:\home\cjj\open\out\rk3568\obj\base\account\os_account\services\accountmgr\src\AccountEventProviderTest
tips:gcda文件是執(zhí)行測(cè)試測(cè)試用例,在設(shè)備上自動(dòng)生成覆蓋率數(shù)據(jù)文件,.o/.gcno文件是linux編譯機(jī)上編譯過(guò)程中生成的。
合并后,gcda,.o/.gcno文件在同一文件夾下
2. 生成info文件
解析gcda依賴特定的gcov版本,可通過(guò)-gcov-tool指定,手動(dòng)創(chuàng)建llvm-gcov.sh文件
在源碼根目錄下創(chuàng)建文件夾local_tools
mkdir local_tools
創(chuàng)建llvm-gcov.sh文件:
cd local_tools/
touch llvm-gcov.sh
使用項(xiàng)目編譯是使用的clang對(duì)應(yīng)的llvm-cov版本,在文件中寫入以下內(nèi)容:
#!/usr/bin/env sh
exec /home/cjj/open/prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-cov gcov "$@"
增加可執(zhí)行權(quán)限:
chmod +x llvm-gcov.sh
生成info文件:
cd ~/open/out/rk3568/obj/base/account
lcov -d . -o cov_oa_all.info -c --gcov-tool ~/open/local_tools/llvm-gcov.sh
若直接用此時(shí)生成的info文件生成可視化數(shù)據(jù),則包含了其他模塊的統(tǒng)計(jì)信息
3. 去除非本模塊信息
cov_oa_all.info包含了其他模塊的統(tǒng)計(jì)信息,需要去除,使用-remove,根據(jù)實(shí)際情況設(shè)置
例如
lcov -o rm_cov_oa_all.info ?--remove cov_oa_all.info ?"*/third_party/*" "*/v1/*"
?4. 生成可視化數(shù)據(jù)
genhtml -o result --ignore-errors source rm_cov_oa_all.info
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-425428.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-425428.html
到了這里,關(guān)于OpenHarmony本地代碼和接口覆蓋率可視化操作梳理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!