Python之CMIP自动化测试脚本

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

import xml.etree.ElementTree as Etree
import threading
import socket
import time
import os,sys

###############################################################################
g_server_ip = '192.168.1.103'
g_server_port = 10000
g_listen_max = 30
g_msg_path = 'cmip'
g_sep = '\\'
###############################################################################

encoding = 'utf-8'
BUFSIZE = 1024*4
gCount = 0

###############################################################################
#   Log Helper.
###############################################################################
Debug_Mode = 1
Error_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.content

def DisNone(obj):
    if obj != None:
        return True
    else:
        return False

def 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 None
class 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 None

def 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 Etree
import threading
import socket
import time
import os,sys

###############################################################################
g_server_ip = '192.168.1.103'
g_server_port = 10000
g_listen_max = 30
g_msg_path = 'cmip'
g_sep = '\\'
###############################################################################

encoding = 'utf-8'
BUFSIZE = 1024*4
gCount = 0

###############################################################################
#   Log Helper.
###############################################################################
Debug_Mode = 1
Error_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.content

def DisNone(obj):
    if obj != None:
        return True
    else:
        return False

def 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 None
class 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 None

def 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值