Simulink Test自动化(一)-自动创建Test Sequence

前言

在基于Simulink的模型开发过程中,Model in Loop(MIL)是用来验证模型算法是否符合预期的重要方式。在之前的一篇文章中,传送门:Test Sequence与Test Manager联合测试Simulink模型

介绍了手动创建Test Sequence,Test Manager,运行Simulink Test,并生成Test Report及覆盖度的Report。对于多个测试case来说,Test harness不便于测试管理与迭代,手动创建步骤繁琐且浪费时间。基于此,本文利用Simulink Test提供的API函数,根据填写好的特定格式的Excel,实现Simulink Test自动化的第一步-自动创建Test Sequence。

设计Excel模板

打开Simulink中的Test Sequence,可以看到测试的重要参数有如下几个:


Step(即测试步),Transition(即跳转条件),Next Step(下一个测试步),Description(测试步描述)。
Step包括,Step名称和Step执行内容。本文将验证的内容也放到Test Sequence中,所以Step的子Step有条件判断的,该Step应设置When decomposition属性。且子Step进行verify验证。


基于上述格式需求,设定Excel模板如下:


TestHarness是作为测试模型的基础,可以设置多个TestHarness以支持多个Test case。也可以在一个TestHarness中,采用延长TestTime(单位为s)来实现多个Test case。

一个TestStep对应一个TestStepAction,一个TestTransition,及一个TestNextStepName,可以对应多个TestVerify。

Requirement只作为管理Test case的参考,在此处没有太大使用价值。

简单设计Test case如下:

m脚本生成对应的Test harness及Test Sequence

和之前Excel生成标定量的m文件类似,需要在脚本中读取Excel表中的对应信息,再通过特定的方式写入特定的文件中。

自动创建Test harness

首先需要准备好被测试的模型,该模型需要保证运行时不报错。

删除之前创建的Test harness

如果已经创建好一个Test harness,再次创建同名的harness时会报错。其实可以判断名称存在后,不再创建,而是打开。本文为了省事,直接删除了之前创建的harness,每次都会重新再创建。而且需要在删除前,关闭打开的harness,否则也会报错。

%删除Testharness
         harnessList = sltest.harness.find(test_model);
         harnessOpen = sltest.harness.find(test_model,'OpenOnly','on');%寻找打开的harness
         for i=1:length(harnessOpen)
             sltest.harness.close(test_model,harnessList(i).name);%close harness
         end
        for i=1:length(harnessList)
            sltest.harness.delete(test_model,harnessList(i).name);%delete harness
        end

创建Test harness

创建Test harness并设置时间参数

            sltest.harness.create(test_model,'Name',TestharnessName,...
                'Source','Test Sequence')
            sltest.harness.load(test_model,TestharnessName);%加载testharness 
            set_param(TestharnessName,'StopTime',TestharnessTime);%设置仿真停止时间,若测试步提前跳出,后面的验证也不会执行

自动创建Test Sequence

通过Excel获取到的信息,写入到Test sequence中。

关键的API函数如下:

创建After测试步

sltest.testsequence.addStepAfter(TestSequenceName,...
     TestStepName{i},'Initialize','Action',TestStepAction{i},'IsWhenStep',true,...
           'Description',TestStepDescription{i})

只有在有子测试步中**有验证(即用到的when条件)**的父测试步才需要设置IsWhenStep属性。本文只有end测试步做了特殊处理,其他都按WhenStep处理

上面的例子是从Initialize测试步跳转到TestStepName{i}测试步,且Step执行的动作为TestStepAction{i}

修改测试步

sltest.testsequence.editStep(TestSequenceName,'Run',...
                     'Name','Initialize');
    %改变run测试步名称为Initialize,自动生成的第一个step会初始化输入,且名称为Run

创建跳转条件

            sltest.testsequence.addTransition(TestSequenceName,...
                   'Initialize','true',TestStepName{i});%初始化跳转

从Initialize跳转到TestStepName{i},跳转条件为‘true’

创建子测试步

TestVerifyStr{ii} = strcat(TestStepName{i},'.',TestVerifyName{ii+1});
sltest.testsequence.addStep(TestSequenceName,...
  TestVerifyStr{ii},'Action',TestVerify{ii+1},'WhenCondition',WhenCondition{ii+1},...
         'Description',TestStepDescription{ii+1})%添加子step 验证结果

TestVerifyStr为TestStepName与TestVerifyName拼接而成,如TestStep1.TestVerify_1,通过这种方式为TestStep1增加子测试步TestVerify_1

实现效果

运行自动生成Test Sequence的脚本后,自动生成的Test Sequence如下:

注意

在填写Excel时,需要注意Input与Output的名称与数据类型。在Test Sequence中的名称需要与Input,Output一致,且数据类型为single时最好进行数据类型的转换数据类型为bool时,需要设定为true或false,否则运行可能会报错(数据类型不匹配)。

总结

其实Matlab help中有很多API函数使用的例子,大部分通过help就可以很好的掌握其用法。本文介绍了Test harness和Test Sequence的自动生成,后面继续介绍Test Manager File及Test Report的自动生成。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~

你的鼓励是对小弟的最大支持~~~

建了一个WX公众号,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~

  • 12
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赞哥哥s

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

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

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

打赏作者

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

抵扣说明:

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

余额充值