使用Simulink Test进行单元测试

本文摘要:主要介绍如何利用Simulink Test工具箱,对模型进行单元测试。内容包括,如何创建Test Harness模型,如何自动生成excel格式的测试用例模板来创建测试用例,如何手动填写excel格式的测试用例模板来手动创建测试用例。

  • 单元测试的目的

创建完模型后,我们需要验证模型的行为,即仿真结果,是否跟我们预期的一致,这样才能保证由模型生成的代码在嵌入式系统中执行得到结果跟我们预期的一致。单元测试主要是以模型或者模型内的子系统为单位进行测试。

虽然单元测试不能发现所有的问题,比如实际系统中的接口信号跟我们预期的不符,或者一些性能方面的需求。但是单元测试个人感觉还是必须的,测试用例设计的越全面,即把自己能想到的所有情况都测试一遍,后续在实车上出现非预期的情况就越少。

并且在模型单元测试中找问题会比在后续的集成测试,以及实车测试中找问题容易的多,所以尽量能在单元测试中发现的不能就不应该流出到后续的开发流程中。

做好单元测试会极大的提高开发效率。

现在Matlab的Simulink Test工具箱做的也越来越完善,只需要简单几步就可以创建出测试环境,方便的修改测试用例,结果的可视化和报告功能也做得很好了,下面就具体介绍一下用法。

  • 创建Test Harness测试模型

Test Harness 模型可以理解为一个测试框架。由被测试模型,信号输入和信号输出组成。

如果一个模型不是很复杂的话,可以直接对一个模型整体创建一个Test Harness模型,进行测试。具体方法是在模型最外层的空白处,点击鼠标右键,选择Test Harness -> Create for Model…

如果模型很复杂的话,也可以对模型中的各个子系统分别创建Test Harness模型,然后分别单独测试这些子系统。具体方法是选中想要测试的子系统,点击鼠标右键,选择Test Harness -> Create for 'subsystem name'

点击后,就会出现如下的配置界面

其中,{Name}是给出Test Harness模型的名称
{Save test harness extern}如果不勾选 ,那么这个test harness模型就不会单独的生成一个文件,而是保存在原模型里面
{Save test harness extern}如果勾选,那么这个test harness模型就以一个单独的文件保存

Test Harness模型的可以选择的输入输出如下:

其中Harness模型的输入,可以选择为普通的Inport,Signal Builder,Signal Editor,From Workspace,From File,Test Sequence等
Harness模型的输出,可以选择为普通的Outport,Scope,To Workspace,To File,Terminator等
实际可以根据自己的习惯和需求进行选择。
下图是输入为Inport,输出为Outport的Test Harness模型,本篇文章主要介绍针对这种类型的Test Harness模型进行单元测试。这种模型的输入信号以及期望的输出信号可以通过excel的测试用例模板来给出。

其中,Signal spec and routing 里的内容如下,会按照原模型的设置,将所有的输入信号的数据类型和采样时间做一个转换。

这样一个Test Harness模型就创建完了,接下来就准备对这个模型做测试。

  • 自动创建excel格式的测试用例模板

首先打开Simulink Test Manager,可以在模型菜单的APPS里面搜索Simulink Test

然后点击“Simulink Test Manager”

或者直接在窗口输入命令:
sltest.testmanager.view

就会打开Test Manager的窗口

接下来用AUTO CREATE功能,新建一个Test File,并且自动生成测试用例的模板。点击New -> Test File from Spreadsheet

然后会跳出如下界面,选择“Create a test template file for specifying data”

点击Next后跳出如下的界面,在Model中选择要被测试的模型,Harness中选择该模型中创建的需要被测试的Test Harness模型

然后会跳出如下界面,勾选想要在excel中想要包含的项目

Inputs:模型最外层的输入。这个必须要选的,可以在excel表中编辑输入的值
Parameters:模型中的参数。如果测试时不需要改变参数值的话,可以不勾选。
这边推荐是弄清楚Parameters在excel页中设置的格式后,这边也都不用勾选了,如果需要修改参数值的话,按照格式,手动添加想要修改的参数值
Comparison signals:信号线上logged的信号。这个必须勾选,并且需要把希望被测试的信号对应的信号线设置为logged。

Include all attributes in the spreadsheet:信号的一些参数设置,比如插值方式,绝对允许误差等,推荐勾选上。

下一步是设置测试用例的个数和测试用例的基本名称

比如按照上面的设置,就会在测试用例的excel文件中,生成10个sheet,每一个sheet的名字为我们指定的名称+序号

最后,指定Test Manager的测试文件名和测试用例的excel文件名和存储位置。

这样就会自动生成Test Manager的测试文件和测试用例的excel文件。
Test Manager的测试文件打开后,如下图。

Test Suite:每一个测试文件中,都可以定义若干个Test Suite,可以把同一类型或同一功能的测试用例放到一个Test Suite中
Test Case:每一个Test Suite中,可以定义若干个Test Case,Test Case中规定了测试详细的执行信息。实际测试执行的时候也针对每一个Test Case进行测试的
Create Test Case from External File:测试用例的具体信息从excel模板中提取,这篇文章重点介绍以这种形式来创建测试用例
小锁标记:表示这些设置是通过excel文件中的设置固定的,无法在该页面进行修改,只能通过excel文件进行修改。
*标记:提示这些设置是有过修改

下面详细介绍测试用例的每一项设置的内容:
TAGS:可以给一个标签名,比如按照功能,测试类型等,方便以后批量查找测试用例
DESCRIPTION:可以给描述测试用例的测试步骤,方法等,方便理解
REQUIREMENTS:可以和需求关联。Matlab现在有“Simulink Requirements”这个Toolbox,可以在里面写需求文档,将需求和模型,以及对应的测试用例关联起来,以满足A-ASPICE或者ISO26262所规定的软件开发流程中的可追溯性的要求。
SYSTEM UNDER TEST:里面设置了要被测试的模型,或者针对模型中所创建的某一个Test Harness模型进行测试。
另外,如果有需要的话,这边也可以在进行单元测试时,覆盖掉原模型的设置,比如常用的一个就是仿真时间,可以根据每个测试用例输入数据的实际结束时间,覆盖掉原模型的仿真结束时间

PARAMETER OVERRIDES:这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的,里面列出了某个测试用例中,需要改变的参数

CALLBACKS:里面分为3个不同时刻的,运行我们想要的脚本。
其中PER-LOAD是在读取模型之前,POST-LOAD是在读取完模型之后,CLEANUP是在测试仿真完成之后。
一种比较常见的用法是,在PER-LOAD中读取测试模型的数据词典里数据,在CLEANUP中清除这次测试的所有数据。

INPUTS:定义测试的输入信号,这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。
另外这边有两个选项可以勾选,如果勾选“Include input data in test result”的话,在最后的结果中,也会显示输入信号。
如果勾选“Stop simulation at last time point”的话,仿真测试到最后一个输入点的时候就会停止。

SIMULATION OUTPUTS:可以在里面再选取模型中logged的信号作为观测量
CONFIGURATION SETTINGS OVERRIDES:可以在仿真测试的时候对原模型的设置进行覆盖
BASELINE CRITERIA:里面设置了期望值,以及比较仿真测试结果和期望值的一些参数。这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。但可以点击Edit在excel文件中修改。
对比数据时,可以设置绝对误差,相对误差,时序领先误差和时序滞后误差

这四个参数可以在excel中,对应变量的下方设置,具体格式和参数名称如下

ITERATIONS:迭代测试。这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。会根据测试用例数自动生成,表示这个测试会根据不同的配置重复进行

COVERAGE SETTINGS:统计覆盖度的设置。如果需要统计模型的覆盖度的话,就勾选“Record coverage for referenced models”和“Record coverage for system under test”

COVERAGE METRICS 的设置要在最外面的工程中设置,一般选择Decision,Condition和MCDC这三个覆盖度就够应付各种检查了。

点击Run,就会执行测试

测试的结果会在Result and Artifacts中显示。如果仿真结果和预期符合就是绿色的勾勾,否则是红色的叉叉
Baseline Criteria Result里显示的就是我们给定的信号期望值与实际值之间的比较。
上面的图是把仿真结果和期望结果放在一张图上显示出来,下面的图是两者之差和允许误差范围
External Inputs里显示的是输入信号的值。(在{INPUTS}里勾选了Include input data in test result才会有)
Sim Output里显示的是模型中logged信号的值

另外如果设置了搜集覆盖度,那么还可以看到针对被测模型,所有测试用例累积的覆盖度

手动创建excel测试用例模板

了解了Test Manager用的excel测试模板的格式后,有时候手动创建测试模板会更方便一些。被测对象有多个测试用例的话,可以写多个excel文件,也可以在一个excel文件中的多个sheet上写。

比如对于下图的Test Harness模型,有7个输入和两个输出,那我们就要给7个输入赋值,以及给出对应时刻的输出的值

首先定义输入信号,时间序列{time}定义必须写在最前面,然后在每一列跟着输入信号的名称。
对于输入信号还推荐定义输入信号的数据类型,用Type:<数据类型>来定义。
另外为了区分信号是输入还是输入,需要在输入信号最开始的一列定义Source:Input

对于输出信号,也是一样,首先是时间序列{time},然后在后面的列跟着输出信号的名称。
输出信号也要定义数据类型,以及定义该信号为输出Source:Output
对于输出信号还可以定义允许误差,比较常用的是相对误差和绝对误差。一般对于浮点类型的数据,需要给一个相对误差,因为浮点数没法比较完全相等
对于输出信号,还需要指定该信号在模型中的位置,是通过BlockPath加PortIndex来确定的。
比如对于上图的两个输出信号,不但要指定信号名,还要指定连接信号线的模块{BlockPath}和该模块对应的端口号{PortIndex}(如果端口号是1的话可以忽略不填)
还可以指定信号的插值方式{Interp},如果时间序列不是最小步长的话,插值方式有两种,一个是保持上一次时刻的值“zoh”和线性插值”linear“

创建好测试用例的excel模板后,就可以手动创建一个以填写好的excel模板,在Test Manager中创建Test Case。
点击New -> Test File,然后给测试文件起一个名字

在{SYSTEM UNDER TEST}下面选择要被测试的模型以及模型内的Harness模型,然后选中“Create Test Case from External File”,选择之前创建的excel测试用例文件。系统就会把在excel模板中填写的输入和输出的信息分别在{INPUTS}和{BASELINE CRITERIA}中自动创建好

最后再修改一些其他想要修改的设置,就能进行测试了。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3015889.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

山东省文史书画研究会成立20周年系列活动徽标征集胜选名单公布

2024年5月1日&#xff0c;山东省文史书画研究会成立20周年系列活动徽标征集落下帷幕。征稿启事下发后&#xff0c;得到社会各界人士的广泛关注与参与&#xff0c;共收到设计方案608件。经过初评&#xff0c;选出5幅作品进入复评&#xff0c;并经过网络投票和专家投票相结合的方…

暴雨发布大模型专用分布式全闪存储

近日&#xff0c;暴雨信息发布为大模型专门优化的分布式全闪存储AVERSE系列。该系列依托暴雨信息自研分布式文件系统&#xff0c;搭载新一代数据加速引擎Xdata&#xff0c;通过盘控协同、GPU直访存储、全局一致性缓存等技术为AI大模型数据归集、训练、数据归档与管理等阶段提供…

06-07 - 变量的高级主题

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 变量值的替换2. 变量的模式替换3. 规则中的模式替换4. 变量值的嵌套使用5. 命令行变量6. 环境变量7. 目标变量&#xff08;局部变量&#xff09;8. 模式变量9. 工程 1. 变量值的替换 使用指定字符&#xff08;串&#xff09;替…

vue-img-cutter 图片裁剪详解

前言&#xff1a;vue-img-cutter 文档&#xff0c;本文档主要讲解插件在 vue3 中使用。 一&#xff1a;安装依赖 npm install vue-img-cutter # or yarn add vue-img-cutter # or pnpm add vue-img-cutter 二&#xff1a;构建 components/ImgCutter.vue 组件 <script se…

激光雕刻优化:利用RLE压缩技术提高雕刻效率与节省能源成本

什么是 RLE &#xff1f;RLE 在激光雕刻应用实现代码&#xff1a;总结 什么是 RLE &#xff1f; RLE 是 Run-Length Encoding&#xff08;游程长度编码&#xff09;的缩写。这是一种数据压缩技术&#xff0c;它通过减少连续重复的数据来减小文件的大小。RLE 在图像处理、无损…

linux学习:音视频编程+alsa声音架构

目录 概念 采样 量化 编码 音频文件wav 格式 标准音频接口 ALSA 录制音频 步骤 api 获取pcm设备句柄 设置 PCM 设备参数 代码 播放音频 步骤 代码 概念 信号都是模拟信号&#xff0c;不管是声音还是光线&#xff0c;这些模拟信号需要被 A/D 转换器转换成数字信…

小程序预览或上传代码时,遇到app.json未找到某个wxml文件的解决方法

uniapp小程序&#xff0c;点击预览或者是上传代码&#xff0c;遇到app.json无法找到某个wxml文件的解决方法&#xff1a;清缓存 问题&#xff1a; message&#xff1a;Error: app.json: 未找到 ["subPackages"][3]["pages"][3] 对应的 subPackages4/pages/…

PXE 批量安装部署

目录 一、PEX批量部署优点 二、PXE&#xff1a;预启动执行环境 三、搭建PXE远程服务器 要想全自动安装 接下来请看步骤&#xff1a; 一、PEX批量部署优点 规模化&#xff1a;同时装配多台服务器自动化&#xff1a;安装系统 配置各种服务远程实现&#xff1a;不需要光盘&…

语音识别--光谱门控降噪

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计7267字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

FSC森林认证是什么?

FSC森林认证&#xff0c;又称木材认证&#xff0c;是一种运用市场机制来促进森林可持续经营&#xff0c;实现生态、社会和经济目标的工具。FSC森林认证包括森林经营认证&#xff08;Forest Management, FM&#xff09;和产销监管链认证&#xff08;Chain of Custody, COC&#…

使用IIS部署Vue项目

前提 使用IIS部署Vue项目&#xff0c;后端必须跨域&#xff0c;不要在Vue中用proxy跨域&#xff0c;那个只在dev环境中有用&#xff01; IIS安装&#xff0c;不用全部打勾&#xff0c;有些他默认就是方块 ■ 选择性安装的&#xff0c;就维持原样就可以。 添加网站配置 右键…

Ecovadis认证是什么?

Ecovadis认证是一种企业社会责任&#xff08;CSR&#xff09;评估和评级的认证&#xff0c;旨在衡量企业在环境、劳工和人权、道德以及可持续采购四个方面的可持续发展表现。该认证已成为全球范围内许多公司和组织的评估标准之一&#xff0c;有助于提高企业的会声誉和可持续发展…

Redis系列之key过期策略介绍

为什么要有过期策略&#xff1f; Redis是一个内存型的数据库&#xff0c;数据是放在内存里的&#xff0c;但是内存也是有大小的&#xff0c;所以&#xff0c;需要配置redis占用的最大内存&#xff0c;主要通过maxmemory配置 maxmomory <bytes> # redis占用的最大内存官…

Pycharm无法链接服务器环境(host is unresponsived)

困扰了很久的一个问题&#xff0c;一开始是在服务器ubuntu20.04上安装pycharm community&#xff0c;直接运行服务器上的pycharm community就识别不了anaconda中的环境 后来改用pycharm professional也无法远程连接上服务器的环境&#xff0c;识别不了服务器上的环境&#xff…

Nessus 部署实验

一、下载安装https://www.tenable.com/downloads/nessus 安装好之后&#xff0c;Nessus会自动打开浏览器&#xff0c;进入到初始化选择安装界面&#xff0c;这里我们要选择 Managed Scanner 点击继续&#xff0c;下一步选择Tenable.sc 点击继续&#xff0c;设置用户名和密码 等…

2024DCIC海上风电出力预测Top方案 + 光伏发电出力高分方案学习记录

海上风电出力预测 赛题数据 海上风电出力预测的用电数据分为训练组和测试组两大类&#xff0c;主要包括风电场基本信息、气象变量数据和实际功率数据三个部分。风电场基本信息主要是各风电场的装机容量等信息&#xff1b;气象变量数据是从2022年1月到2024年1月份&#xff0c;…

翻译《The Old New Thing》- Rendering menu glyphs is slightly trickier

Rendering menu glyphs is slightly trickier - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050802-13/?p34743 Raymond Chen 2005年08月02日 上次&#xff0c;我们看到了如何绘制有主题和无主题的单选按钮&#xff0c;我提到菜单位图更…

cmake进阶:目录属性说明一

一. 简介 接下来简单学习一下 cmake 中的属性相关的概念。 属性大概可以分为多种&#xff1a;全局属性、目录属性&#xff08;源码属性&#xff09;、目标属性以及其它一些分类。 二. cmake进阶&#xff1a;目录属性 cmake中的属性可以 在如下网址查询到&#xff1a; http…

【深度学习实战(33)】训练之model.train()和model.eval()

一、model.train()&#xff0c;model.eval()作用&#xff1f; model.train() 和 model.eval() 是 PyTorch 中的两个方法&#xff0c;用于设置模型的训练模式和评估模式。 model.train() 方法将模型设置为训练模式。在训练模式下&#xff0c;模型会启用 dropout 和 batch norm…