2025-04-11 09:40:32 +08:00

220 lines
5.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()