概述
先了解几个名词
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)
点赞收藏分享关注~~~是对小弟最大的支持~~~!
最后
以上就是顺心中心为你收集整理的Test Sequence与Test Manager联合测试Simulink模型选择Test Sequence的优势:测试流程:测试步中的一些可能有用的函数的全部内容,希望文章能够帮你解决Test Sequence与Test Manager联合测试Simulink模型选择Test Sequence的优势:测试流程:测试步中的一些可能有用的函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复