(2)靜態mock平台設計及搭建思路


為什么做這個平台?

         歸結起來搭建這個平台是個事件驅動的結果,因為工作中需要與外部系統交互,這句話說來簡單,其實是一件很痛苦的事情,溝通需要花費大量的時間,還不一定能順利做好,那么我們有什么方法來模擬外部系統呢?思考多日並參考網上資料發現用mock思想可以順利的做好這件事兒。

 

平台設計思路

         舉個簡單的例子,市面上有眾多的優秀的開源的mock框架可以使用,但是以MockServer框架舉例,這玩意兒需要寫代碼,寫判斷,寫邏輯,這些對於沒有代碼基礎的測試工程師來說簡直就是一個噩夢,那么我們能不能設計一個操作簡單的無需寫代碼的mock平台來陽光普照呢,我想試試…那么我們就必須要知道mockServer的實現原理,經過查資料呢,簡單的來說如下如:

 

 

我們只需要把server端的api地址修改到我們Mock平台的地址並定制響應內容即可。

         思路有了,那么我們該如何設計平台呢,我首先考慮到了WEB化,標准化輸入,API數據存儲,用URL分發的方式來做一個實現熱加載的Mock平台。

         思路有了,技術選型吧,這個純屬裝逼了…我只會Python啊,那么就來Django吧,與我的測試平台融合。

 

細節方面

         Web配置接口設計流程如下圖:

 

不太會畫圖,隨便畫的…

         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')

好了,其他就沒啥好說的了,因為公司有嚴格的保密政策,所以這個平台不會開源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM