2019年省赛题目为例
写在前面的话:
1.功能测试里不涉及包的发送,所以写的方式都是 协议写(Protocol…write()),协议写是让待测件显示数据。
2.输入接口测试需要自己设计帧,然后通道写(带参数的)把帧送到硬件里。注意要把帧拆分之后再转成十六进制。
3.输出接口测试需要自己给字段赋值, 然后协议写相关元器件(这个元器件是发给待测件的),然后待测件将相应的包发给 接受包的元器件,该元器件进行BlockRead()。
4. 用BlockRead() 是可以接收数据的器件,写这个语句前一般是对 输入设备进行了字段赋值操作,用BlockRead()的好像用的都是 协议写。
5.涉及通道的操作只有 通道清除Clear 和 输入接口测试的写操作
功能测试:
一.测数值是否被截断的代码:
1.清空 接受器件的通道
2.赋值 接受器件的值
3.协议写 待测件前端
4.延时1s
以温度传感器为例:
def Test(arg,exp):
CH_232_温度传感器.Clear()
Protocol_温度传感器.温度值.Value = arg[1]
bool=Protocol_温度传感器.Write()
API.Common.Timer.Normal.Sleep(1000)
Standard_Test(Test)
再以预选赛试题为例:
# coding:utf-8
import Manu
def Test(arg,exp):
Protocol_车速传感器.speed.Value=arg[0]
bool=Protocol_车速传感器.Write()
show=[]
show.append("车速为:"+str(exp[0]))
passed=Manu.Check(show)
Standard_Test(Test)
二.涉及递推表达式的代码
1.写 递推函数
2.声明全局变量(因为递推会用到上次的值)
3.清空 接受器件的通道
4.赋值 接受器件的值
5.协议写 待测件前端
6.相关器件包读待测件发来的包
7.调用相关器件的函数进行运算
再以温度传感器为例:
# coding:utf-8
#设定温度为10℃
#散热风扇输出值0为关,1为开
#Segment 加热棒输出电压 StandardFloat
import math, Manu
def VK(t, td, e1, e2):
Dp = 0.05
Di = 0.1
Dd = 0.1
e = td - t
result = Dp * (e - e1) + Di * e + Dd * (e - 2 * e1 + e2)
return result
def 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)
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) + v1
print VK(arg[2], arg[1], e1, e2)
print v1
e2 = e1
e1 = arg[1] - arg[2]
Protocol_加热棒.BlockRead()
v1 = Protocol_加热棒.加热棒输出电压.Value
Standard_Test(Test)
三.读写的代码
1.清空通道
2.赋值相关元器件
3.相关器件包读待测件发来的包
4.调用相关器件的字段进行验证
以温度传感器为例:
# coding:utf-8
#设定温度为10℃
#散热风扇输出值0为关,1为开
def Test(arg,exp):
CH_232_温度传感器.Clear()
CH_232_散热风扇.Clear()
Protocol_温度传感器.温度值.Value = arg[1]
Protocol_温度传感器.Write()
API.Common.Timer.Normal.Sleep(500)
Protocol_温度传感器.温度值.Value = arg[2]
Protocol_温度传感器.Write()
API.Common.Timer.Normal.Sleep(500)
Protocol_温度传感器.温度值.Value = arg[3]
Protocol_温度传感器.Write()
Protocol_散热风扇.BlockRead()
print '第%d次期望散热风扇输出值%d,实际输出值%d'%(arg[0], exp[0],Protocol_散热风扇.操作指令.Value)
API.Common.Timer.Normal.Sleep(2000)
Standard_Test(Test)
四.普通程序书写
1.常量变量自由定义,没有约束。
2.注意循环的书写,变量的更替赋值等。
以 预选赛题目为例:
Dp = 0.05
Di = 0.1
Dd = 0.1
vd = 80
spd = [60, 63, 67, 71, 73, 76, 79, 81, 83, 85]
UK = 0
uk1 = 1
seekresult=CH_油门.Clear()
for i in range(len(spd)):
vk = spd[i]
if (i==0):
ek = vd - vk
ek1 = 0
ek2 = 0
elif (i == 1):
ek = vd - vk
ek1 = vd - spd[i-1]
ek2 = 0
else:
ek = vd - vk
ek1 = vd - spd[i-1]
ek2 = vd - spd[i-2]
UK = Dp*(ek - ek1) + Di*ek + Dd*(ek - 2* ek1 + ek2) + uk1
print UK
uk1 = UK
Protocol_车速传感器.speed.Value = vk
bool=Protocol_车速传感器.Write()
Protocol_油门.BlockRead()
print "预期输出电压 %f"% (Protocol_油门.voltage.Value)
API.Common.Timer.Normal.Sleep(1000)
接口测试
一.输入接口测试(输入接口需要自己构造数据)
1.清空通道
2.读包,用spilt分割,创建数组把拆分的包转成16进制。
3.通道写入相应器件。
以温度传感器为例
# coding:utf-8
import Manu
def Main(arg,exp):
CH_232_温度传感器.Clear()
str=arg[0].split(' ')
data=[]
for i in str:
data.append(int(i,16))
bool=CH_232_温度传感器.Write(data)
show=[]
show.append(exp[0])
passed=Manu.Check(show)
print exp[0]
if passed:#测试通过
print '本次测试通过。'
else:
print '本次测试不通过。'
Standard_Test(Main)
# coding:utf-8
import Manu
def Test(arg,exp):
seekresult=CH_车速传感器.Clear()
arr = arg[0].split(' ')
data = []
for i in arr:
data.append(int(i,16))
bool=CH_车速传感器.Write(data)
a=Manu.Check([exp[0]])
print exp[0] + ":" + str(a)
API.Common.Timer.Normal.Sleep(500)
Protocol_车速传感器.speed.Value=100
bool=Protocol_车速传感器.Write()
API.Common.Timer.Normal.Sleep(500)
if Protocol_车速传感器.head.Value != 0xFF55:
print '包头错误,错误的包头为%x'%Protocol_车速传感器.head.Value
if Protocol_车速传感器.cmdType.Value != 0x08:
print 'cmdType错误,错误的cmdType为%d'%Protocol_车速传感器.cmdType.Value
if Protocol_车速传感器.dataLength.Value != 4:
print '数据长度错误,错误的长度值为%d'%Protocol_车速传感器.dataLength.Value
if Protocol_车速传感器.checksum.Checked != True:
print '检验值错误,错误的校验值为%x'%Protocol_车速传感器.checksum.Value
if Protocol_车速传感器.tail.Value !=0xFF55:
print '包尾错误,错误的包尾为%x'%Protocol_车速传感器.tail.Value
Standard_Test(Test)
二.输出接口测试
1.输出设备设定初始值
2.将输出设备信息输出到待测件
3.输入设备进行包读(BlockRead())
4.判断各个信息