原創(chuàng)|使用教程|編輯:張莉|2025-10-13 11:59:02.340|閱讀 13 次
概述:Parasoft C/C++test 是一款功能強(qiáng)大的 C/C++ 軟件測(cè)試工具,集成了靜態(tài)代碼分析、單元測(cè)試、集成測(cè)試和覆蓋率分析等功能,單元測(cè)試作為其關(guān)鍵功能之一,為了適配多樣化的目標(biāo)部署環(huán)境,C/C++test 設(shè)計(jì)了靈活的測(cè)試結(jié)果收集機(jī)制。通過(guò)Socket通訊方式來(lái)收集單元測(cè)試結(jié)果,從而擴(kuò)展其測(cè)試覆蓋范圍與應(yīng)用場(chǎng)景。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Parasoft C/C++test 是一款功能強(qiáng)大的 C/C++ 軟件測(cè)試工具,集成了靜態(tài)代碼分析、單元測(cè)試、集成測(cè)試和覆蓋率分析等功能,單元測(cè)試作為其關(guān)鍵功能之一,為了適配多樣化的目標(biāo)部署環(huán)境,C/C++test 設(shè)計(jì)了靈活的測(cè)試結(jié)果收集機(jī)制。通過(guò)Socket通訊方式來(lái)收集單元測(cè)試結(jié)果,從而擴(kuò)展其測(cè)試覆蓋范圍與應(yīng)用場(chǎng)景。
目前,C++Test內(nèi)建的單元測(cè)試分為兩類
1、基于文件系統(tǒng)的測(cè)試結(jié)果收集
2、基于串口通訊的測(cè)試結(jié)果收集(串口通訊基于固件庫(kù))
在windriver環(huán)境中,其通常能夠使用socket通訊方式回收結(jié)果,而目前的針對(duì)windriver的測(cè)試配置均為基于文件系統(tǒng)的,在某些沒(méi)有文件系統(tǒng)的環(huán)境中無(wú)法進(jìn)行測(cè)試。
讓C++Test通過(guò)網(wǎng)口收集測(cè)試結(jié)果的流程:
生成socket通訊的運(yùn)行時(shí)庫(kù)
構(gòu)建選項(xiàng)自動(dòng)化生成運(yùn)行時(shí)庫(kù)
a) 構(gòu)建選項(xiàng)->編譯器設(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) 修改測(cè)試執(zhí)行流確保自動(dòng)構(gòu)建運(yùn)行時(shí)庫(kù)
<BuildRuntimeLibStep ignoreDbgOpts="true" autoBuildDefault="true" />
如果沒(méi)有找到對(duì)應(yīng)字段表明該字段為default值,default為true
手動(dòng)編譯運(yùn)行時(shí)庫(kù)
找到安裝路徑根目錄下的engine\runtime 文件夾,拷貝一份為runtime_socket
打開(kāi)makefile文件,修改CHANNEL_TYPE:=file 為 CHANNEL_TYPE:=unix-socket;修改TARGET_CFG:=gcc-static.mk 為 TARGET_CFG:=xxx.mk(對(duì)應(yīng)編譯器)
通過(guò)make構(gòu)建運(yùn)行時(shí)庫(kù),如果遇到報(bào)錯(cuò)請(qǐng)調(diào)試編譯過(guò)程通常是由于頭文件路徑不正確導(dǎo)致,通過(guò) -I 選項(xiàng)指定路徑
修改構(gòu)建設(shè)置,直接將手動(dòng)編譯生成的運(yùn)行時(shí)庫(kù)鏈接
修改編譯器選項(xiàng)(非必須)
對(duì)于主機(jī)平臺(tái)的編譯器,C++Test內(nèi)建提供了便已完成運(yùn)行時(shí)庫(kù),并且該運(yùn)行時(shí)庫(kù)在編譯器模板中直接添加到鏈接中,將導(dǎo)致上述配置無(wú)效,因此需要修改編譯器配置文件。
選擇對(duì)應(yīng)編譯器添加自定義編譯器->修改gui.properties,找到link命令,刪除其中的 -L、-l 選項(xiàng)對(duì)應(yīng)字段或類似runtime.a字樣,避免其直接鏈接內(nèi)建的運(yùn)行時(shí)庫(kù)導(dǎo)致重定義或編碼格式不匹配問(wèn)題。
	 
 
注意:該運(yùn)行時(shí)庫(kù)的實(shí)現(xiàn)是基于linux/unix標(biāo)準(zhǔn)系統(tǒng)庫(kù)的,如嵌入式環(huán)境中系統(tǒng)庫(kù)不同,需要定制運(yùn)行時(shí)庫(kù)來(lái)實(shí)現(xiàn)通訊。
修改測(cè)試執(zhí)行流
添加ip、port屬性
添加host、results_port、coverage_port屬性用于配置C++Test地址,測(cè)試結(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í)行屬性運(yùn)行l(wèi)istener監(jiān)聽(tīng)收集結(jié)果日志
ExecuteTestsExecution 屬性為執(zhí)行屬性,因此本步驟及以下步驟的添加均為ExecuteTestsExecution的子屬性。另外配置中所運(yùn)用的均在安裝路徑根目錄下的engine\runtime\listeners 中找到對(duì)應(yīng)實(shí)現(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)程為后臺(tái)運(yùn)行,這將導(dǎo)致直接執(zhí)行測(cè)試并結(jié)束測(cè)試,讀取日志為空,需要通過(guò)Synchronize步驟來(lái)告訴C++Test測(cè)試還未結(jié)束等待獲取結(jié)果
-to 為 timeout的簡(jiǎn)稱用于設(shè)定超時(shí)時(shí)間
紅字部分可能需要根據(jù)實(shí)際情況做更改
### 添加執(zhí)行屬性運(yùn)行Synchronize執(zhí)行測(cè)試
	
<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)行下一步測(cè)試,并生成sync_file.init文件
### 添加測(cè)試運(yùn)行屬性run_test_exec
```
添加執(zhí)行屬性運(yùn)行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é)束,日志同步完成
這套配置流程,從修改通信宏定義、編譯定制運(yùn)行時(shí)庫(kù)到調(diào)整測(cè)試執(zhí)行流,展現(xiàn)了Parasoft C/C++test架構(gòu)的可擴(kuò)展性和對(duì)復(fù)雜部署場(chǎng)景的適應(yīng)能力。幫助客戶在特定目標(biāo)環(huán)境中實(shí)現(xiàn)可靠的測(cè)試結(jié)果收集,確保單元測(cè)試的順利執(zhí)行,同時(shí)為持續(xù)集成流程的落地提供了有力的技術(shù)保障。
關(guān)于慧都
慧都是一家行業(yè)數(shù)字化解決方案公司,專注于軟件、石油與工業(yè)領(lǐng)域,以深入的業(yè)務(wù)理解和行業(yè)經(jīng)驗(yàn),幫助企業(yè)實(shí)現(xiàn)智能化轉(zhuǎn)型與持續(xù)競(jìng)爭(zhēng)優(yōu)勢(shì)。在軟件工程領(lǐng)域,我們提供開(kāi)發(fā)控件、研發(fā)管理、代碼開(kāi)發(fā)、部署運(yùn)維等軟件開(kāi)發(fā)全鏈路所需的產(chǎn)品,提供正版授權(quán)采購(gòu)、技術(shù)選型、個(gè)性化維保等服務(wù),幫助客戶實(shí)現(xiàn)技術(shù)合規(guī)、降本增效與風(fēng)險(xiǎn)可控。
慧都科技作為Parasoft公司在中國(guó)區(qū)的官方授權(quán)合作伙伴,為國(guó)內(nèi)企業(yè)提供Parasoft C/C++test產(chǎn)品的正版授權(quán)、定制化部署與全生命周期技術(shù)支持與服務(wù)。我們致力于助力客戶精準(zhǔn)貫徹功能安全標(biāo)準(zhǔn)、全面提升軟件開(kāi)發(fā)效率、有效管控項(xiàng)目風(fēng)險(xiǎn),最終構(gòu)建符合國(guó)際標(biāo)準(zhǔn)的高質(zhì)量軟件體系。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn