使用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,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang Map类型

文章目录 Map介绍Map的定义方式Map的增删查改新增和修改Map元素查找Map元素删除Map元素遍历Map元素 Map元素排序Map切片 Map介绍 Map介绍 在Go中&#xff0c;map是哈希表的引用&#xff0c;是一种key-value数据结构。map类型写作map[K]V&#xff0c;其中K和V分别对应key和value…

系统维护启动盘 优启吧

优启吧-《优启时代系统维护盘》2025典藏版&#xff08;UD/ISO&#xff09;

亿发解密:数据中台管理系统,引领企业数字化转型的智能数据体系

在当今数字化时代&#xff0c;数据已成为企业发展的关键驱动力。为了更好地利用数据&#xff0c;提升业务水平&#xff0c;企业需要建立一套完备的数据管理体系&#xff0c;而数据中台便应运而生。 什么是数据中台 数据中台是集方法论、组织和工具于一体的智能大数据体系。它…

一起深度学习(AlexNet网络)

AlexNet神经网络 代码实现&#xff1a; 代码实现&#xff1a; import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(# 采用了11*11的卷积核来捕捉对象&#xff0c;因为原始输入数据比较大#步幅为4 &#xff0c;可减少输出的高度核宽度。#输出通…

微搭低代码入门06分页查询

目录 1 创建自定义代码2 编写分页代码3 创建页面4 创建变量5 配置数据列表总结 我们在数据模型章节介绍了微搭后端服务编写的三种方式&#xff0c;包括Http请求、自定义代码、云函数。本篇我们详细讲解一下利用自定义代码开发分页查询的功能。 1 创建自定义代码 打开控制台&am…

Adaboost (BiLSTM-Adaboost ELM-Adaboost RF--Adaboost RVM-Adaboost SVM-Adaboost)

Adaboost Adaboost&#xff08;多输入单输出matlab&#xff09;代码获取戳此处代码获取戳此处 Adaboost是一种迭代式集成学习算法&#xff0c;全称为“Adaptive Boosting”&#xff0c;即自适应增强。该算法的核心思想是针对同一个训练集训练不同的分类器&#xff08;弱分类器&…

win10禁止自动更新的终极方法

添加注册表值 1.运行&#xff0c;输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中&#xff0c;新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名为以下命名“Fl…

《ESP8266通信指南》12-Lua 固件烧录

往期 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP8266通信指南》10-MQTT通信&#xff08;Arduino开发&#xff09;-CSDN博客 《ESP8266通信指南》9-TCP通信&#xff08;Arudino开发&#xff09;-CSDN博客 《ESP8266通信指南》8-连接WIFI&#xff08;Arduino开发…

【C语言】用数组和函数实现扫雷游戏

用数组和函数实现扫雷游戏 游戏界面&#xff1a; 代码如下&#xff1a; game.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2 //初始…

PXE批量安装

系统装机的三种引导方式 u盘光盘网络装机 光盘&#xff1a; 1.类似于usb模式 2.刻录模式 系统安装过程 加载boot loader Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序&#xff0c;我们可以初始化硬件设备、建立内存空间的映射图&#xff0c;从…

jmeter分布式集群压测

目的&#xff1a;通过多台机器同时运行 性能压测 脚本&#xff0c;模拟更好的并发压力 简单点&#xff1a;就是一个人&#xff08;控制机&#xff09;做一个项目的时候&#xff0c;压力有点大&#xff0c;会导致结果不理想&#xff0c;这时候找几个人&#xff08;执行机&#x…

java10基础(this super关键字 重写 final关键字 多态 抽象类)

目录 一. this和super关键字 1. this关键字 2. super关键字 二. 重写 三. final关键字 四. 多态 五. 抽象类 1. 抽象方法 2. 抽象类 3. 面向抽象设计 一. this和super关键字 1. this关键字 this 当前对象的引用 this.属性 this.方法名() this() -- 调用构造函数 …

电源功率模组: 完整的设计和验证流程解决四个维度的设计挑战

概述 电动汽车、新能源、光伏、风电等领域广泛使用高功率开关电源功率模组。IGBT和MOSFET是模组中常用器件。本文讨论这些技术&#xff0c;以及为实现高达1700伏特电压、1600安培电流、温度稳定和低电磁辐射的复杂指标带来的设计挑战。本文也总结今天的设计方法和优缺点。最后…

Java毕业设计 基于SpringBoot vue企业信息管理系统

Java毕业设计 基于SpringBoot vue企业信息管理系统 SpringBoot 企业信息管理系统 功能介绍 员工&#xff1a;登录 个人中心 修改密码 个人信息 会议管理 公告管理 个人计划管理 通讯录管理 外出登记管理 请假管理 上下班打卡管理 管理员&#xff1a;登录 个人中心 修改密码 …

跨越语言界限,多语言盲盒小程序带你领略全球风情

在全球化的今天&#xff0c;我们生活在一个多元文化的世界中&#xff0c;不同的语言、风俗、习惯共同构成了这个五彩斑斓的地球村。为了让每个人都能轻松体验到世界各地的独特风情&#xff0c;一款创新的多语言盲盒小程序应运而生&#xff0c;它跨越了语言的界限&#xff0c;让…

【linux-IMX6ULL中断配置流程】

目录 1. Cortex-A7和GIC中断概述1. 1 Cortex-A7中断系统&#xff1a;1. 2 GIC中断控制器简介&#xff1a; 2. 中断配置概述3. 底层中断文件配置3.1 对启动文件.s的配置思路3.2 对中断函数配置思路 4. 上层中断配置流程 1. Cortex-A7和GIC中断概述 学习IMX6UL的中断处理系统&…

页面嵌套,界面套娃,除了用iframe,还有其他方式吗?

UIOTOS可以了解下&#xff0c;uiotos.net&#xff0c;通过连线来代替脚本逻辑开发&#xff0c;复杂的交互界面&#xff0c;通过页面嵌套轻松解决&#xff0c;是个很新颖的思路&#xff0c;前端零代码&#xff01; 蓝图连线尤其是独创的页面嵌套和属性继承技术&#xff0c;好家…

独有病眼花,春风吹不落。 (二维坐标压缩成一个点,并查集)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 3 8 1 1 D 1 1 R 1 2 D 2 1 D 2 2 R 3 1 R 3 2 R 2 3 D 输出 8 思路&#xff1a; 根据题意&#xff0c;要求连接线段后&#xff0c;操作多少次&#xff0c;连接的线段闭合&…

javaweb学习笔记1

1、基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站&#xff1b; 提供给所有人看的数据始终会发生变化&…

00后设计师如何通过咸鱼接单实现副业月入过万?

大家好&#xff0c;我是一个00后&#xff0c;拥有6年设计经验的平面/包装/品牌设计师。在裸辞探索自由职业的过程中&#xff0c;误打误撞地通过咸鱼接单做副业&#xff0c;首月收入竟然超过了万元&#xff01;在这里&#xff0c;我将分享具体的实操经验、心得体会以及一些额外的…