归结起来搭建这个平台是个事件驱动的结果,由于工做中须要与外部系统交互,这句话说来简单,实际上是一件很痛苦的事情,沟通须要花费大量的时间,还不必定能顺利作好,那么咱们有什么方法来模拟外部系统呢?思考多日并参考网上资料发现用mock思想能够顺利的作好这件事儿。mysql
举个简单的例子,市面上有众多的优秀的开源的mock框架可使用,可是以MockServer框架举例,这玩意儿须要写代码,写判断,写逻辑,这些对于没有代码基础的测试工程师来讲简直就是一个噩梦,那么咱们能不能设计一个操做简单的无需写代码的mock平台来阳光普照呢,我想试试…那么咱们就必需要知道mockServer的实现原理,通过查资料呢,简单的来讲以下如:web
咱们只须要把server端的api地址修改到咱们Mock平台的地址并定制响应内容便可。正则表达式
思路有了,那么咱们该如何设计平台呢,我首先考虑到了WEB化,标准化输入,API数据存储,用URL分发的方式来作一个实现热加载的Mock平台。sql
思路有了,技术选型吧,这个纯属装逼了…我只会Python啊,那么就来Django吧,与个人测试平台融合。json
Web配置接口设计流程以下图:api
不太会画图,随便画的…app
Django处理请求流程图以下图:框架
大体是这么个结构。函数
下面上代码吧,第一点URL过滤,我才用了正则表达式的方式,这种方式很差,由于是个web平台,因此暂时没想到办法区分request的URL到低是请求页面的仍是请求配置的接口,这是个明显的缺陷,我晓得可是我目前没想到解决方案。测试
下面是index函数:
1 @csrf_exempt 2 def index(request): 3 # 处理URL 4 url = request.get_full_path() 5 keys = url.split(conf['mysql']['HOST'])[-1][1:] 6 # 去除找不到API的异常 7 try: 8 obj = Api.objects.get(ApiName=keys) 9 except: 10 content = '没有找到API【%s】请检查一下!!' % (keys) 11 return HttpResponse(content=content) 12 method = obj.ErrorStatus 13 if method == 'GET': 14 ResponseType = obj.CorrectStatus 15 elif method == 'POST': 16 # 获取当前API的参数,并以优先级为序list排列 17 listKey = execDict.getKeylist(obj.CorrectHeader) 18 data = request.body 19 # 获取请求的参数和value 用以肯定响应 20 key = '' 21 value = '' 22 for i in listKey: 23 for k, v in eval(data).items(): 24 if k == i: 25 key = k 26 value = v 27 # 判断是否获取了相关值 28 if key and value: # 正常获取 29 msg = execDict.getTypeResponse(obj.RequesJson, key, value) 30 if msg: 31 ResponseType = msg[0] 32 content = msg[-1] 33 else: 34 content = '没有找到key:【%s】对应值【%s】的挡板信息!!' % (key, value) 35 return HttpResponse(content=content) 36 else: # 异常获取 返回异常 37 content = '没有找到key:【%s】对应值【%s】的挡板信息!!' % (key, value) 38 return HttpResponse(content=content) 39 40 if method == 'GET': 41 if obj != '': 42 content = obj.CorrectResponse 43 if ResponseType == 'json': 44 return HttpResponse(content=content, content_type="application/json") 45 elif ResponseType == 'xml': 46 return HttpResponse(content=content, content_type="text/xml") 47 else: 48 content = '没有找到API【%s】请检查一下!!' % (keys) 49 return HttpResponse(content=content) 50 else: 51 return HttpResponse(content='没有找到API【%s】请检查一下!!' % (keys), status='200') 52 elif method == 'POST': 53 if obj != '': 54 if ResponseType == 'json': 55 return HttpResponse(content=content, content_type="application/json") 56 elif ResponseType == 'xml': 57 return HttpResponse(content=content, content_type="text/xml") 58 else: 59 content = '没有找到API【%s】请检查一下!!' % (keys) 60 return HttpResponse(content=content) 61 else: 62 return HttpResponse(content='没有找到API【%s】请检查一下!!' % (keys), status='200') 63 64 else: 65 return HttpResponse(content='暂不支持【%s】的请求方式!!' % (method), status='200')
好了,其余就没啥好说的了,由于公司有严格的保密政策,因此这个平台不会开源。