#!/usr/bin/py-thon # -*- cod-ing: UTF-8 -*- im-port logging im-port os im-port socket im-port subprocess im-port time im-port ConfigParser cl-ass UDPClient(object): logger = logging.getLogger('test.udp_client') de-f __init__(self, socket_timeout=3): self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket.settimeout(socket_timeout) de-f send(self, msg, address, wait_time=0, buff_size=163840): if isinstance(msg, unicode): msg = msg.encode() self.socket.sendto(msg, address) self.logger.debug('Send %s' % msg) try: pre_data, address = self.socket.recvfrom(buff_size) data = pre_data.decode('utf-8') except socket.timeout: if msg != 'init': self.logger.warn('Receive message time out for: %s', msg) data = '' except Exception as ex: if msg != 'hello': self.logger.error('Receive message error for: %s. %s', msg, ex) data = '' if wait_time > 0: time.sleep(wait_time) self.logger.debug('Receive: %s' % data) return data de-f close(self): self.socket.close() cl-ass TestTool(object): case_logger = logging.getLogger('case') def __init__(self): self.client = UDPClient(socket_timeout=60) self.client_ui = UDPClient() self.address = self._init_address() self.game_process = None @staticmethod de-f _init_address(): - path = os.path.join(os.path.dirname(__file__), 'dut', 'port.ini') if os.path.isfile(path): cf = ConfigParser.ConfigParser() cf.read(path) host = cf.get("address", "host") port = cf.getint('address', 'port') return host, port return '127.0.0.1', 5555 de-f close_udp(self): self.client.close() self.client_ui.close() self.client = UDPClient(socket_timeout=60) self.client_ui = UDPClient() de-f logger_info(self, msg): self.case_logger.info(msg) de-f _logger_exam(self, info): self.client.send('[LOG]' + info, self.address) de-f set_file_logger(self, path): logging.basicConfig(level='INFO', format='[%(asctime)s]<pid=%(process)d tid=%(thread)d>%(levelname)8s - %(message)s') handler = logging.FileHandler(path, 'a') logging.root.addHandler(handler) self.case_logger.info('Begin Test:' + time.asctime(time.localtime())) de-f case_start(self, info): self.init_dut() self._logger_exam('[CASE][START] %s' % info) de-f case_finished(self, info): self._logger_exam('[CASE][FINISHED] %s' % info) de-f case_failed(self, info): self._logger_exam('[CASE][FAILED] %s' % info) de-f send_cmd(self, cmd): return self.client.send(cmd, self.address) de-f start_dut(self): os.system(os.path.join(os.path.dirname(__file__), 'killdut.bat')) game_path = os.path.join(os.path.dirname(__file__), 'dut') self.game_process = subprocess.Popen(os.path.join(game_path, 'dut.exe udp'), shell=True, cwd=game_path) self.wait_dut_start() self.init_dut() de-f wait_dut_start(self): for x in xrange(60): time.sleep(1) if self.client_ui.send('hello', self.address) != '': break de-f init_dut(self): self.client_ui.send('init', self.address) de-f stop_dut(self): self.send_cmd('quit') time.sleep(2) self.close_udp() os.system(os.path.join(os.path.dirname(__file__), 'killdut.bat')) tool = TestTool()
测试相关
--------------------------------------------
猜你喜欢
转载自jaczhao.iteye.com/blog/2400837
今日推荐
周排行