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