• 0
  • 0
分享

  本文描述单元测试的概念,以及Test Harness建立的方法和简单的单元测试过程。

  1 单元测试

  单元测试,简单来说就是在Simulink模型中只测试一小部分单元的功能。关于单元测试的概念网上有很多资料了,这里不再赘述。博主从实际工作经验的角度来谈谈单元测试的价值。

  1.1 场景举例

  举个简单的例子,某个工程师需要设计一个逻辑,当毫米波雷达跟踪的目标的置信度大于等于90时,认为该目标是有效目标。于是该工程师设计模型如下:

1-1.png

  工程师不小心把判断条件写成大于号,而不是大于等于号。这就导致了置信度为90的目标全部被视为Invalid,从而影响了后面一大片的算法丢失了重要的输入信息。如果没有单元测试,这个问题就会被带到开发流程的后期。例如,该模型生成代码、编译集成、刷到车上以后,实车测试的时候发现后面的功能状态机一直不激活,或者控制信号一直不激活。然后再回头一点点往前撸信号,查找半天才定位到模型中的这个小bug。

  这种情况在工作中时常发生,而且并不能因此责怪工程师的水平不行,因为人总会犯错误,避免不了“写bug”这种情况。因此,需要从流程体系的角度来尽可能提早发现设计问题。单元测试就可以做到这样的保障,譬如给上图这一小部分单元输入一个数值为90的Confidence信号,通过模型仿真发现输出竟然是False,就可以快速地定位这个缺陷,尽早地修复他。

  1.2 简单的测试方法

  既然知道了要在模型中先测试一下,不了解Test Harness的人可能会这么做。把已有的模型改造一下,把inport和outport端口去掉,给他几个输入,再用Scope或者disp模块看看输出对不对。模型改造成如下所示。

1-2.png

  仿真后可以看到disp中的结果。这么做确实看到了输出的结果,发现了输入的置信度为90时,输出的是0。但是这样操作模型会有很多问题:

  ·为了仿真改掉了原有的模型,测完了还得改回去;

  · 测试用例不方便保留下来,以后复测的时候还得手动操作一番;

  · 如果想要多个不同的测试输入得把输入改来改去,不好切换;

  针对这些问题,可以直接使用Simulink Test工具箱里的Test Harness,为设计专属的单元测试环境,引用原来模型的某个子系统或者整个模型的算法。后文会用一个例子来说明搭建Test Harness的过程,然后直观地看到他的好处。

  2 Test Harness建立

  这一节用以前的一篇博客搭建的模型,来演示一下Test Harness的建立过程,并且通过简单的输入进行仿真。

  2.1 模型配置

  1)首先打开需要测试的模型,这里用以前博主做的一个模型来演示:《Simulink建模:LKA系统功能状态机建模》。

1-3.png

  2)在模型设置里,需要设置为离散,并且仿真步长设置为和实际控制器中的调度周期一致;

1-4.png

  这样的话,模型就配置完毕了。

  2.2 创建Test Harness

  创建Test Harness有两种做法,为整个slx模型创建,或者为模型中的某个子系统创建。

  博主比较倾向于后者,因为单元更小一点,可以聚焦于这部分的功能进行测试。即使是想测试整个模型,也可以将整个模型的最上层打包成一个大型的子系统进行测试。后文就以顶层的子系统LKA_StateMachine为例,来创建TestHarness。

  1)右键点击这个子系统,选中Create for XXX

1-5.png

  2)在界面中定一个名字,企鹅定好输入输出的形式;

1-6.png

  这里博主选择了输入为Signal Builder,因为用的比较顺手,也可以选择From Workspace导入外部数据,或者Test Sequence等等。Signal Builder的用法参照《仿真与测试:通过Signal Builder模块生成输入信号》。

  另外,如果勾选了Save test harness extern选项后,会生成一个用来保存harness模型的外部文件,否则生成的harness会依附于当前的模型。博主习惯后者,减少一些文件的管理。

  3)点击OK后生成了一个Harness模型,按照之前的选择配置了输入为Signal Builder,引用了原模型的子系统作为中间算法;

-7.png

  这样的话,就不需要对原来的模型进行改造,也能进行单元测试。

  4)打开Signal Builder设计一个简单的测试用例输入;

1-8.png

  测试用例输入表示,3s时开关打开,1-5s时,车速从0加到80。然后通过信号log可以看到输出的LKA_Status是否符合该输入的预期。

1-9.png

  这样就完成了一个Test Harness的创建及一个简单的单元测试。这个测试环境可以和

  3 总结

  本文描述单元测试的概念,以及Test Harness建立的方法和简单的单元测试过程。本文只是一个简单的单元测试,还没有发挥出Test Harness的更多功能。Test Harness配合Test Manager和Design Verify,可以搭建一套成体系的测试方法。


作者:chhttty    

来源:http://www.51testing.com/html/18/n-7796518.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •  01此前时不时会有一些研发小伙伴和我诉苦,说很多企业由于人力财力限制或者需求不强,会直接购买使用第三方的开放API,这样一来,一则由于开放项目不是量身定制的,寻找自己合适的接口也要搜索调研蛮多时间。二则这种合作方式下 API提供者通常只会提供调用权限和一份接口文档,研发童鞋调试的时候只能手动一个个把接口数据复制到调试工具,费时费力。综合上述两大痛点,我给大家推荐的解决方案是的一个叫API Hub的项目。GitHub 上面也有类似于public APIs等收录了开放API ,但只做了数据收录的工作,接口调试工具则只提供了调试功能,两者兼而有之的很少。而API Hub的革新之处在于它不...
            12 10 759
            分享
          • 1、引言小鱼:小屌丝, 这段代码为什么要开两个线程?小屌丝:因为我要读写文件,还要备份文件,所以就开两个线程了。小鱼:嗯,想法是对的,但是,还有一种简便的方法, 不需要开两个线程就能搞得定的。小屌丝:额…难道是with open?小鱼:不是。小屌丝:那还有啥呢? 我咋想不起来了。小鱼:嗯,这个方法很奈斯,但是很少人使用,因为大部分码农都是直接open 文件的。小屌丝:那你就别藏着掖着了,赶紧展示一下,让我也长长见识。2、 fileinput说到fileinput,可能90%的码农表示没用过,甚至没有听说过。这不奇怪,因为在python界,既然open可以走天下,何必要fileinput呢?。但...
            0 0 1343
            分享
          • 1.前言网上有许多关于单元测试的好处,这里我就不去说了。我写单元测试的理由很简单粗暴,就是图一个方便。试想一下这个场景:我们在写一个新功能,每写一部分,我们就安装到手机上查看一下,这个过程中你要点击到对应的页面,做对应的操作,最后才能反馈给你结果。如果达到了预期效果,那么恭喜你。可是一旦这次失败了,是不是又要重复这一过程?是不是感到很麻烦?很费时间?如果你想早点写完下班,那么你就需要掌握单元测试。因为它能大大的缩短你自我验证的时间。2.准备工作我们新建一个项目,模板代码会默认在build文件中添加JUnit的依赖,而单元测试代码是放在src/test/java下面的,如下图:用鼠标右键点击测试...
            13 13 1267
            分享
          • 一、什么是测试自动化框架自动化测试框架就是用于测试自动化的框架。具体来说,它提供了自动化测试用例编写、自动化测试用例执行、自动化测试报告生成等基础功能。我们只需要基于这个框架,完成和业务高度相关的测试用例设计和实现即可。另外,框架会为我们处理好复杂度与扩展性的问题,我们无需为此操心。测试自动化框架是在创建和设计测试用例时使用的一组最佳实践或准则。测试准则集可以包括编码标准,对象存储库,测试数据处理方法,有关外部存储访问的信息等。这些准则并非强制,但是在自动化脚本过程中,它们提高了测试的效率并产生了有益的结果。二、使用测试自动化框架的好处1、更全的测试范围2、降低脚本维护成本3、节省人力成本4、...
            7 7 704
            分享
          •   一、概述  LOADRUNNER是Web应用性能测试常用的一个工具,它可以录制浏览器操作,并模拟大量用户并发访问系统。对于文件上传、文件导入的功能,在用LOADRUNNER录制生成脚本时,经常会出现一些问题,导致无法顺利进行测试。本文以某系统为例,介绍了导入文件脚本生成过程中遇到的问题及解决方案,对于其它系统的导入功能,可以参考借鉴。  二、问题及解决方案  1.同样的导入功能,却录制出不同的脚本,原因在哪?  下面两段脚本都是在录制导入功能自动生成的,但脚本却相差很多:  脚本一:  脚本二:  脚本一,将导入文件的二进制信息录制了出来,这样的脚本无法进行参数化,而且导入文件的内容不能变...
            0 0 1287
            分享
      • 51testing软件测试圈微信