原創(chuàng)|使用教程|編輯:張莉|2025-10-13 11:59:02.340|閱讀 13 次
概述:Parasoft C/C++test 是一款功能強(qiáng)大的 C/C++ 軟件測試工具,集成了靜態(tài)代碼分析、單元測試、集成測試和覆蓋率分析等功能,單元測試作為其關(guān)鍵功能之一,為了適配多樣化的目標(biāo)部署環(huán)境,C/C++test 設(shè)計了靈活的測試結(jié)果收集機(jī)制。通過Socket通訊方式來收集單元測試結(jié)果,從而擴(kuò)展其測試覆蓋范圍與應(yīng)用場景。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Parasoft C/C++test 是一款功能強(qiáng)大的 C/C++ 軟件測試工具,集成了靜態(tài)代碼分析、單元測試、集成測試和覆蓋率分析等功能,單元測試作為其關(guān)鍵功能之一,為了適配多樣化的目標(biāo)部署環(huán)境,C/C++test 設(shè)計了靈活的測試結(jié)果收集機(jī)制。通過Socket通訊方式來收集單元測試結(jié)果,從而擴(kuò)展其測試覆蓋范圍與應(yīng)用場景。
目前,C++Test內(nèi)建的單元測試分為兩類
1、基于文件系統(tǒng)的測試結(jié)果收集
2、基于串口通訊的測試結(jié)果收集(串口通訊基于固件庫)
在windriver環(huán)境中,其通常能夠使用socket通訊方式回收結(jié)果,而目前的針對windriver的測試配置均為基于文件系統(tǒng)的,在某些沒有文件系統(tǒng)的環(huán)境中無法進(jìn)行測試。
讓C++Test通過網(wǎng)口收集測試結(jié)果的流程:
生成socket通訊的運行時庫
構(gòu)建選項自動化生成運行時庫
a) 構(gòu)建選項->編譯器設(shè)置,添加宏定義-D CPPTEST_USE_UNIX_SOCKET_COMMUNICATION指定C++Test使用socket通訊方式
其它支持的宏:
CPPTEST_USE_FILE_COMMUNICATIONS
CPPTEST_USE_FILE_SPLIT_COMMUNICATIONS
CPPTEST_USE_FILE_BUFFERED_COMMUNICATION
CPPTEST_USE_UNIX_SOCKET_COMMUNICATION
CPPTEST_USE_WIN_SOCKET_COMMUNICATION
CPPTEST_USE_RS232_WIN_COMMUNICATION
CPPTEST_USE_RS232_UNIX_COMMUNICATION
CPPTEST_USE_RS232_STM32F103ZE_COMMUNICATION
CPPTEST_USE_CUSTOM_COMMUNICATION
b) 修改測試執(zhí)行流確保自動構(gòu)建運行時庫
<BuildRuntimeLibStep ignoreDbgOpts="true" autoBuildDefault="true" />
如果沒有找到對應(yīng)字段表明該字段為default值,default為true
手動編譯運行時庫
找到安裝路徑根目錄下的engine\runtime 文件夾,拷貝一份為runtime_socket
打開makefile文件,修改CHANNEL_TYPE:=file 為 CHANNEL_TYPE:=unix-socket;修改TARGET_CFG:=gcc-static.mk 為 TARGET_CFG:=xxx.mk(對應(yīng)編譯器)
通過make構(gòu)建運行時庫,如果遇到報錯請調(diào)試編譯過程通常是由于頭文件路徑不正確導(dǎo)致,通過 -I 選項指定路徑
修改構(gòu)建設(shè)置,直接將手動編譯生成的運行時庫鏈接
修改編譯器選項(非必須)
對于主機(jī)平臺的編譯器,C++Test內(nèi)建提供了便已完成運行時庫,并且該運行時庫在編譯器模板中直接添加到鏈接中,將導(dǎo)致上述配置無效,因此需要修改編譯器配置文件。
選擇對應(yīng)編譯器添加自定義編譯器->修改gui.properties,找到link命令,刪除其中的 -L、-l 選項對應(yīng)字段或類似runtime.a字樣,避免其直接鏈接內(nèi)建的運行時庫導(dǎo)致重定義或編碼格式不匹配問題。
注意:該運行時庫的實現(xiàn)是基于linux/unix標(biāo)準(zhǔn)系統(tǒng)庫的,如嵌入式環(huán)境中系統(tǒng)庫不同,需要定制運行時庫來實現(xiàn)通訊。
修改測試執(zhí)行流
添加ip、port屬性
添加host、results_port、coverage_port屬性用于配置C++Test地址,測試結(jié)果傳輸端口,覆蓋率結(jié)果傳輸端口,uiEditable屬性決定是否可以在界面中編輯
<SetProperty key="host" value="127.0.0.1" uiEditable="true" />
<SetProperty key="results_port" value="2567" uiEditable="true" />
<SetProperty key="coverage_port" value="2568" uiEditable="true" />
```

### 修改testrunner屬性
使用TestRunnerWithSocketsGenerationStep代替TestRunnerGenerationStep,具體配置如下:
<TestRunnerWithSocketsGenerationStep
testSuiteConfigFile="${cpptest:testware_loc}/testsuites.xml"
testrunnerCFile="${cpptest:testware_loc}/cpptest_testrunner.c"
testrunnerCppFile="${cpptest:testware_loc}/cpptest_testrunner.cpp"
resultsHost="${cpptestproperty:host}"
testLogPort="${cpptestproperty:results_port}"
covLogPort="${cpptestproperty:coverage_port}"
/>
### 添加執(zhí)行屬性運行l(wèi)istener監(jiān)聽收集結(jié)果日志
ExecuteTestsExecution 屬性為執(zhí)行屬性,因此本步驟及以下步驟的添加均為ExecuteTestsExecution的子屬性。另外配置中所運用的均在安裝路徑根目錄下的engine\runtime\listeners 中找到對應(yīng)實現(xiàn)。
<CustomStep
id="run_socket_listeners"
label="Running Socket Listeners..."
commandLine=""java" -cp "${cpptest:cfg_dir}/../runtime_socket/listeners/socket_listener"
SocketListener –channel "${cpptestproperty:results_port}@${cpptest:testware_loc}/cpptest_results.tlog" --channel "${cpptestproperty:coverage_port}@${cpptest:testware_loc}/cpptest_results.clog"
-sf "${cpptest:testware_loc}/sync_file" -to 60"
workingDir="${cpptest:testware_loc}"
result="${cpptest:testware_loc}/cpptest_results.res"
runInBackground="true"/>
runInBackground="true" 設(shè)置該進(jìn)程為后臺運行,這將導(dǎo)致直接執(zhí)行測試并結(jié)束測試,讀取日志為空,需要通過Synchronize步驟來告訴C++Test測試還未結(jié)束等待獲取結(jié)果
-to 為 timeout的簡稱用于設(shè)定超時時間
紅字部分可能需要根據(jù)實際情況做更改
### 添加執(zhí)行屬性運行Synchronize執(zhí)行測試
<CustomStep
id="run_synchronization"
label="Running Synchronization..."
commandLine=""java" -cp "${cpptest:cfg_dir}/../runtime_socket/listeners/socket_listener"
Synchronize -sf "${cpptest:testware_loc}/sync_file.init" -to 60"
workingDir="${cpptest:testware_loc}"
result="${cpptest:testware_loc}/cpptest_results.res"
runInBackground="false"/>
用于告訴C++Test可以進(jìn)行下一步測試,并生成sync_file.init文件
### 添加測試運行屬性run_test_exec
```
添加執(zhí)行屬性運行Synchronize 結(jié)果收集完成
id="run_synchronization"
label="Running Synchronization..."
commandLine=""java" -cp "${cpptest:cfg_dir}/../runtime_socket/listeners/socket_listener"
Synchronize -sf "${cpptest:testware_loc}/sync_file.final" -to 60"
workingDir="${cpptest:testware_loc}"
result="${cpptest:testware_loc}/cpptest_results.res"
runInBackground="false"
/>
生成sync_file.final文件,告訴listener已經(jīng)同步結(jié)束,日志同步完成
這套配置流程,從修改通信宏定義、編譯定制運行時庫到調(diào)整測試執(zhí)行流,展現(xiàn)了Parasoft C/C++test架構(gòu)的可擴(kuò)展性和對復(fù)雜部署場景的適應(yīng)能力。幫助客戶在特定目標(biāo)環(huán)境中實現(xiàn)可靠的測試結(jié)果收集,確保單元測試的順利執(zhí)行,同時為持續(xù)集成流程的落地提供了有力的技術(shù)保障。
關(guān)于慧都
慧都是一家行業(yè)數(shù)字化解決方案公司,專注于軟件、石油與工業(yè)領(lǐng)域,以深入的業(yè)務(wù)理解和行業(yè)經(jīng)驗,幫助企業(yè)實現(xiàn)智能化轉(zhuǎn)型與持續(xù)競爭優(yōu)勢。在軟件工程領(lǐng)域,我們提供開發(fā)控件、研發(fā)管理、代碼開發(fā)、部署運維等軟件開發(fā)全鏈路所需的產(chǎn)品,提供正版授權(quán)采購、技術(shù)選型、個性化維保等服務(wù),幫助客戶實現(xiàn)技術(shù)合規(guī)、降本增效與風(fēng)險可控。
慧都科技作為Parasoft公司在中國區(qū)的官方授權(quán)合作伙伴,為國內(nèi)企業(yè)提供Parasoft C/C++test產(chǎn)品的正版授權(quán)、定制化部署與全生命周期技術(shù)支持與服務(wù)。我們致力于助力客戶精準(zhǔn)貫徹功能安全標(biāo)準(zhǔn)、全面提升軟件開發(fā)效率、有效管控項目風(fēng)險,最終構(gòu)建符合國際標(biāo)準(zhǔn)的高質(zhì)量軟件體系。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn