本人实际测试了MATLAB R2021b以及Simulink Test 3.6 , 遭遇过脚本编译出现报错情况 , 测试用例运行不通过 , 自动化流程运行到一半就中断停下来等这些状况 , 新手只要依照……
本人实际测试了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去做单元测试。
微信扫一扫
还没有评论呢,快来抢沙发~