Canoe-Autosar网络管理测试脚本用例CAPL 这适用于Autosar NM主流测试用...

Canoe-Autosar网络管理测试脚本用例CAPL 这适用于Autosar NM主流测试用例 1.启动程序 2.加载配置文件txt 3.点击修改配置文件,自动弹出配置文件窗口 4.选择测试内容 5.点击运行 6.测试完成打印报告 7.根目录下对应测试记录 接单项目:Can通信电压读取,6501设备和canstress的Busoff,Autosar,Osek,间接NM,诊断Uds,bootloader,Tp,下线配置,各种脚本等。 全部是自动化测试案例包括出报告。 。

CAPL脚本这玩意儿在汽车电子测试里就像瑞士军刀,搞AUTOSAR网络管理测试的时候没它还真玩不转。今天咱们拿Canoe环境下的自动化测试流程开刀,手把手拆解怎么用脚本把网络管理测试给整利索了。

Canoe-Autosar网络管理测试脚本用例CAPL 这适用于Autosar NM主流测试用例 1.启动程序 2.加载配置文件txt 3.点击修改配置文件,自动弹出配置文件窗口 4.选择测试内容 5.点击运行 6.测试完成打印报告 7.根目录下对应测试记录 接单项目:Can通信电压读取,6501设备和canstress的Busoff,Autosar,Osek,间接NM,诊断Uds,bootloader,Tp,下线配置,各种脚本等。 全部是自动化测试案例包括出报告。 。

先看这测试脚本的七步走流程,核心代码骨架其实就长这样:

CAPL 复制代码
on start {
    // 步骤1-2合体操作
    sysExecute("C:\\CANoe_Config\\NM_Test.exe");
    fileHandle = openFile("NM_Config.txt", 2);
    readFile(fileHandle, configData);
}

on key 'F5' {  // 快捷键触发测试
    // 步骤3-5的骚操作
    configEditor("dynamic_params");
    selectTestSuite(testCaseID);
    testBench.start();
}

配置文件处理这块有个坑得特别注意------路径转义。见过太多新手栽在Windows路径的反斜杠上,用CAPL的路径常量宏能救命:

CAPL 复制代码
#define PROJECT_DIR getFilePath(1)  // 获取当前工程目录
fileHandle = openFile(PROJECT_DIR ^ "NM_Config.txt", 2);

测试项选择这块得玩点花样,搞个智能筛选器比手动勾选高效十倍。看这个根据报文周期自动匹配测试用例的骚操作:

CAPL 复制代码
int detectCycleTime() {
    // 通过统计NM报文间隔识别网络配置
    timer t;
    float intervals[10];
    on message NM_Msg {
        intervals[count++] = timeNow() - lastTime;
        if(count >=10) cancelTimer(t);
    }
    return modeSelect(intervals);  // 返回匹配到的测试模式
}

诊断测试里UDS服务掺和网络管理的时候,脚本得会玩双线程。这个回调结构能同时伺候好NM和诊断服务:

CAPL 复制代码
on message Diag_Resp {
    if(this.service == 0x31) {  // 0x31是例程控制
        // 启动NM报文触发
        setTimer(nmTrigger, 50);
    }
}

on timer nmTrigger {
    NM_Msg.control = 0x01;
    output(NM_Msg);
}

报告生成环节最怕数据对齐,这个表格生成技巧能让你的测试报告瞬间专业:

CAPL 复制代码
void generateReport() {
    writeLine("========================================");
    writeLine("| 测试项       | 状态   | 时间戳     |");
    writeLine("----------------------------------------");
    for(int i=0; i<testCount; i++) {
        writeLine("| %-12s | %-6s | %-10d |", 
                 testCases[i].name, 
                 testCases[i].status ? "PASS" : "FAIL", 
                 testCases[i].timestamp);
    }
    addLogAttachment("TestReport.log");  // 自动挂载到CANoe日志
}

实战中遇见过一个奇葩案例:某车型NM超时设置和Bootloader刷写存在冲突。这时候就得祭出条件触发大法:

CAPL 复制代码
on preStart {
    // 检测当前模式
    if(getApplicationMode() == 2) {  // 刷写模式
        setNMTimeout(5000);  // 临时调整NM超时参数
    }
}

玩自动化测试脚本最爽的莫过于下班前点个运行,第二天直接看报告。不过千万别真这么干------我见过有人脚本里忘关总线电源,第二天整车ECU电量全放光了。所以靠谱的收尾操作得加上:

CAPL 复制代码
on stop {
    allCancel();  // 停止所有定时器
    resetRelay(0xFF);  // 切断所有继电器
    setVoltage(0);  // 电源归零
}

这些套路在接单项目里尤其好用,特别是Busoff测试这种需要精准控制故障注入的场景。记得活用CAPL的故障注入函数库,比手动造报文省事多了:

CAPL 复制代码
// 触发Busoff的暴力美学
void triggerBusoff() {
    setCanError(1);  // 开启错误帧
    for(int i=0; i<300; i++) {
        output(Error_Frame);  // 连续发送错误帧
        delay(1);
    }
}

最后说个真事:有次在间接网络管理测试中,因为脚本的定时器精度问题导致整车网络唤醒失败。后来改用硬件同步触发才解决,所以关键部位还是得相信硬件时间戳:

CAPL 复制代码
on hwTimer 1ms {  // 硬件级定时器
    nmCounter++;
    if(nmCounter >= wakeupThreshold) {
        setWakeupLine(1);
    }
}

玩转这些脚本技巧,基本上各种网络管理测试需求都能手到擒来。不过切记,自动化测试脚本不是银弹,遇到玄学问题还是得老老实实上示波器抓波形。

相关推荐
Geoking.12 天前
【设计模式】装饰者模式详解
设计模式·装饰器模式
蔺太微13 天前
装饰器模式(Decorator Pattern)
设计模式·装饰器模式
moxiaoran575314 天前
使用策略模式+装饰器模式实现接口防重复提交
java·装饰器模式
sxlishaobin14 天前
设计模式之装饰器模式
java·设计模式·装饰器模式
apolloyhl15 天前
Decorator 装饰模式
装饰器模式
崎岖Qiu20 天前
【设计模式笔记23】:长文解析-深刻理解「装饰器模式」
java·笔记·设计模式·装饰器模式
资生算法程序员_畅想家_剑魔1 个月前
Java常见技术分享-10-装饰器模式
java·开发语言·装饰器模式
世洋Blog1 个月前
装饰器模式实践:告别臃肿的继承链,优雅解耦初始化状态管理
unity·设计模式·c#·装饰器模式
qq19226381 个月前
基于NSGA2的多目标车辆路径规划 目标1为受灾点缺货量最大值最小,目标2为需求点最晚送达时间最小
装饰器模式