半岛外围网上直营

Parasoft单元测试配置:使用Socket通信实现测试结果收集

原创|使用教程|编辑:张莉|2025-10-13 11:59:02.340|阅读 13 次

概述:Parasoft C/C++test 是一款功能强大的 C/C++ 软件测试工具,集成了静态代码分析、单元测试、集成测试和覆盖率分析等功能,单元测试作为其关键功能之一,为了适配多样化的目标部署环境,C/C++test 设计了灵活的测试结果收集机制。通过Socket通讯方式来收集单元测试结果,从而扩展其测试覆盖范围与应用场景。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

Parasoft C/C++test 是一款功能强大的 C/C++ 软件测试工具,集成了静态代码分析、单元测试、集成测试和覆盖率分析等功能,单元测试作为其关键功能之一,为了适配多样化的目标部署环境,C/C++test 设计了灵活的测试结果收集机制。通过Socket通讯方式来收集单元测试结果,从而扩展其测试覆盖范围与应用场景。

>>点击获取Parasoft C/C++test试用

目前,C++Test內建的单元测试分为两类

1、基于文件系统的测试结果收集

2、基于串口通讯的测试结果收集(串口通讯基于固件库)

在windriver环境中,其通常能够使用socket通讯方式回收结果,而目前的针对windriver的测试配置均为基于文件系统的,在某些没有文件系统的环境中无法进行测试。

让C++Test通过网口收集测试结果的流程:

  • 修为socket通讯
  • 通过构建选项修改
  • 手动编译运行时库方式修改
  • 修改测试执行流
  • 初始化网口(如需要)

生成socket通讯的运行时库

构建选项自动化生成运行时库

a) 构建选项->编译器设置,添加宏定义-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) 修改测试执行流确保自动构建运行时库

<BuildRuntimeLibStep ignoreDbgOpts="true" autoBuildDefault="true" />

如果没有找到对应字段表明该字段为default值,default为true

手动编译运行时库

找到安装路径根目录下的engine\runtime 文件夹,拷贝一份为runtime_socket

打开makefile文件,修改CHANNEL_TYPE:=file 为 CHANNEL_TYPE:=unix-socket;修改TARGET_CFG:=gcc-static.mk 为 TARGET_CFG:=xxx.mk(对应编译器)

通过make构建运行时库,如果遇到报错请调试编译过程通常是由于头文件路径不正确导致,通过 -I 选项指定路径

修改构建设置,直接将手动编译生成的运行时库链接

修改编译器选项(非必须)

对于主机平台的编译器,C++Test內建提供了便已完成运行时库,并且该运行时库在编译器模板中直接添加到链接中,将导致上述配置无效,因此需要修改编译器配置文件。

选择对应编译器添加自定义编译器->修改gui.properties,找到link命令,删除其中的 -L、-l 选项对应字段或类似runtime.a字样,避免其直接链接內建的运行时库导致重定义或编码格式不匹配问题。

注意:该运行时库的实现是基于linux/unix标准系统库的,如嵌入式环境中系统库不同,需要定制运行时库来实现通讯。

修改测试执行流

添加ipport属性

添加host、results_port、coverage_port属性用于配置C++Test地址,测试结果传输端口,覆盖率结果传输端口,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" /&gt;

 ```

 ![file](//img.parasoftchina.cn/wb/2024/01/17/65a7a470417b2.webp)

### 修改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}"
/>

### 添加执行属性运行listener监听收集结果日志

ExecuteTestsExecution 属性为执行属性,因此本步骤及以下步骤的添加均为ExecuteTestsExecution的子属性。另外配置中所运用的均在安装路径根目录下的engine\runtime\listeners 中找到对应实现。

<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" 设置该进程为后台运行,这将导致直接执行测试并结束测试,读取日志为空,需要通过Synchronize步骤来告诉C++Test测试还未结束等待获取结果

-to 为 timeout的简称用于设定超时时间

红字部分可能需要根据实际情况做更改

### 添加执行属性运行Synchronize执行测试

<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可以进行下一步测试,并生成sync_file.init文件

### 添加测试运行属性run_test_exec

```

添加执行属性运行Synchronize 结果收集完成

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已经同步结束,日志同步完成

这套配置流程,从修改通信宏定义、编译定制运行时库到调整测试执行流,展现了Parasoft C/C++test架构的可扩展性和对复杂部署场景的适应能力。帮助客户在特定目标环境中实现可靠的测试结果收集,确保单元测试的顺利执行,同时为持续集成流程的落地提供了有力的技术保障。

关于慧都

慧都是一家行业数字化解决方案公司,专注于软件、石油与工业领域,以深入的业务理解和行业经验,帮助企业实现智能化转型与持续竞争优势。在软件工程领域,我们提供开发控件、研发管理、代码开发、部署运维等软件开发全链路所需的产品,提供正版授权采购、技术选型、个性化维保等服务,帮助客户实现技术合规、降本增效与风险可控。

慧都科技作为Parasoft公司在中国区的官方授权合作伙伴,为国内企业提供Parasoft C/C++test产品的正版授权、定制化部署与全生命周期技术支持与服务。我们致力于助力客户精准贯彻功能安全标准、全面提升软件开发效率、有效管控项目风险,最终构建符合国际标准的高质量软件体系。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP
利记足球官网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 真人boyu·博鱼滚球网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 最大网上PM娱乐城盘口(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 正规雷火竞技官方买球(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 雷火竞技权威十大网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) boyu·博鱼信誉足球官网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 权威188BET足球网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 正规188BET足球大全(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新)