
1. 为什么需要自动化测试在工程开发中手动测试Simulink模型既耗时又容易出错。想象一下每次修改模型参数后都要手动运行几十个测试用例记录结果再逐个比对期望值。这种重复劳动不仅效率低下还容易因为人为疏忽导致测试结果不准确。我曾在项目中遇到过这样的情况一个简单的控制模型每次迭代都要花费半天时间手动测试。后来改用自动化脚本后同样的测试流程只需5分钟就能完成而且结果更加可靠。这就是自动化测试的魅力所在。MATLAB脚本可以完美解决这个问题。通过编写脚本我们可以实现自动读取Excel中的测试用例批量运行Simulink模型自动比对实际输出与期望值生成详细的测试报告2. 搭建自动化测试框架2.1 准备测试环境首先需要准备好测试环境。我建议创建一个专门的测试文件夹包含以下文件待测试的Simulink模型.slx文件测试用例Excel表格测试脚本.m文件测试用例Excel的格式很关键。通常我会这样设计第一列测试用例编号第二列及后续列输入参数最后几列期望输出值可以添加一列用于记录实际输出再添加一列用于记录测试结果通过/失败2.2 编写基础测试脚本下面是一个基础的测试脚本框架clc clear % 读取测试用例 [num, txt] xlsread(testcase.xlsx); input1 num(1:end,2); % 假设第二列是第一个输入 input2 num(1:end,3); % 第三列是第二个输入 expected_output num(1:end,4); % 第四列是期望输出 % 设置仿真参数 step_size 0.01; stop_time step_size*(size(input1,1) - 1); t [0:step_size:stop_time];3. 实现自动化测试流程3.1 连接模型与测试数据要让Simulink模型使用脚本中的数据需要正确设置模型输入端口。我通常这样做% 查找模型中的输入输出端口 InportInfo find_system(test_model,FindAll,On,SearchDepth,1,BlockType,Inport); OutportInfo find_system(test_model,SearchDepth,1,BlockType,Outport); % 准备输入数据 u [input1, input2]; % 合并多个输入 % 运行仿真 simout sim(test_model,... SolverType, Fixed-step,... Solver, ode4,... FixedStep, num2str(step_size),... StopTime, num2str(stop_time),... LoadExternalInput,on);3.2 结果比对与报告生成测试的核心是比对实际输出与期望值。这里有几个实用技巧% 获取仿真输出 actual_output simout.yout{1}.Values.Data; % 结果比对考虑浮点数精度 tolerance 1e-6; % 设置合理的容差 ResultJudge abs(actual_output - expected_output) tolerance; % 生成测试报告 test_report cell(size(ResultJudge,1), 3); for i 1:size(ResultJudge,1) test_report{i,1} [TestCase_ num2str(i)]; test_report{i,2} expected_output(i); test_report{i,3} actual_output(i); test_report{i,4} ResultJudge(i); end % 写入Excel xlswrite(test_report.xlsx, test_report);4. 高级技巧与实战经验4.1 处理复杂模型测试对于包含多个子系统的复杂模型测试时需要特别注意确保所有输入端口都被正确识别可能需要为不同子系统设置不同的测试用例考虑添加模型初始化脚本我常用的一个技巧是使用set_param函数动态修改模型参数% 动态修改模型参数示例 set_param(test_model/Subsystem1,Parameter1,Value1);4.2 提高测试效率当测试用例很多时可以考虑使用MATLAB的并行计算工具箱加速测试实现增量测试只测试修改过的部分添加测试覆盖率统计这里分享一个并行测试的代码片段% 启用并行池 if isempty(gcp(nocreate)) parpool; end % 并行处理测试用例 parfor i 1:size(test_cases,1) % 每个worker独立运行测试 run_single_test(test_cases(i,:)); end5. 常见问题排查在实际项目中我遇到过各种奇怪的问题。这里分享几个典型问题及解决方法模型无法加载外部输入检查模型配置确保LoadExternalInput选项已启用确认输入数据维度与模型端口匹配仿真结果不稳定尝试调整求解器类型和步长检查模型是否有代数环Excel写入失败确保文件没有被其他程序占用考虑使用更新的writetable函数替代xlswrite一个实用的调试技巧是在脚本中添加检查点% 调试检查点 disp([当前处理测试用例 num2str(i)]); disp([输入值 num2str(u(i,:))]); disp([期望输出 num2str(expected_output(i))]); disp([实际输出 num2str(actual_output(i))]);6. 扩展应用场景自动化测试脚本不仅适用于功能验证还可以用于参数优化自动搜索最优参数组合回归测试确保模型修改不会引入新问题模型验证对比不同版本模型的性能差异比如我们可以扩展脚本实现参数扫描% 参数扫描示例 param_values linspace(0.1, 1.0, 10); % 生成10个参数值 results zeros(length(param_values), 1); for p 1:length(param_values) set_param(test_model/Block1,Gain,num2str(param_values(p))); simout sim(test_model); results(p) calculate_performance(simout); end % 找出最佳参数 [best_value, best_idx] min(results); disp([最佳参数值 num2str(param_values(best_idx))]);在实际项目中这套自动化测试方法帮我节省了至少70%的测试时间。特别是在迭代开发阶段每次修改后只需运行脚本就能立即知道是否引入了问题大大提高了开发效率。