《软件测试》实验2:嵌入式软件测试实验报告
创始人
2024-01-12 22:11:47

文章目录

  • 实验目的
  • 温度控制器需求文档及测试要求
  • 环境搭建
  • 实验内容
    • 温度采集处理功能测试
    • 加热棒输出电压测试
    • 散热风扇
    • 温度传感器输入接口(Senser_JK)
    • 控制加热棒输出接口(Heater_JK)
    • 控制散热风扇输出接口(Fan_JK)
    • 温控稳定时间性能需求(Control_XN)
  • 最终测试结果

实验目的

本次测试对象是温度控制器。

温度控制器需求文档及测试要求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

环境搭建

在这里插入图片描述
解压 vspd.rar 文件,打开 vspdxp_install 进行安装

实验内容

在这里插入图片描述
在这里插入图片描述
点击“打开项目”,打开esi文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打开 vspdconfig
根据需求文档,使用vspd绑定对应的串口
在这里插入图片描述
创建3对串口,5和6一对,7和8一对,9和 10一对
在这里插入图片描述
打开待测件
在这里插入图片描述
然后点确定
在这里插入图片描述
在这里插入图片描述
打开ETest,点环境设置然后点确定(环境设置时直接确定,不需要手动更改)
在这里插入图片描述
成功后如图
在这里插入图片描述

温度采集处理功能测试

温度采集处理的示例代码已经给出了,点击ETest右侧的“项目->测试目录->功能测试->温度采集处理”进入代码
在这里插入图片描述

# coding:utf-8
def Test(arg,exp):CH_232_温度传感器.Clear()Protocol_温度传感器.温度值.Value = arg[1]bool=Protocol_温度传感器.Write()print '第%d次期望显示温度值%d'%(arg[0], exp[0])API.Common.Timer.Normal.Sleep(1000)Standard_Test(Test)

先点击运行
在这里插入图片描述
再点击开始
在这里插入图片描述
可以看到数据了
在这里插入图片描述
下面给出具体的测试方法

  1. 首先看功能需求
    在这里插入图片描述
  2. 点击ETest右侧的“项目->测试目录->功能测试->温度采集处理”,再点击“测试数据”,向里面输入自己的测试数据
    在这里插入图片描述
  3. 点击“测试任务”,编写自己的测试脚本
# coding:utf-8
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
import Manu
def Test(arg,exp):# 给字段复制Protocol_温度传感器.温度值.Value = arg[1]# 协议写bool=Protocol_温度传感器.Write()show = []str0 = "序号: " + str(arg[0])str1 = "设定温度:" + str(arg[1])str2 = "预期温度:" + str(exp[0])# str0, str1, str2分别会被显示在菜单的第一、二、三行show.append(str0)show.append(str1)show.append(str2)# 弹出对话框# 点击确定,返回值为true# 点击否定,返回值为falseManu.Check(show)### 入口
Standard_Test(Test)
  1. 打开测试文件中提供的SensorControl.exe
    在这里插入图片描述
    直接点击“确定”,然后点“开始”
    在这里插入图片描述
  2. 回到ETest,点击上方的“运行”(如果运行是灰色的,就需要先点击旁边的“环境设置”,等待一会,然后就能点运行了)
    在这里插入图片描述这时候弹出了对话框,就可以将对话框中的“设定温度”、“预期温度”和温度控制器的“采集温度”进行对比,从而得到测试结果,找到问题
    在这里插入图片描述

加热棒输出电压测试

  1. 首先看功能需求
    在这里插入图片描述
  2. 右键“功能测试”,点击“新建测试用例->TCPython”,输入测试名称“加热棒”,然后写好测试代码,下面的代码是不读取“测试数据”的写法
# coding:utf-8
import math
import Manudef Volt(j, arr):Dp = 0.05Di = 0.1Dd = 0.1Td = 20 # 设定温度ek = Td - arr[j]if j == 0:ek1 = Td - 15ek2 = Td - 15elif j == 1:ek1 = Td - arr[j - 1]ek2 = Td - 15else:ek1 = Td - arr[j - 1]ek2 = Td - arr[j - 2]print "ek = %d, ek1 = %d , ek2 = %d" % (ek, ek1, ek2)# 电压变化量result = Dp * (ek - ek1) + Di * ek + Dd * (ek - 2 * ek1 + ek2)print "result = %f" % result return resultdef init():  # 初始化待测件加热棒输出为已知状态Protocol_温度传感器.温度值.Value = 15bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(200)Protocol_温度传感器.温度值.Value = 15bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(1000)def Test():print 'Test start'# 初始化电压输出为已知状态init()     # 清理通道seekresult=CH_232_加热棒.Clear()# 等待新的数据包Protocol_加热棒.BlockRead()# 获取当前的电压v = Protocol_加热棒.加热棒输出电压.Value# 设定温度Td = 20# 预期采集电压列表T = [15, 15, 15 , 15, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23]for i in range(len(T)):print "------------------------------"print "第%d次,当前采集温度值: %f" % (i, T[i])# 写入新一次的温感数据Protocol_温度传感器.温度值.Value = T[i]bool=Protocol_温度传感器.Write()# 清理加热棒输出通道seekresult=CH_232_加热棒.Clear()Protocol_加热棒.BlockRead()v = v + Volt(i, T)# 负值截断处理if v < 0:v = 0print "第%d次期望输出电压值为: %f, 实际输出电压值为: %f, 误差为: %.3f" % (i + 1, v, Protocol_加热棒.加热棒输出电压.Value, v - Protocol_加热棒.加热棒输出电压.Value)print "------------------------------"API.Common.Timer.Normal.Sleep(2000)Test()

如果是读取测试数据,那么代码如下

import math
import Manudef VK(t, td, e1, e2):# t -> 当前温度# td -> 设定温度Dp = 0.05Di = 0.1Dd = 0.1e = td - tresult = Dp * (e - e1) + Di * e + Dd * (e - 2e1 + e2)return resultdef Test(arg,exp):global e1      # 上一次的温差, 设定温度-当前温度global e2      # 上上次的温差,global V1      # 当前时刻的输出电压值# 通道清理,防止上一次的运行结果在通道中阻塞,影响本次效果seekresult=CH_232_加热棒.Clear()seekresult=CH_232_温度传感器.Clear()# 给温度采集器赋值,当前温度Protocol_温度传感器.温度值.Value = arg[2]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(1000)# arg[0] -->序号# arg[1] -->设定温度# arg[2] -->当前温度# 第一次改变温度if arg[0] == 1:e1 = arg[1] - arg[2]# 第二次改变温度if arg[0] == 2:e2 = arg[1] - arg[2]Protocol_加热棒.BlockRead()V1 = Protocol_加热棒.加热棒输出电压.Value# 三次以上    if arg[0] > 2:V  = VK(arg[2],  arg[1], e1, e2) + V1print Vshow = []str = "设定温度为:%d, 室温为:%f" % (arg[1], arg[2])show.append(str)str = "预期电压为: %f"  % (V)show.append(str)show.append("界面电压显示是否正确?")passed = Manu.Check(show)e2 = e1e1 = arg[1] - arg[2]# 协议读,读取输出给加热棒的数据包Protocol_加热棒.BlockRead()# 获取字段,当前电压,作为下一次的V(k-1)V1 = Protocol_加热棒.加热棒输出电压.ValueStandard_Test(Test)
  1. 如果是读取“测试数据”的写法,那么就需要添加数据。点击“测试数据”,在“输入参数”下方的空白行处右键,点击“添加输入参数”
    在这里插入图片描述
    比如要新建名称为“序号”的一列,那么就这样填
    在这里插入图片描述
    同样的方法,在输入参数处添加“设定温度”、“采集温度”,然后点击“添加行”,就可以添加数据了
    在这里插入图片描述

散热风扇

  1. 首先看功能需求
    在这里插入图片描述
  2. 新建项目,写测试代码
# coding:utf-8
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
import Manudef Test(arg,exp):# 写入数据前,先清理通道seekresult=CH_232_温度传感器.Clear()seekresult=CH_232_散热风扇.Clear()# 写入第一次温度Protocol_温度传感器.温度值.Value = arg[1]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(500)# 写入第二次温度Protocol_温度传感器.温度值.Value = arg[2]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(500)CH_232_散热风扇.Clear()# 写入第三次温度Protocol_温度传感器.温度值.Value = arg[3]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(500)# 确保控制散热风扇的指令能够正常发出去Protocol_散热风扇.BlockRead()show = []str = '第%d次期望散热风扇输出值:%s,实际输出值:%d' % (arg[0], exp[0], Protocol_散热风扇.操作指令.Value)show.append(str)Manu.Check(show)## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)
  1. 构建测试数据
    在这里插入图片描述
  2. 先启动SensorControl.exe,再运行测试程序
    对比两个程序的输出即可
    在这里插入图片描述
    在这里插入图片描述

温度传感器输入接口(Senser_JK)

  1. 首先看接口需求
    在这里插入图片描述
    在这里插入图片描述
  2. 构建测试数据
    在这里插入图片描述
  3. 代码
# coding:utf-8
import Manudef Test(arg,exp):# 先清理温感通道seekresult=CH_232_温度传感器.Clear()# 分割字符串为列表,按照空格str = arg[0].split(' ')data = []for i in str:# 将16进制整型的字符串转化为整型表示# 将16进制字符串转化为10进制整型表示data.append(int(i, 16))# 通道写入数据包bool=CH_232_温度传感器.Write(data)show = []show.append(exp[0])Manu.Check(show)## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)

控制加热棒输出接口(Heater_JK)

  1. 首先看接口需求
    在这里插入图片描述
  2. 测试代码
#设定温度10℃
def Main():print 'Hello world'seekresult=CH_232_加热棒.Clear()seekresult=CH_232_温度传感器.Clear()Protocol_温度传感器.温度值.Value = 20      #不加热bool=Protocol_温度传感器.Write()Protocol_加热棒.BlockRead()if Protocol_加热棒.包头.Value != 0xFFFA:print '包头错误,错误的包头为%x'%Protocol_加热棒.包头.Valueif Protocol_加热棒.数据类型1.Value != 0x02:print '执行数据错误,错误的数据类型1为%d'%Protocol_加热棒.数据类型1.Valueif Protocol_加热棒.数据类型2.Value != 0x11:print '工作电机组错误,错误的数据类型2数据为%x'%Protocol_加热棒.数据类型2.Valueif Protocol_加热棒.数据长度.Value != 4:print '数据长度错误,错误的长度值为%d'%Protocol_加热棒.数据长度.Valueif Protocol_加热棒.检验.Checked != True:print '检验值错误,错误的校验值为%x'%Protocol_加热棒.检验.Valueif Protocol_加热棒.包尾.Value !=0x0F:print '包尾错误,错误的包尾为%x'%Protocol_加热棒.包尾.ValueProtocol_温度传感器.温度值.Value = 5      #加热bool=Protocol_温度传感器.Write()Protocol_加热棒.BlockRead()if Protocol_加热棒.包头.Value != 0xFFFA:print '包头错误,错误的包头为%x'%Protocol_加热棒.包头.Valueif Protocol_加热棒.数据类型1.Value != 0x02:print '执行数据错误,错误的数据类型1为%d'%Protocol_加热棒.数据类型1.Valueif Protocol_加热棒.数据类型2.Value != 0x11:print '工作电机组错误,错误的数据类型2数据为%x'%Protocol_加热棒.数据类型2.Valueif Protocol_加热棒.数据长度.Value != 4:print '数据长度错误,错误的长度值为%d'%Protocol_加热棒.数据长度.Valueif Protocol_加热棒.检验.Checked != True:print '检验值错误,错误的校验值为%x'%Protocol_加热棒.检验.Valueif Protocol_加热棒.包尾.Value !=0x0F:print '包尾错误,错误的包尾为%x'%Protocol_加热棒.包尾.ValueMain()

控制散热风扇输出接口(Fan_JK)

  1. 首先看接口需求
    在这里插入图片描述
  2. 测试代码
# 设定温度为10
def Main():seekresult=CH_232_温度传感器.Clear()seekresult=CH_232_散热风扇.Clear()# 写入初始状态,保证风扇不转动for i in [8, 8, 8]:Protocol_温度传感器.温度值.Value = ibool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(100)# 散热风扇阻塞获取数据包Protocol_散热风扇.BlockRead()if Protocol_散热风扇.包头.Value != 0xFFFA:print "包头错误,错误的包头为: %x" % Protocol_温度传感器.包头.Valueif Protocol_散热风扇.数据类型1.Value != 0x02:print "数据类型1错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型1.Valueif Protocol_散热风扇.数据类型2.Value != 0x22:print "数据类型2错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型2.Valueif Protocol_散热风扇.数据长度.Value != 1:print "数据长度错误,错误的数据长度为: %d" % Protocol_散热风扇.数据长度.Valueif Protocol_散热风扇.检验.Checked != True:print "检验和错误,错误的检验值为: %x" % Protocol_散热风扇.检验.Valueif Protocol_温度传感器.包尾.Value != 0x0F:print "包尾错误,错误的包尾为: %x" % Protocol_散热风扇.包尾.Valueprint "---------------------------------------------------------------------------------"# 写入初始状态,保证散热风扇工作,来判断数据包是否正确seekresult=CH_232_散热风扇.Clear()for i in [15, 15, 15]:Protocol_温度传感器.温度值.Value = ibool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(100)Protocol_散热风扇.BlockRead()if Protocol_散热风扇.包头.Value != 0xFFFA:print "包头错误,错误的包头为: %x" % Protocol_温度传感器.包头.Valueif Protocol_散热风扇.数据类型1.Value != 0x02:print "数据类型1错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型1.Valueif Protocol_散热风扇.数据类型2.Value != 0x22:print "数据类型2错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型2.Valueif Protocol_散热风扇.数据长度.Value != 1:print "数据长度错误,错误的数据长度为: %d" % Protocol_散热风扇.数据长度.Valueif Protocol_散热风扇.检验.Checked != True:print "检验和错误,错误的检验值为: %x" % Protocol_散热风扇.检验.Valueif Protocol_温度传感器.包尾.Value != 0x0F:print "包尾错误,错误的包尾为: %x" % Protocol_散热风扇.包尾.ValueMain()

温控稳定时间性能需求(Control_XN)

  1. 首先看性能需求
    在这里插入图片描述
    在这里插入图片描述
  2. 测试代码
# coding:utf-8
#设定温度为10℃,初始恒温箱外部温度值为3℃
def Main():print 'Hello world'import timeTc = 10    #设定温度T0 = 0      #初始恒温箱外部温度值T = T0n = 0Fs = 0Va = 0   #上一次的输出电压time0 = time.time()while 1:seekresult=CH_232_温度传感器.Clear()seekresult=CH_232_加热棒.Clear()seekresult=CH_232_散热风扇.Clear()           Protocol_温度传感器.温度值.Value = Tbool=Protocol_温度传感器.Write()Protocol_加热棒.BlockRead()Protocol_散热风扇.BlockRead()V = Protocol_加热棒.加热棒输出电压.Valueif V<0:V=0# 计算加热棒的加热量Qi = V*V *0.2if Protocol_散热风扇.操作指令.Value == 1:       #风扇打开Fs =2elif Protocol_散热风扇.操作指令.Value == 0:       #风扇关闭Fs = 0# 计算散热风扇的散热量Qo = 0.1*(T - T0) + Fs#Qo = Fs# 温度的变化量T = T+(Qi-Qo)      #下次输出温度值if abs(T - Tc) < 0.5:n=n+1else:n=0# 当超过10次时if n >=10:time1 = time.time()print '稳定时间为%d'%(time1-time0)if time1-time0 <=60:print '温控稳定时间性能测试合格'break# 当始终不能达到十次time2 = time.time()# 超时if time2-time0>60:print '温控稳定时间性能测试不合格'breakAPI.Common.Timer.Normal.Sleep(1000)Main()

最终测试结果

在这里插入图片描述

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...