sweli 发表于 2018-8-3 12:14:35

利用python构建Mock系统

#!/usr/bin/python  
# encoding: utf-8
  
'''
  
com.test.mockvsearch -- shortdesc
  
com.test.mockvsearch is a description

  
It defines>  
@author:   user_name
  

  
@copyright:2013 organization_name. All rights reserved.
  

  
@license:    license
  
@contact:    user_email
  
@deffield    updated: Updated
  
'''
  
import sys
  
import struct
  
import string
  
import types
  
from xml.dom import minidom
  
from SocketServer import (TCPServer as SERV,StreamRequestHandler as SRH)
  
# 定义获取协议头内容的方法
  
def gethead(a,b):
  
nodes=a.getElementsByTagName(b).item(0);
  
head=[];
  
for value in nodes.childNodes:
  
if value.nodeName=='version':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='command':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='passwd':
  
head.append(str(value.firstChild.nodeValue))
  
elif value.nodeName=='type':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='status':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='command':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='src':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='dest':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='serializationHigh':
  
head.append(string.atol(value.firstChild.nodeValue))
  
elif value.nodeName=='serializationLow':
  
head.append(string.atol(value.firstChild.nodeValue))
  
elif value.nodeName=='body_length':
  
head.append(string.atoi(value.firstChild.nodeValue))
  
elif value.nodeName=='result_length':
  
head.append(string.atoi(value.firstChild.nodeValue))
  

  
return head;
  
#定义获取协议体内容的方法
  
def getbody(element,bodyname):
  
body=[];
  
nodes=element.getElementsByTagName(bodyname);
  
for i inrange(nodes.length):
  
for node in nodes.item(i).childNodes:
  
if node.nodeName=='iids':
  
body.append(string.atol(node.firstChild.nodeValue));
  
if node.nodeName=='gids':
  
body.append(string.atol(node.firstChild.nodeValue));
  
if node.nodeName=='similaritys':
  
body.append(string.atoi(node.firstChild.nodeValue));
  
if node.nodeName=='image_type':
  
body.append(string.atoi(node.firstChild.nodeValue));
  
if node.nodeName=='dimensions':
  
body.append(string.atoi(node.firstChild.nodeValue));
  
return body;
  
#定义消息格式的方法
  
def getbodyformat(list):
  
format='';
  
for var in list:
  
if type(var) is types.IntType:
  
format+='i';
  
if type(var) is types.LongType:
  
format+='Q';
  
return format;
  
doc = minidom.parse(sys.argv);
  
root= doc.documentElement;
  
#消息头格式
  
headformat="!2i8s4i2q2i"
  
#消息头内容
  
body1=gethead(root,'head');
  
#消息体内容
  
body2=getbody(root, 'result');
  
#消息体格式化
  
bodyformat=getbodyformat(body2);
  
#整个消息的格式化信息
  
rformat=headformat+bodyformat;
  
#整个响应消息的内容
  
response=body1+body2;
  
HOST='localhost'
  
PORT=8888;
  
ADDR=(HOST,PORT);
  
#定义请求响应处理类
  
class MyHandler(SRH):
  
def handle(self):
  
#接收请求
  
MyData = self.request.recv(2048000);
  
#打印请求长度
  
print 'result length is:', len(MyData);
  
#打印请求内容和转换格式
  
print response,rformat;
  
#拼装响应内容
  
senddata=struct.pack(rformat,*response);
  
#发送响应内容
  
self.request.send(senddata);
  
#创建Socket服务
  
myServer=SERV(ADDR,MyHandler);
  
#进入循环状态
  
myServer.serve_forever();
页: [1]
查看完整版本: 利用python构建Mock系统