220 lines
5.3 KiB
Python
220 lines
5.3 KiB
Python
|
|
|||
|
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()
|