(2)静态mock平台设计及搭建思路

为何作这个平台?

         归结起来搭建这个平台是个事件驱动的结果,由于工做中须要与外部系统交互,这句话说来简单,实际上是一件很痛苦的事情,沟通须要花费大量的时间,还不必定能顺利作好,那么咱们有什么方法来模拟外部系统呢?思考多日并参考网上资料发现用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')

好了,其余就没啥好说的了,由于公司有严格的保密政策,因此这个平台不会开源。

相关文章
相关标签/搜索