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

好了,其餘就沒啥好說的了,由於公司有嚴格的保密政策,因此這個平臺不會開源。

相關文章
相關標籤/搜索