220 lines
5.3 KiB
Python
Raw Normal View History

2025-04-10 17:31:33 +08:00
import os
import csv
import numpy
testcase_header_template='''
# coding:utf-8
import argparse
import os
import sys
import inspect
import serial
import serial.tools.list_ports
import time
import random
import datetime
import threading
sys.path.append('./base')
import autotest_time as at_time
import autotest_usart as at_usart
sys.path.append('./inst')
import power_agilent_scpi as ag_power
import power_dpm8600_modbus as dpm_power
import temp_modbus as temp_modbus
sys.path.append('./case')
import case_parser as caseparser
TEMP_PORT='COM45'
TEMP_BANDRATE='9600'
DPM8600_PORT='COM46'
DPM8600_BANDRATE='9600'
DPM8600_CHANNEL=1
AG_POWER_PORT='COM47'
AG_POWER_BANDRATE='9600'
__version__ = "1.0"
PYTHON2 = sys.version_info[0] < 3 # True if on pre-Python 3
DEFAULT_BAUD='115200'
DEFAULT_PORT='COM10'
class FatalError(RuntimeError):
def __init__(self, message):
RuntimeError.__init__(self, message)
@staticmethod
def WithResult(message, result):
"""
Return a fatal error object that appends the hex values of
'result' as a string formatted argument.
"""
message += " (result was %s)" % hex(result)
return FatalError(message)
pasttime=datetime.datetime.now()
nowtime=datetime.datetime.now()
def err_exit(args):
nowtime=datetime.datetime.now()
print("test start time :"+pasttime.strftime('%Y-%m-%d %H:%M:%S'))
print("test end time:"+nowtime.strftime('%Y-%m-%d %H:%M:%S'))
print(str(nowtime-pasttime))
sys.exit(args)
def arg_auto_int(x):
return int(x, 0)
def version(args):
print(__version__)
def list_com(args):
at_usart.list_com()
def ret_cmd(ser,cmd):
ser.write(cmd)
s=ser.readline()
print(bytes.decode(s))
return bytes.decode(s)
def no_ret_cmd(ser,cmd):
ser.write(cmd)
def reset(ser):
ser.close()
ser.rts=1
ser.open()
time.sleep(2)
ser.close()
ser.rts=0
ser.open()
'''
testcase_main_template='''
def test(args):
ser = serial.Serial(args.port, args.baud, bytesize=8, parity='N', stopbits=1, timeout=5)
reset(ser)
print("*** Auto Test ***\\n")
print("* Board Connected. *")
print("*------------------------*")
'''
testcase_end_template='''
def main():
print("Start time:"+at_time.get_time_stamp())
parser = argparse.ArgumentParser(description='autotest.py v%s - Auto Testing Utility' % __version__, prog='autotest')
parser.add_argument(
'--port', '-p',
help='Serial port device',
default=DEFAULT_PORT)
parser.add_argument(
'--baud', '-b',
help='Serial port baud rate used when flashing/reading',
type=arg_auto_int,
default=DEFAULT_BAUD)
subparsers = parser.add_subparsers(
dest='operation',
help='Run autotest {command} -h for additional help')
parser_basic = subparsers.add_parser(
'test',
help='auto test test.')
parser_list_com = subparsers.add_parser(
'list_com',
help='list all useful com ports.')
args = parser.parse_args()
print("------------------------------------------------------")
print(' Autotest Testing Utility v%s' % __version__)
print("------------------------------------------------------")
print("")
if args.operation is None:
parser.print_help()
err_exit(1)
operation_func = globals()[args.operation]
if PYTHON2:
# This function is depreciated in Python3
operation_args = inspect.getargspec(operation_func).args
else:
operation_args = inspect.getfullargspec(operation_func).args
operation_func(args)
def _main():
try:
main()
except FatalError as e:
print('\\n A fatal error occurred: %s' % e)
err_exit(2)
if __name__ == '__main__':
_main()
'''
class case_parser:
def __init__(self,path):
print("init")
f=open(path,encoding='utf-8')
self.reader = csv.reader(f)
# 读取一行下面的reader中已经没有该行了
self.head_row = next(self.reader)
print(self.reader.line_num, self.head_row)
self.fp=open(os.path.splitext(os.path.basename(path))[0]+'.py',"w+",encoding="utf-8")
self.fp.write(testcase_header_template)
def gen_func(self,num,row):
print("")
self.fp.write("def testcase"+str(num)+"(ser):\n")
self.fp.write(" print('run testcase"+str(num)+"')\n")
self.fp.write(" ret_cmd(ser,b'"+row[2]+"')\n")
self.fp.write(" str=ser.readline()\n")
self.fp.write(" if str==b'"+row[3]+"':\n")
self.fp.write(" print('testcase"+str(num)+" Pass!')\n")
self.fp.write(" return True\n")
self.fp.write(" else:\n")
self.fp.write(" print('testcase"+str(num)+" Fail!')\n")
self.fp.write(" return False\n")
self.fp.write("\n")
def gen_func1(self,num,row):
print("")
self.fp.write("def testcase"+str(num)+"(ser):\n")
self.fp.write(" print('run testcase "+row[2]+"')\n")
self.fp.write(" ret_cmd(ser,b'"+row[2]+"\\r\\n')\n")
self.fp.write(" str=ser.readline()\n")
self.fp.write(" if str==b'"+row[3]+"\\r\\n':\n")
self.fp.write(" print('test "+row[2]+" Pass!')\n")
self.fp.write(" return True\n")
self.fp.write(" else:\n")
self.fp.write(" print('test "+row[2]+" Fail!')\n")
self.fp.write(" return False\n")
self.fp.write("\n")
def parser(self):
print("parser")
casenum=[]
for row in self.reader:
# 行号从2开始.
print(self.reader.line_num, row)
casenum.append(str(self.reader.line_num))
self.gen_func1(self.reader.line_num,row)
#self.fp.write(row[2]+"\r\n")
#self.fp.write(row[3]+"\r\n")
self.fp.write(testcase_main_template)
for num in casenum:
self.fp.write(" testcase"+num+"(ser)\n")
self.fp.write(testcase_end_template)
self.fp.close()