Test Sequence与Test Manager联合测试Simulink模型

先了解几个名词

Test harness-用来创建测试模型,生成输入输出接口

Test Manager-管理Test harness,运行测试用例,生成测试报告

Test Sequence-编辑测试用例

除了Test Sequece可以编辑测试用例外,还有Excel,Signal Build等也可以编辑测试用例

目录

选择Test Sequence的优势:

测试流程:

建立Test harness

1.右键被测模型,选择Test harness->creat for xx

2.选择Test sequence模式,勾选生成Test Assessment

Test Sequence编写测试用例

Step:即测试步,设定输出值,传递给模型。

Transition-跳转条件

Next Step-下个测试步

Description

Test Assesment编写预期结果

联合Test Manager进行测试

打开Simulink Test Manager,新建Test file

设置Test file属性

执行测试用例

分析测试结果,完善测试用例

生成测试报告,覆盖度报告

测试步中的一些可能有用的函数

ramp(x)-线性

heaviside(x)-阶跃

sawtooth(x) -锯齿波

square(x) -方波

triangle(x) -三角波

verify-验证测试结果

assert-断言,停止仿真


选择Test Sequence的优势:

可以设置不同的测试步,按流程测试。对于逻辑类的测试比较方便,可以设置等待,线性变化输入。对于Excel来说,只能基于输入信号改变去测试,而Test Sequence可以添加一些逻辑。可以自定义验证内容,而非简单的值对比判断。

不太好的地方:一个Test Sequence只能设置一条case

多个测试用例实现的方案:

1.测试完一条用例后需要重新初始化输入,加长模型仿真时间来实现

2.定义多个test harness,一个test harness对应一个testcase

matalb对于Simulink Test提供了很多API接口,便于编辑脚本来实现自动化测试。

一步一步来,先手动测试,搞清楚测试流程。

Test Sequence测试时输出的若是bus信号会有问题,建议拆分成普通端口输出。

对于Test Sequence来说,建立好一个完整的测试步后,对于后面再修改模型,测试步仍可以重复使用提高效率(即使没有自动测试脚本)。

测试流程:

建立Test harness

拿到需要测试的模型,首先将其封装为Test harness,选择Test harness的属性。注意设置模型的仿真步长需要设置为离散的,周期按实际运行周期确定

1.右键被测模型,选择Test harness->creat for xx

2.选择Test sequence模式,勾选生成Test Assessment

点击ok,即可创建并打开Test harness

中间是测试模型,左边是生成的Test sequence,Test sequence输入的是模型的输出,输出是模型的输入。

最右边的是Test Assessment,输入是模型的输入及模型的输出.

在Test sequence中编写测试步骤,Test Assessment中设定期望结果

Test Sequence编写测试用例

双击打开Test Sequence,界面如下:

输入输出基本都是定好的,不用改。

主要编辑Step,Transition,Next Step,Description.

Step:即测试步,设定输出值,传递给模型。

对于测试步,有普通的测试步和条件测试步,普通测试步正常执行,如果设置的是条件测试步,则子测试步可以设置进入的条件,也就是when decompostion(父测试步设置为when decompostion后,子测试步才可以使用when 条件)

上面的设置项中还有,Add step,字面意思,很好理解。

Break while executing step也就是平时调试中的设置断点,该功能在查找bug时会经常用到。

对于测试输入(输出给模型的值),可以使用ramp(et)函数来改变输入的值,表示的是从0-测试步执行时间(若该测试步执行时间为3s,则线性输出0-3)

根据测试用例设置合理的输入,可以提高测试效率。

when decomposition可以用来设置在某些条件满足的情况下,改变输入。

Transition-跳转条件

从上一个测试步跳转到下一个测试步的条件,若直接跳转,可以填true

可以增加after(x,sec),用来延时x秒后才进行跳转

也可以判断模型的输出(为期望值)后再跳转。

Next Step-下个测试步

在Step后创建的测试步,可以在Next Step选择,用来确定为下一个测试步。

Description

测试步描述,用来描述测试步的具体内容,合理的描述有助于更好的理解测试用例。

在设计测试用例时,需要考虑模型仿真运行的时间。

Test Assesment编写预期结果

根据设计的输入,设定预期的输出结果。

主要使用verify函数,该函数是用来验证表达式是否为真的。具体可以看最后一节或者查看help

在使用when decomposition时,最后一个测试步需要是没有条件的(即一定有一个条件可以进入)。

上面的测试验证中,根据不同的测试时间来判断不同的执行结果。

设置好verify后,后面可以在Test Manager测试并查看测试结果

联合Test Manager进行测试

打开Simulink Test Manager,新建Test file

选择模型,路径,测试类型-基本类型

设置Test file属性

在设置Testfile属性之前,需要设置模型的属性,以保证可以正常生成测试覆盖度报告。

设置Enable coverage analysis

Coverage metrics选择MCDC(这个后面在Test manager中还可以选择),设置完后保存。

重新打开Test Manager,选择之前创建的Test file

一般模型测试覆盖度勾选上述三个类型就够了。勾选只能在最上层(即Test file层),下面的层级无法修改

决策覆盖(DC)

条件覆盖(CC)

改进条件/决策覆盖(MDCD),

执行测试用例

配置好Test file后,可以点击Run执行测试用例。执行完后若验证的结果正确,则会显示绿色通过,若验证失败,则会显示红色fail.

分析测试结果,完善测试用例

对于生成的测试结果,若发现有异常,可以通过输出的观测信号辅助判断是否为Bug。若有bug,及时修复后再次进行测试验证。

根据测试结果,完善测试用例,以达到要求的覆盖率指标(一般MCDC要求80%以上)

生成测试报告,覆盖度报告

对于生成的测试结果,右键选择Create report

生成的报告:

覆盖率报告:

对于小型的原子子系统模型,可以通过Add Tests for missing coverage来自动生成需要的测试用例输入,以增加不足的覆盖率。

对于复杂的模型,无法使用该功能,会报错。建议通过设计合适的测试用例输入来满足覆盖率要求。

测试步中的一些可能有用的函数

ramp(x)-线性

ramp(et)根据测试步执行的时间返回值,也就是测试步执行时间,可以用这个函数来线性变化输出,et表示的是当前测试步执行的时间。

heaviside(x)-阶跃

creates a Heaviside step signal. Heaviside signals are also called unit step signals and are discontinuous functions. They return 0 for x < 0 and 1 for x > 0.

创建一个阶跃信号,x<0时输出0,x>0时输出1

heaviside(et-10) 10s后输出1

sawtooth(x) -锯齿波

creates a sawtooth wave with a period of 1 and range -1 to 1. In the interval 0 <= x < 1, square(x) increases. The difference between triangle waves and sawtooth waves is that a triangle wave has equal rise and fall times.

创建一个锯齿波,要指定测试步骤内的锯齿波周期数,请将此运算符与经过时间(et)运算符一起使用。

Create a sawtooth wave with a period of 10.

sawtooth(et/10) 10s一个周期的锯齿波

square(x) -方波

creates a square wave with a period of 1 and range -1 to 1. In the interval 0 <= x < 1, square(x) returns 1 for 0 <= x < 0.5 and -1 for 0.5 <= x < 1.

square(x)创建周期为1且范围为-1到1的方波。在区间0<=x<1中,square(x)返回1表示0<=x<0.5,返回-1表示0.5<=x<1。

square(et/10) 10s一个周期的方波

triangle(x) -三角波

creates a triangle wave with a period of 1 and range -1 to 1. In the interval 0 <= x < 0.5, triangle(x) increases. The difference between triangle waves and sawtooth waves is that a triangle wave has equal rise and fall times.

三角形(x)创建周期为1且范围为-1到1的三角形波。在区间0<=x<0.5时,三角形(x)增加。三角波和锯齿波的区别在于三角波的上升和下降时间相等。

triangle(et/10)10s一个周期的三角波

以上函数可以在Test Sequence and Test Assessment blocks中使用,无法在stateflow中使用、

verify-验证测试结果

verify(expression) evaluates a scalar logical expression to true or false.

验证表达式的值为true还是false

verify(expression,errorMessage)为失败的verify语句返回指定的错误消息。如果在Test manager中运行测试,错误消息将显示在仿真日志中。如果在Test manager之外运行测试,则诊断查看器中将显示该消息。

注:

在实时环境中,验证语句失败不会产生警告。但是,如果在Test manager中运行实时测试用例,则失败将显示在测试用例结果的验证语句部分。还可以使用getVerifyRuns访问有关验证运行的信息

verify(expression,identifier,errorMessage) 比上面一个多了标识,

verify(x > y && z > 10,'TestReq1:bothGreater',...

'x, y, and z are %d,%d,%d',x,y,z)

该验证语句的结果以标签TestReq1:bothCreate开头,如果测试失败,则以errorMessage开头

在Test assessment中使用verify语句,在Test manager中可以看到验证是否通过,pass or failed.

对于浮点数,在判断时不能使用==,而应使用verify(abs(x-5) < 0.001)

assert-断言,停止仿真

assert(expression)对逻辑表达式求值。如果assert语句的计算结果为false,仿真将停止并返回错误。

assert(expression,errmsg)为失败的assert语句返回指定的错误消息字符串(errmsg)。如果在Test manager中运行测试,错误消息将显示在仿真日志中。如果在Test manager之外运行测试,则诊断查看器中将显示该消息。

If either h or k are not 0, this assert statement fails and simulation stops.

assert(h==0 && k==0)

点赞收藏分享关注~~~是对小弟最大的支持~~~!

  • 35
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值