歸結起來搭建這個平臺是個事件驅動的結果,由於工做中須要與外部系統交互,這句話說來簡單,實際上是一件很痛苦的事情,溝通須要花費大量的時間,還不必定能順利作好,那麼咱們有什麼方法來模擬外部系統呢?思考多日並參考網上資料發現用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')
好了,其餘就沒啥好說的了,由於公司有嚴格的保密政策,因此這個平臺不會開源。