我实际测过MATLAB R2021b以及Simulink Test 3.6,遭遇过脚本编译出现报错情况,测试用例运行不通过,自动化流程运行到一半就中断停下来等这些情况。
第一步 搭建自动化测试框架并配置环境变量
在MATLAB中开启,在命令行窗口键入sltest.testmanager.view来启动Test Manager,轻触一下左上角“New”按钮,选定“Test File”,存储成.mldatx文件,紧接着右键点击左侧“Test Browser”的根节点,挑选“Add Folder”,将存有仿真模型的文件夹路径添加进去。起到关键作用的一步是于“Simulation Input”当中勾选“Load initial state”,随后指定出一个初始化脚本,不然的话,模型加载完成之后全部都是默认值,而测试结果根本毫无参考价值可言。
【新手避坑】新手极易在这里出现报错“无法加载模型”,因MATLAB搜索路径未包括模型所在之文件夹,解决途径为:在命令行输入addpath(genpath(‘你的模型路径’)),接着采用savepath进行永久保存,如此重启MATLAB便无需再度配置呀。
第二步 编写自动化脚本并处理数据依赖
在Test Manager的“Automation”选项卡那儿,点击“New Test Case”,之后双击以将配置窗口打开。在“Test Type”的下拉选项里选择“Baseline Test”,其意义为把仿真输出同标准值进行比对。在“Baseline Criteria”内将容差设定成“0.01”,这是关键参数的最优推荐数值,若设置得过小好似 0.001 那般,将会导致温度波动之类的正常变化被判定为失败,而要是设置过大,则会遗漏真正的漏洞。
随后于“Callbacks”里撰写执行逻辑,即simOut = sim(‘模型名’, ‘StopTime’, ‘100’);data = simOut.logsout.get(‘信号名’).Values.Data。要是需要运行批量化场景时,将测试用例放置在for循环里,每次借助set_param去更改模型参数,诸如改变电阻值。
要避免踩坑,报错显示“Index exceeds array dimensions”这种情况,基本上都是由于信号名出现了错误,又或者是模型当中并未记录下那个信号。在此建议,要提前在模型里,对着信号线点击右键,选择“Log Selected Signals”,之后在脚本里,运用getElement进行精准抓取。要是你使用simOut.get通配的方式,同样也要记得去核对信号路径层级。
第三步 处理参数化测试与并行执行
在Test Manager左侧将测试用例选中,点击“Parameter Overrides”,再点击“Add Parameter”,把参数名输入为“R_load”,默认值设为“10”,随后点击“Generate Iterations”;此举能让一组变体测试自动生成。紧接着在“Iterations”里把数值改为[5,10,15,20],这四个值对应着四轮独立测试。
想跑得更为快速,点击“Run Using Parallel Computing”按钮,将并行池核心数设置为“4”,万一电脑具备8核。对比看一看两种方案:方案一是单个线程运行, 4个迭代跑完需100秒;方案二是并行池4核运行,总时长将至35秒左右,速度提高将近3倍,尤为适宜上百个参数组合的场景,不过要留意要是于模型之间共用全局变量,那就不要开启并行模式,不然会产生数据冲突。
【新手避坑】:存在这样一个高频且呈现完整状态的报错情况,即“Parallel pool failed to start because of license checkout failure”。其原因相当简易,具体表现为,要么是并行工具箱未曾被激活,又也或是许可证已达到被占满的状态。提供解决流程,先敲击ver parallel来确认工具箱有无安装,接着敲击parpool(4)实行手动启动池,要是出现报许可证错误的情况,前往官网重新配置许可证文件,另外更稳当的一步是直接关闭并行,转而改成for循环串行运转,虽说这样做事速度缓慢一些,然而至少能够完成运行。
这套方法主要适用于,在单机环境下的Simulink模型的功能回归测试,而不适用于,存在此类实物接口的、带有硬件在环那样的HIL场景,这是由于, HIL需要实时操作系统以及专门IO卡。要是你做的属于嵌入式代码级测试,那么则建议,换成那样的Polyspace或Embedded Coder的测试框架,或者更为直白讲来,直接把模型生成那样的C代码之后,再运用Tessy去做单元测试。










