Python之CMIP自动化测试脚本

来源:互联网 发布:办公室office软件下载 编辑:程序博客网 时间:2024/05/19 20:41

## 模拟CMIP客户端发起请求(client.py)

import xml.etree.ElementTree as Etreeimport threadingimport socketimport timeimport os,sys###############################################################################g_server_ip = '192.168.1.103'g_server_port = 10000g_listen_max = 30g_msg_path = 'cmip'g_sep = '\\'###############################################################################encoding = 'utf-8'BUFSIZE = 1024*4gCount = 0################################################################################   Log Helper.###############################################################################Debug_Mode = 1Error_Mode =2 def log_time():    return time.strftime('%Y-%m-%d %H-%M-%S',time.localtime(time.time()))def LogMsg(mode,msg):    if mode == Debug_Mode:        flag = "Debug"    if mode == Error_Mode:        flag = "Error"    print "%s\t%s\t%s" % (log_time(),flag,msg)################################################################################   File Helper###############################################################################def readFile(fname):      with open(fname, 'r') as f:          return f.read()    def writeFile(fname,content):      with open(fname, 'w') as f:          return f.write(content)  ################################################################################   Request for Server###############################################################################################################################################################   Request for Server###############################################################################class Request:    cmdType = 0    cmdTarget = -1    timestamp = ''    cmd = -1    response = 1    parameter = ''    def __init__(self,_cmdTarget,_cmd,_response,_parameter):        self.cmdTarget = _cmdTarget        self.cmd = _cmd        self.response = _response        self.parameter = _parameter        self.timestamp = int(time.time())    def display(self):        print "-----------------------------------------------------------------------------"        print "cmd\t\t%s" % (self.cmd)        print "cmdTarget\t%s" % (self.cmdTarget)        print "response\t%s" % (self.response)        print "paramter\t%s" % (self.parameter)        print "-----------------------------------------------------------------------------"class RequestFactory:    global g_sep    def __init__(self,_cmdValue):        fname = os.path.join(os.getcwd(),"%s%s%d%sreq.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))        self.content = readFile(fname)    def toString(self):        return self.content    def toObject(self):        return Str_To_Request(self.content)class ResponseFactory:    def __init__(self,_cmdValue):        fname = os.path.join(os.getcwd(),"%s%s%s%sres.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))         self.content = readFile(fname)    def toString(self):        return self.contentdef DisNone(obj):    if obj != None:        return True    else:        return Falsedef Str_To_Request(str):    domTree = Etree.fromstring(str)    cmdType_node = domTree.find("cmdType")    cmdTarget_node = domTree.find("cmdTarget")    timestamp_node = domTree.find("timestamp")    cmd_node = domTree.find("cmd")    response_node = domTree.find("response")    parameter_node = domTree.find("parameter")    if DisNone(cmdType_node) and DisNone(cmdTarget_node) and DisNone(timestamp_node) and DisNone(response_node) and DisNone(parameter_node):        return Request(cmdTarget_node.text,cmd_node.text,response_node.text,parameter_node.text)    else:        return Noneclass Response:    cmd = 0    timestamp = ''    result = 1    content = ''    def __init__(self,_cmd,_result,_content):        self.cmd = _cmd        self.result = _result        self.content = _content        self.timestamp = int(time.time())    def display(self):        print "-----------------------------------------------------------------------------"        print "cmd\t\t%s" % (self.cmd)        print "result\t\t%s" % (self.result)        print "content\t\t%s" % (self.content.strip())        print "-----------------------------------------------------------------------------"        def Str_To_Response(str):    domTree = Etree.fromstring(str)    cmd_node = domTree.find("cmd")    result_node = domTree.find("result")    content_node = domTree.find("content")    if DisNone(cmd_node) and DisNone(result_node) and DisNone(content_node):        return Response(cmd_node.text,result_node.text,content_node.text)    else:        return Nonedef Response_To_Str(resp):    return "<resp><cmd>%d</cmd><timestamp>%s</timestamp><result>%d</result><content>%s</content>" % \           (resp.cmd, resp.timestamp, resp.result ,resp.content)class ResultCompareHandle:    def __init__(self,_resObj):        self.res_obj = _resObj    def compare(self):        cmd = self.res_obj.cmd        expect_obj = ResponseFactory(cmd).toObject()        if self.res_obj.result.strip() == expect_obj.result.strip():            return True        else:            return False################################################################################   CMA Handler Class###############################################################################class CMAHandler(threading.Thread):    def __init__(self,client):        threading.Thread.__init__(self)        self.client = client        self.count = 0    def run(self):        while True:            data = self.client.recv(BUFSIZE)            if(data):                req_str = bytes.decode(data,encoding)                req_obj = Str_To_Request(req_str)                if req_obj:                    req_obj.display()                    cmdValue = req_obj.cmd                    resp_obj = ResponseFactory(cmdValue).toString()                    self.client.send(ret)                else:                    LogMsg(Debug_Mode,"Client Request Format is invalid")            else:                break        LogMsg(Debug_Mode,"Client [%s] close Connection." % (self.client.getpeername()))################################################################################   TestClient Class.#   Create Tcp Link to Server#   if accept, create thread for it.###############################################################################class TestClient(threading.Thread):    def __init__(self, ip ,port):        threading.Thread.__init__(self)        self.port = port        self.ip = ip        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)        self.nMaxCmd = 3        self.curCmd = 0        self.nOKCmd = 0        self.nNGCmd = 0        self.ngList = []        self.okList = []    def run(self):        self.sock.connect((self.ip,self.port))        LogMsg(Debug_Mode,"Client Start Connecting to Server (%s,%d)" % (self.ip,self.port))        while True:            LogMsg(Debug_Mode,"Request[%d]" % (self.curCmd))            #[1]            req_factory = RequestFactory(self.curCmd)            req_obj = req_factory.toObject()            req_obj.display()            req_str = req_factory.toString()            self.sock.send(req_str)            #[2]            data = self.sock.recv(BUFSIZE)            res_obj = Str_To_Response(data)            if res_obj:                LogMsg(Debug_Mode,"Response[%s]" % (res_obj.cmd))                res_obj.display()                nResult = ResultCompareHandle(res_obj).compare()                if nResult:                    nOKCmd = nOKCmd + 1                    self.okList.append(res_obj.cmd)                else:                    nNGCmd = nNGCmd + 1                    self.ngList.append(res_obj.cmd)            print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"            time.sleep(3)            self.curCmd = self.curCmd + 1            if self.curCmd >  self.nMaxCmd:                break        LogMsg(Debug_Mode,"Client Will Exit app...")        self.displayTestResults()    def displayTestResults(self):        print "\n"        print "------------------------------------------------------------------------"        print "Total/OK/NG Case:\t%d/%d/%d" % (self.nOKCmd + self.nNGCmd,self.nOKCmd,self.nNGCmd)        ngStr = ""        for ng in self.ngList:            ngStr = "%s%s-" % (ngStr,ng)        okStr = ""        for ok in self.okList:            ngStr = "%s%s-" % (okStr,ok)        print "OK CaseList:\t%s" % (okStr)        print "------------------------------------------------------------------------"################################################################################   Create Service#   Start Service###############################################################################s_server  = TestClient(g_server_ip,g_server_port)s_server.start()


## CMIP的服务器端的模拟脚本(server.py)

import xml.etree.ElementTree as Etreeimport threadingimport socketimport timeimport os,sys###############################################################################g_server_ip = '192.168.1.103'g_server_port = 10000g_listen_max = 30g_msg_path = 'cmip'g_sep = '\\'###############################################################################encoding = 'utf-8'BUFSIZE = 1024*4gCount = 0################################################################################   Log Helper.###############################################################################Debug_Mode = 1Error_Mode =2 def log_time():    return time.strftime('%Y-%m-%d %H-%M-%S',time.localtime(time.time()))def LogMsg(mode,msg):    if mode == Debug_Mode:        flag = "Debug"    if mode == Error_Mode:        flag = "Error"    print "%s\t%s\t%s" % (log_time(),flag,msg)################################################################################   File Helper###############################################################################def readFile(fname):      with open(fname, 'r') as f:          return f.read()    def writeFile(fname,content):      with open(fname, 'w') as f:          return f.write(content)  ################################################################################   Request for Server###############################################################################################################################################################   Request for Server###############################################################################class Request:    cmdType = 0    cmdTarget = -1    timestamp = ''    cmd = -1    response = 1    parameter = ''    def __init__(self,_cmdTarget,_cmd,_response,_parameter):        self.cmdTarget = _cmdTarget        self.cmd = _cmd        self.response = _response        self.parameter = _parameter        self.timestamp = int(time.time())    def display(self):        print "#################### Request #########################"        print "cmd\t\t%s" % (self.cmd)        print "cmdTarget\t%s" % (self.cmdTarget)        print "response\t%s" % (self.response)        print "paramter\t%s" % (self.parameter)        print "######################################################"class RequestFactory:    global g_sep    def __init__(self,_cmdValue):        fname = os.path.join(os.getcwd(),"%s%s%d%sreq.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))        self.content = readFile(fname)    def toString(self):        return self.content    def toObject(self):        return Str_To_Request(self.content)class ResponseFactory:    def __init__(self,_cmdValue):        fname = os.path.join(os.getcwd(),"%s%s%s%sres.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))         self.content = readFile(fname)    def toString(self):        return self.contentdef DisNone(obj):    if obj != None:        return True    else:        return Falsedef Str_To_Request(str):    domTree = Etree.fromstring(str)    cmdType_node = domTree.find("cmdType")    cmdTarget_node = domTree.find("cmdTarget")    timestamp_node = domTree.find("timestamp")    cmd_node = domTree.find("cmd")    response_node = domTree.find("response")    parameter_node = domTree.find("parameter")    if DisNone(cmdType_node) and DisNone(cmdTarget_node) and DisNone(timestamp_node) and DisNone(response_node) and DisNone(parameter_node):        return Request(cmdTarget_node.text,cmd_node.text,response_node.text,parameter_node.text)    else:        return Noneclass Response:    cmd = 0    timestamp = ''    result = 1    content = ''    def __init__(self,_cmd,_result,_content):        self.cmd = _cmd        self.result = _result        self.content = _content        self.timestamp = int(time.time())    def display(self):        print "###################### Response ######################"        print "cmd\t\t%s" % (self.cmd)        print "result\t\t%s" % (self.result)        print "content\t\t%s" % (self.content)        print "######################################################"        def Str_To_Response(str):    domTree = Etree.fromstring(str)    cmd_node = domTree.find("cmd")    result_node = domTree.find("result")    content_node = domTree.find("content")    if DisNone(cmd_node) and DisNone(result_node) and DisNone(content_node):        return Response(cmd_node.text,result_node.text,content_node.text)    else:        return Nonedef Response_To_Str(resp):    return "<resp><cmd>%d</cmd><timestamp>%s</timestamp><result>%d</result><content>%s</content>" % \           (resp.cmd, resp.timestamp, resp.result ,resp.content)################################################################################   CMA Handler Class###############################################################################class CMAHandler(threading.Thread):    def __init__(self,client):        threading.Thread.__init__(self)        self.client = client        self.count = 0    def run(self):        while True:            data = self.client.recv(BUFSIZE)            if(data):                req_str = bytes.decode(data,encoding)                req_obj = Str_To_Request(req_str)                if req_obj:                    req_obj.display()                    cmdValue = req_obj.cmd                    resp_str = ResponseFactory(cmdValue).toString()                    self.client.send(resp_str)                else:                    LogMsg(Debug_Mode,"Client Request Format is invalid")            else:                break        LogMsg(Debug_Mode,"Client close Connection.")################################################################################   TestServer Class.#   Create Tcp Link ,Wait the Client#   if accept, create thread for it.###############################################################################class TestServer(threading.Thread):    def __init__(self, ip ,port ,listen_max):        threading.Thread.__init__(self)        self.port = port        self.ip = ip        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)        self.sock.bind((self.ip,self.port))        self.sock.listen(listen_max)    def run(self):        LogMsg(Debug_Mode,"Server Start Listen the Client...")        while True:            client,cltadd = self.sock.accept()            LogMsg(Debug_Mode,"Client XXX is connected.")            CMAHandler(client).start()################################################################################   Create Service#   Start Service###############################################################################s_server  = TestServer(g_server_ip,g_server_port,g_listen_max)s_server.start()



0 0
原创粉丝点击