区别于基于udp的车内通信路由,基于some/ip协议的路由增加了服务发现(service discovery)和服务发布(service publish),那对于测试工程师来说,怎么实现can-some/ip路由的测试呢?
01认识路由实现方式
首先要了解基于some/ip协议的路由设计原则,如果功能实现在ethernet节点,则ethernet节点为server,网关为client,如果功能实现在can节点,则网关为server,ethernet节点为client,由网关实现ethernet节点与can节点之间的路由。包括两种路由方式:报文路由和信号路由。
那么,can报文和some/ip报文怎么实现对应呢,举个例子:
在以下示例中,通过some/ip header中的serviceid和methodid可以关联到指定的can报文。
其中:
a代表serviceid
b代表busid
c代表can messageid
e用来区分method,或event/notifier 消息
报文路由:can报文的payload映射为服务接口的payload。网关实现can和some/ip协议之间的报文路由,不改变数据内容和数据长度。
信号路由:服务接口中的参数映射为can报文中的信号。网关实现不同数据类型之间的转换。
02了解测试内容
报文路由不涉及信号内容解析,测试输入时可以不加载数据库文件也能完成测试,但是信号路由涉及some/ip接口参数的序列化和反序列化,需要加载数据库进行测试。
常见测试点
通信路由主要测试点包括:检查目标网段、报文类型、messageid、payload length、payload是否正确,路由延迟时间等是否满足要求。
逆向测试的测试点主要有:payload length大于或小于预期,无效id等
稳定性相关的测试点主要有:高负载,反复上下电,反复休眠等
以can-->some/ip 报文路由为例,已知某路由信息,测试payload一致性。
路由信息
源网段(can) | 目标网段(some/ip) |
messageid:0x100 dlc:8 | serviceid:0x0001 messagetype:notification eventgroupid:0x0001 notificationid:0x8100 |
测试步骤
step1:检查网关是否offer serviceid 0x0001
step2:tester模拟客户端,订阅serviceid为0x0001,eventgroupid为0x0001的事件组,检查网关是否回复对应的subscribeack
step3:在源网段模拟发送can报文,id为0x100,data为01 02 03 04 05 06 07 08,检查是否接收到对应的some/ip报文
step4:检查接收的payload与发送的payload是否一致
03自动化测试解决方案
测试环境
搭建的测试环境要能与dut建立通信,能控制dut上下电和唤醒。可以参考以下的测试拓扑来监控dut的通信,同时仿真tester节点,模拟can和ethernet节点与dut进行通信。该套测试系统由canoe测试软件、vt板卡、vn 5650,vn 16xx,程控电源和dut组成。
测试脚本
在上述测试步骤中,tester需要模拟can节点和some/ip服务客户端,测试脚本的开发可基于capl语言和vector提供的someip_il.dll文件,分为以下几个步骤来实现 。
❶ 在tcp/ip stack中,给tester设置ip/mac地址
❷ 模拟发送can报文
❸调用someipopenlocalapplicationendpoint函数,创建一个endpoint
❹ 调用someipcreateconsumedserviceinstance函数,指定serviceid和instanceid
❺ 调用someipaddconsumedeventgroup函数,指定eventgroupid
❻ 调用someipcreatefieldconsumer函数,指定notificationid,以及当接收到此notification报文时的回调
❼ 创建回调函数,当接收到notification报文时,比对payload是否一致
回调函数触发后,数据解析方法示例:
测试结果
canoe监控报文以及数据处理结果展示:
通过调用someip_il.dll文件,可以实现tester与网关之间的服务发现过程,以及服务接口的接收和调用,进一步达到测试的目的。
some/ip-->can路由的测试原理与上面相似,调用dll文件中的函数,实现模拟服务端的行为,信号路由的测试通过导入some/ip和can数据库文件,可以实现自动化测试。
以上就是我们给大家分享的can-some/ip路由测试的相关内容了,任何疑问或是自动化测试需求,都可以随时联系我们噢,感谢大家的阅读~