Simulink Test笔记(含一些小技巧)一

说明

本文记录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”

simulink test的设置

之后,运行测试用例。在测试结果中,可以看到一个覆盖率报告

测试结果中覆盖率情况

 最后,点击上图中的红框“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);该报错提示消失。 

猜你喜欢

转载自blog.csdn.net/Eigrl/article/details/82912467