195 lines
7.5 KiB
Python
195 lines
7.5 KiB
Python
import time
|
|
|
|
from dev_LaminaController import LaminaController
|
|
from dev_LaminaController import ParamMap_LaminaController
|
|
|
|
|
|
def test_communication(device: LaminaController, time_out=2):
|
|
""" 通信成功率测试 """
|
|
time_start = time.time()
|
|
param_saved = device.flag_print, device.retry, device.time_out
|
|
device.flag_print = False
|
|
device.retry = 1
|
|
try:
|
|
while True:
|
|
device.frame_read(0x0C, 0x20)
|
|
print(f"Time Stamp: {time.ctime()}")
|
|
print(f"Success Frame: {device.log['read']}")
|
|
print(f"Failed Frame: {device.log['send'] - device.log['read']}")
|
|
print(f"Max Series Failed Frame: {device.log['keep-fail']}")
|
|
time.sleep(time_out)
|
|
finally:
|
|
time_end = time.time()
|
|
print("Test Result: ")
|
|
print(f"Time Start: {time.strftime(r'%Y-%m-%d %H:%M:%S', time.localtime(time_start))}, \tTime End: {time.strftime(r'%Y-%m-%d %H:%M:%S', time.localtime(time_end))}")
|
|
print(f"Time Elapsed: {time_end - time_start}")
|
|
print(f"Success Rate: {device.log['read'] / device.log['send'] * 100}%")
|
|
device.flag_print, device.retry, device.time_out = param_saved
|
|
|
|
|
|
def test_parameters(device:LaminaController, ParamMap:dict, ParamCase:dict):
|
|
""" 参数读写测试 """
|
|
pass
|
|
|
|
def frame_write(device:LaminaController, address, info, value):
|
|
""" 整合参数写入接口 """
|
|
length = 2 if info[1] in [3, 6] else 1
|
|
length = info[2] if info[1] in [4, 5, 7] else length
|
|
if length == 1:
|
|
return device.frame_write_one(address, value)
|
|
elif length == 2:
|
|
return device.frame_write_dual(address, value)
|
|
else:
|
|
return device.frame_write_str(address, value)
|
|
def frame_read(device:LaminaController, address, info):
|
|
""" 整合参数读取接口 """
|
|
length = 2 if info[1] in [3, 6] else 1
|
|
length = info[2] if info[1] in [4, 5, 7] else length
|
|
if device.frame_read(address, length):
|
|
return device.output['Regs'][address]
|
|
else:
|
|
return None
|
|
|
|
def check_result(device:LaminaController, item_param, value, result:bool):
|
|
""" 测试参数写入结果 """
|
|
addr_param, info_param = item_param
|
|
len_param = 2 if info_param[1] in [3, 6] else 1
|
|
len_param = info_param[2] if info_param[1] in [4, 5, 7] else len_param
|
|
|
|
device.frame_write_one(addr_param, value)
|
|
device.frame_read(addr_param, len_param)
|
|
|
|
output_value = device.output['Regs'][addr_param]
|
|
if result:
|
|
assert value == output_value
|
|
else:
|
|
assert value != output_value
|
|
|
|
for addr_param, info_param in ParamMap.items():
|
|
if addr_param in ParamCase.keys():
|
|
itemCase = ParamCase[addr_param]
|
|
list_case = []
|
|
if 0 in itemCase.keys():
|
|
""" 常规读写用例测试 """
|
|
for data_write, data_read in itemCase[0]:
|
|
list_case.append((data_write, data_read, True))
|
|
if 1 in itemCase.keys():
|
|
""" 写入范围用例测试 """
|
|
deadzone = 0.5
|
|
val_min, val_max = itemCase[1]
|
|
if 2 in itemCase.keys():
|
|
""" 存在大小约束相关项 """
|
|
list_case_relate = []
|
|
mode_relate, addr_relate, deadzone = itemCase[2]
|
|
val_relate = frame_read(device, addr_relate, ParamCase[addr_relate])
|
|
if mode_relate == 1:
|
|
if val_relate > val_min:
|
|
list_case_relate.append((val_min - deadzone, val_min - deadzone, True))
|
|
val_min = val_relate
|
|
else:
|
|
val_min
|
|
elif mode_relate == 2:
|
|
if val_relate < val_max:
|
|
list_case_relate.append((val_max + deadzone, val_max + deadzone, True))
|
|
val_max = val_relate
|
|
else:
|
|
val_max
|
|
list_case.append((val_min - deadzone, val_min - deadzone, False))
|
|
list_case.append((val_min, val_min, True))
|
|
list_case.append((val_min + deadzone, val_min + deadzone, True))
|
|
list_case.append((val_max + deadzone, val_max + deadzone, False))
|
|
list_case.append((val_max, val_max, True))
|
|
list_case.append((val_max - deadzone, val_max - deadzone, True))
|
|
|
|
|
|
|
|
current_value = frame_read(device, addr_param, info_param)
|
|
frame_write(device, addr_param, info_param, val_min - 1)
|
|
result = frame_read(device, addr_param, info_param)
|
|
assert result == current_value
|
|
frame_write(device, addr_param, info_param, val_min - 0.5)
|
|
result = frame_read(device, addr_param, info_param)
|
|
assert result == current_value
|
|
frame_write(device, addr_param, info_param, val_min)
|
|
result = frame_read(device, addr_param, info_param)
|
|
assert result == val_min
|
|
current_value = result
|
|
frame_write(device, addr_param, info_param, val_max + 1)
|
|
result = frame_read(device, addr_param, info_param)
|
|
assert result == current_value
|
|
frame_write(device, addr_param, info_param, val_max + 0.5)
|
|
result = frame_read(device, addr_param, info_param)
|
|
assert result == current_value
|
|
frame_write(device, addr_param, info_param, val_max)
|
|
result = frame_read(device, addr_param, info_param)
|
|
assert result == val_max
|
|
if 2 in itemCase.keys():
|
|
""" 大小关联用例测试 """
|
|
if itemCase[0] == 0:
|
|
""" 数值相等关联项 """
|
|
pass
|
|
|
|
|
|
def main():
|
|
mode_config = {
|
|
"Log": {'com_name': None,
|
|
# 'addr_645': [0x01, 0x00, 0x00, 0x00, 0x00, 0x40],
|
|
},
|
|
"Debug": {'com_name': 'COM5',
|
|
# 'addr_645': [0x01, 0x02, 0x03, 0x04, 0x05, 0x06],
|
|
# 'frame_print': True,
|
|
'time_out': 0.5, 'retry': 3},
|
|
}
|
|
|
|
TestCase = {
|
|
# 测试用例定义
|
|
# 0 - 正常写入数据序列; [(写入数据, 读取数据)]
|
|
# 1 - 范围限制测试; (最小值, 最大值)
|
|
# 2 - 相关大小限制测试; ((0-等于, 1-小于, 2-大于), 相关值地址, 死区范围)
|
|
0x60: {0: [(0, 0), (1, 1), (2, 1), (0xFF, 1)]},
|
|
0x61: {0: [(60.0, 60.0)], 1: (40, 60), 2: (1, 0x62, 0.5)},
|
|
0x62: {0: [(440.0, 440.0)], 1: (350, 560), 2: (2, 0x61, 0.5)},
|
|
0x63: {},
|
|
0x64: {},
|
|
0x65: {},
|
|
0x66: {},
|
|
0x67: {},
|
|
0x68: {},
|
|
0x69: {},
|
|
0x6A: {},
|
|
0x6C: {},
|
|
0x6E: {},
|
|
0x70: {},
|
|
0x71: {},
|
|
0x72: {},
|
|
0x73: {},
|
|
0x74: {},
|
|
0x75: {},
|
|
0x76: {},
|
|
0x78: {},
|
|
0x7A: {},
|
|
0x7B: {},
|
|
0x7C: {},
|
|
0x7D: {},
|
|
0x7E: {},
|
|
0x7F: {},
|
|
0x80: {},
|
|
0x81: {},
|
|
0x82: {},
|
|
0x83: {},
|
|
0x84: {},
|
|
0x85: {},
|
|
0x86: {},
|
|
0x88: {},
|
|
0x8A: {},
|
|
0x8B: {},
|
|
0x170: {},
|
|
0x180: {},
|
|
0x190: {},
|
|
}
|
|
dev_lamina = LaminaController(**mode_config['Debug'])
|
|
test_parameters(dev_lamina, ParamMap_LaminaController, TestCase)
|
|
|
|
if __name__== "__main__":
|
|
main()
|