明天就是嵌入式大赛的预选赛了,今晚加班写个博客
1、安装环境
下载了官方的安装包之后,官方给出了详细的安装说明,下载请看百度网盘地址:
链接:https://pan.baidu.com/s/1ngYQK3c2P1e367SFC3Q__A 密码:dwud
1.1、首先安装VSDP,具体的文件名为:
1.2、配置虚拟串口
运行
在弹出来的软件页面中选择
这两个串口
1.3、安装ETest软件
1.4、运行Etest软件-进程调度服务
1.5、运行测试设计台
1.6、打开给定的测试项目文件
1.7、在“设备规划”上点击右键,选择“编辑”,打开设备规划
1.8、.选中“物理通道”下面的“232”,打开“属性”标签页,选择“端口名”为一对虚拟串口
中的一个
1.9、运行被测软件,启动服务,选择端口号
1.10、打开测试项目中的测试“功能 2”
1.11、首先进行“环境设置”
1.12、点击“运行”
1.13、使用对话框判断测试结果
1.14、查看界面输出结果
2、例题一
题目分享:链接:https://pan.baidu.com/s/1uPS_y3bo_OLRc0FFZqpvkw 密码:rsjg
题目由一个需求文档和测试要求给出,这是关于模拟水流监控计费器的题目
2.1、定义协议:

如仿真图所示,这里定义了Protocol_1和Protocol_2以及CH_232_1三种自定义通信类型。具体的实现如下
//协议Protocol_1
Protocol Main
Segment 包头 StandardUInt16 Default=0X55AA ByteOrder=Big
Segment 阀门控制器ID StandardUInt8 Default=0
Segment 水流监控计费器ID StandardUInt8 Default=0X20
Segment 瞬时流量 StandardFloat Default=0.0
Segment 计费标志 StandardUInt8 Default=0
Segment 管道压力 StandardFloat Default=0.0
Segment 校验和 CRC Algorithm=CRC_SUM_8 BitCount=16 Range=(16,0)
Segment 包尾 StandardUInt16 Default=0X55AA ByteOrder=Big
End
//协议Protocol_2
Protocol Main
Segment 包头 StandardUInt16 Default=0X55AA ByteOrder=Big
Segment 水流监控计费器ID StandardUInt8 Default=0X20
Segment 阀门控制器ID StandardUInt8 Default=0
Segment 瞬时流量报警标志 StandardUInt8 Default=0
Segment 管道压力控制指令 StandardUInt8 Default=0
Segment 校验和 CRC Algorithm=CRC_SUM_8 BitCount=8 Range=(16,0)
Segment 包尾 StandardUInt16 Default=0X55AA ByteOrder=Big
End
//协议CH_232_1似乎是系统定义的
遇到了一个报错

提示我协议没有定义,但是实际上协议是定义了的,只不过这两个东西没有嵌入起来
3、例题二
题目分享:链接:https://pan.baidu.com/s/1P16uKgLtrLjIl1o5Jo9y1Q 密码:nmbs
模拟共享单车
这道题是去年秋季赛的分区预赛题目
按照以上的操作,打开待测元器件的服务端(也就是.exe结尾的应用程序),然后打开功能3的测试
//功能三描述
2.3 位置信息的接收处理(GN_WZ)
GPS 模块定时(1s)向外发送位置信息,锁具控制模块接收并处理 GPS 发送
位置信息。
序号 数据名称 单位 范围
1 经度 度 0-180
2 经度标志位 固定值 0X45(E-东经),0X57(W-西经)
3 纬度 度 0-90
4 纬度标志位 固定值 0X4E(N-北纬),0X53(S-南纬)
由于位置信息是 GPS 模块定时发送的,为可靠性起见,需要进行如下容错处
理:
1、当接收到的位置信息超出范围时,该 GPS 数据帧无效,做丢包处理,锁
具控制模块使用上一帧的信息;
2、经纬度标志位不正确时,锁具控制模块使用上一帧的位置信息。
3、经度、纬度四舍五入方式保留三位小数。
测试代码示例:
import Manu
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
def Test(arg,exp):
print 'Hello World!'
for a in arg:
print a
for e in exp:
print e
Protocol_gpstime.Hour.Value=arg[0]
Protocol_gpstime.Minute.Value=arg[1]
Protocol_gpstime.Second.Value=arg[2]
Protocol_gpstime.JingDu.Value=arg[3]
Protocol_gpstime.Flag_JD.Value=arg[4]
Protocol_gpstime.WeiDu.Value=arg[5]
Protocol_gpstime.Flag_WD.Value=arg[6]
Protocol_gpstime.Write()
show=[]
str='输入数据:时%d,分%d,秒%d,经度%f,经度标识%d,纬度%f,纬度标识%d\n' %(arg[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6])
show.append(str)
show.append(exp[0])
passed=Manu.Check(show)
print '测试结果:%s' %passed
# 断言:根据实际需求修改一下注释的部分
assertor=API.Platform.Assertion.Create()
assertor.AddInput('时',arg[0])
assertor.AddInput('分',arg[1])
assertor.AddInput('秒',arg[2])
assertor.AddInput('经度',arg[3])
assertor.AddInput('经度标识',arg[4])
assertor.AddInput('纬度',arg[5])
assertor.AddInput('纬度标识',arg[6])
assertor.AddOutput('界面显示',exp[0],passed)
if passed:#测试通过
assertor.Pass()
else:
assertor.Failed()
b=assertor.Commit()
## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)
#############################################
############自定义测试模板#######################
## 如果不希望使用测试数据驱动测试,则将【标准测试模板】删除,使用【自定义模板】
## 否则可以删除本节
#def Main():
# print 'Hello world'
#Main()
#################################################
测试结果既可以通过应用程序查看

也可以通过日志文件进行查看

再来看一个接口测试的示例
接口4的需求为:
在骑行状态下,锁具控制模块要在相对固定的时间(6-10S)内向服务器上
报位置信息
为了清除刚才的环境,可以点击清除环境设置,然后点开接口4的测试,自己写上测试代码,点击清理环境。
这是例题给的测试代码:
import time,Manu
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
def Test(arg,exp):
print 'Hello World!'
print '输入参数:%s' %arg[0]
print '预期输出:%s' %exp[0]
arg=arg[0].split(',')
l=[]
for a in arg:
l.append(int(a,16))
b=RS232通道.Write(l)
API.Common.Timer.Normal.Sleep(100)
t1=time.time()
t2=t1
out=''
while t2-t1<10:
bool=Protocol_ServerOutput.Read()
t2=time.time()
if bool and Protocol_ServerOutput.Flag.Value==2:
# array=Protocol_ServerOutput.ToBytes()
# for a in array:
# h='%02X' %a
# out+=str(h)
# out+=','
#
# print '输出的数据:%s' %out[:-1]
break
passed=True
if Protocol_ServerOutput.Head.Value!=0x55AA:
passed=False
print '包头错误! %s' %Protocol_ServerOutput.Head.Value
if Protocol_ServerOutput.BikeID.Value!=0xBB:
passed=False
print '包头错误! %s' %Protocol_ServerOutput.Head.Value
if Protocol_ServerOutput.jiaoyanhe.Checked!=True:
passed=False
print '校验和错误!'
if Protocol_ServerOutput.Tail.Value!=0x55AA:
passed=False
print '包尾错误! %s' %Protocol_ServerOutput.Tail.Value
## 断言:根据实际需求修改一下注释的部分
assertor=API.Platform.Assertion.Create()
assertor.AddInput('输入数据:',arg[0])
assertor.AddOutput('输出数据:',exp[0],out)
if passed:#测试通过
assertor.Pass()
print "服务器位置与时间上报输出接口正确。"
else:
assertor.Failed()
print "服务器位置与时间上报输出接口错误!"
b=assertor.Commit()
## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)
#############################################
运行结果为

性能测试示例:
需求:
在骑行状态下,锁具控制模块定时上报位置与时间信息要控制在 6-10s 之间
示例代码:
import time
t1=time.time()
def Test(arg,exp):
global t1
print 'Hello World!'
t2=time.time()
while True:
bool=Protocol_ServerOutput.Read()
t2=time.time()
if bool:
break
print 'GPS上报时间间隔为:%.2f秒' %(t2-t1)
passed=False
if int(t2-t1)>=6 and int(t2-t1)<=10:
passed=True
## 断言:根据实际需求修改一下注释的部分
assertor=API.Platform.Assertion.Create()
assertor.AddOutput('输出参数1',exp[0],str(t2-t1))
if passed:#测试通过
assertor.Pass()
else:
assertor.Failed()
t1=t2
b=assertor.Commit()
## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)
#############################################
测试结果:

4、例题三
题目分享:链接:https://pan.baidu.com/s/1OmASWyIFUvYCzqtJX8SFJA 密码:n06t
模拟空调
2017年嵌入式测试分区决赛题目
注意:
1.端口设置错误,可能会出现“打开XXX通道失败,可能会导致部分测试脚本失效”的问题
2.如果服务端口与协议端口重复,会导致服务端口不可用,所以最好(一定)每个协议使用不
同的端口,且端口号不能与.exe的应用程序用到的端口冲突。
4.1、温度测试
import Manu
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
def Test(arg,exp):
print '测试用例%d:命令设定温度值为%d' % (arg[1],arg[0])
Protocol_1.Tmp.Value=arg[0]
Protocol_1.Write()
API.Common.Timer.Normal.Sleep(1000)
show=[]
str = '遥控器设定温度为:%d,界面预期显示为:%d' % (arg[0],exp[0])
show.append(str)
show.append('界面室温显示是否正确?')
passed=Manu.Check(show)
if(passed):
print '界面显示与预期一致,界面判断通过'
else:
print '界面显示与预期不一致,界面判断不通过'
## 断言:根据实际需求修改一下注释的部分
assertor=API.Platform.Assertion.Create()
assertor.AddInput('命令设置温度',arg[0])
assertor.AddOutput('界面显示温度',exp[0],passed)
if (arg[0]<16 and exp[0]==16 and passed) or (arg[0]>30 and exp[0]==30 and passed) or (16<=arg[0]<=30 and exp[0]==arg[0] and passed) :#测试通过
print '本次测试通过。'
assertor.Pass()
else:
print '本次测试不通过,请输入测试问题'
assertor.Failed()
b=assertor.Commit()
## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)

每次重新进行测试时最好清理环境,避免因上一个测试用例的结果影响到接下来的测试