说明
本文记录simulink test在使用过程中的心得,包含使用过程中新的发现及提高测试效率的一些技巧。
本文提到的内容均基于以下运行环境:
MATLAB 版本 9.3 (R2017b)
Simulink 版本 9.0 (R2017b)
Win10系统
1、simulink test 如何得出模型覆盖度报告?
首先,两个设置:
1)模型界面下,进入analysis --> Coverage -->Settings,勾选最上面的“Enable coverage analysis”,并设置需要做的覆盖率测试项目
2)simulink test中测试用例的设置
进入analysis --> test managerment,点击对应test file或者test suite的 open in tab,在里面设置 coverage settings,勾选“record coverage for referenced models”
之后,运行测试用例。在测试结果中,可以看到一个覆盖率报告
最后,点击上图中的红框“add tests for missing coverage”,软件会自动补充测试用例。
点击上图中的最后一条,便可以看到覆盖率测试报告了,且是涵盖了步骤一种的所有覆盖率测试项目。
2 如何用verify查看结果
参考链接:(test sequence语法)https://www.mathworks.com/help/sltest/ug/syntax-for-test-sequences-and-assessments.html
3、测试时间较长如何保证仿真步骤能够被运行
需要将仿真时长加长至能够满足测试的最长时间,在harness模型中设置即可
4、关于时序问题
1)测试时需涉及到时序问题,需关注stateflow,stateflow中两个状态之间跳转时会经历过一个单元模块的运行周期(也即仿真步长)
2)simulink test每一个step都为一个单元模块运行周期
3)simulink test搭建的测试模型,其输出有一个步长的延时。也即,simulink test仿真的输出值与模型实际输出值的对应要错开一个步长
5、如何使其不受仿真时间约束,停止在最后一个测试步骤
在原有用例的最后再新增一个step(命名为DoNothing,内容为空),让该步骤作为用例执行的最后一个步骤 。
解决的问题:假如希望测试软件运行到某个步骤后停止,而又不明确总的运行时间。这时候运行到最后一个步骤后,仿真总时长还剩余,则模型会继续往下执行,而simulink test的测试结果判定语句则会停留在最后一步。这样就可能出现,模型的运行结果发生了变化,而simulink test判定结果的语句却维持不变。显然,simulink test给出的最终结果是测试fail。
利用该方法,可以不管设置的仿真时长,用例运行到这一DoNothing步骤后,模型即不会再往下执行,从而保证测试运行结果的唯一性。
6、simulink test用例脚本中需不需要对数值加强制类型转换?
答案是:一定要。simulink test的测试脚本中默认数值为single类型,如果不加强制类型转换,则很可能会报错。
举例: 用verify写了个判定语句 verify(v_BROBMSChrgRdy_u8 == 0, 'The real value is %d', v_BROBMSChrgRdy_u8);
运行后的测试结果中,提示可能产生非预期的结果:
而修改后verify(v_BROBMSChrgRdy_u8 == uint16(0), 'The real value is %d', v_BROBMSChrgRdy_u8);该报错提示消失。