减少联调、高效集成,试试这个工具
大家好,我是Z哥。
最近在工作中學習到一個我覺得很有價值的小工具,在這里與大家分享一下。
這個小工具需要自己稍作開發,并不存在什么第三方的現成工具供你使用,因為這個工具的核心關鍵是「數據」,而「數據」這個東西對于不同的項目天然是不同的。
可能有的小伙伴已經猜到了,我今天要聊的就是一個mock工具(暫且叫這個名字吧,它的能力其實不僅僅只是mock數據)。
多團隊協作中,很多功能的實現需要依賴于其它的子系統。這不但影響開發進度,還會導致測試工作開展不太順利。這個問題在涉及多團隊協作的分布式系統中尤其突出。
如果每個子系統都能夠內置一個mock工具(模塊),通過數據的自動生成,導入和導出,可以靈活地在不同環境上快速地讓系統run起來,哪怕自己還沒有真正地完成內部的業務邏輯代碼編寫。
可能你會覺得說,現在很多工具都支持根據定義的API自動生成mock數據啊,postman、apifox、yapi等等,為啥還要自己搞呢。
最大的價值在于以下幾點:
這種方式支持在不同環境提供一份相同的數據(如唯一id等等),便于對相關的上下游系統屏蔽掉環境不同的影響。而使用上面提到的工具很難實現這點。
導入和導出功能可以作為在沒有打通上下游系統之前的手動關聯上下游系統的一種方式。
自動生成的數據可以針對多個API進行共享使用,以模擬“上下文”的感覺,讓mock這件事變得更加貼近真實,而不是很假,不管輸入的參數是什么,都只能固定返回某個數據。
基于上面第3點,我們可以再通過某種語法,串聯起多個API的調用,快速驗證mock出來的數據是否符合預期。并且這個串聯調用的case可以保存下來,在真實的業務邏輯實現后再運行一下,快速驗證自己的真實實現是不是存在什么bug。相當于同時編寫了一個針對該項目定制的自動化測試工具。
基于上面第4點,可以不斷地豐富case,以提高case所覆蓋的場景。這不但豐富了數據樣本,也提高了使用該工具進行自動化測試的效果。
總體來看,這樣一個工具我們在實現的時候需要具備以下這些能力。
自動生成mock數據
清除數據
導入數據
導出數據
mock開關
mock數據的條件匹配
mock外部依賴數據
下面我們一個個展開說說。
/01??自動生成mock數據/
自動生成mock數據是這個工具的最核心功能。但在這之前還有一件更加重要的事情要做,就是:需要提前確定對外提供的 API 契約,如此才能得到相應的輸入和輸出參數。然后我們再考慮如何生成mock數據的事情。
當然,生成的數據必須要符合契約定義中的標準。比如,
字段的格式。int32還是int64?字符串的格式等等。
入參和出參的相關性,比如輸入參數中傳入的單據號,應該與輸出參數中的單據號保持一致,以體現輸入和輸出之間的相關性。
……
其次,生成的mock數據,需要盡可能地覆蓋更多的場景。
另外,生成的mock數據中如果存在一些依賴于外部系統的唯一ID,允許傳入一個ID生成器的hook,確保生成的Mock數據中的唯一ID在指定范圍內。
然后,生成的mock數據需要持久化到硬盤上,以提供長期使用。
最后,可以指定生成某個API相關的mock數據,而非全部數據。
/02??清除數據/
可以通過清除數據,重置mock數據回到初始狀態,以清理不符合當前API標準的垃圾數據。實現這個功能主要有兩個點:
清除數據時需要考慮數據間的關聯關系,比如清除單據類數據時,也應當清除與該單據相關的明細數據。
可以指定清除某個指定API的mock數據,而非全部數據。
/03? 導入數據/
通過配合導入mock數據功能,快速復制出一個完全相同的mock環境。實現這點也有兩個點:
可以導出指定API的mock數據,而非全部數據。?
導出的數據建議為csv或者excel格式,便于二次編輯。
/04? 導出數據/
通過配合導出mock數據功能,快速復制出一個完全相同的mock環境。
導入數據時,需要進行數據合法性驗證。如果數據不合法,需要進行處理,有兩種情況:
缺失的數據,如果可以自動填充缺省值,則自動修正。
非法數據或者無法自動填充的缺失數據,進行相應的提示。
/05??mock開關/
通過控制開關,靈活切換使用真實業務存儲中的數據還是使用Mock存儲中的數據。
/06??mock數據的條件匹配/
可以對mock數據的返回內容進行「條件匹配」配置,以滿足兩種能力:
1. 限定返回的數據范圍。
2. 實現返回的出參一定與入參存在相關性。
/07? mock外部依賴數據/
可以將以上能力運用在所依賴的外部數據上,以提供系統「無依賴獨立運行」的能力。
具備這個能力后,你所負責系統的測試工作可以不用等待所依賴的外部系統全部都準備就緒后才能開展,可以獨立進行。
好了,就這么多。可能有的小伙伴會覺得,要實現這么多能力,得多大工作量啊。
我覺得這個問題不能這么考慮,我們還要考慮這個工具可以節省多少時間。節約的這個時間不僅僅是你自己做自測的時間,還有團隊中其他人的時間。而且這個工具可以長期反復使用,時間拉得越長,它所發揮的價值也越大。
慣例總結一下。
這篇呢,Z哥和你分享了一個我認為很有價值的工具,一個需要我們自行開發的mock工具,它可以提升整個團隊的長期效能。
這個工具需要實現以下7個能力:
自動生成mock數據
清除數據
導入數據
導出數據
mock開關
mock數據的條件匹配
mock外部依賴數據
我相信,一旦你提供了這個工具,在團隊中你將擁有很好的人緣和口碑~
不知道你是如何看待類似的mock工具的?歡迎和大家一起聊聊你的看法~
推薦閱讀:
程序員必備,《新老系統切換寶典》
golang使用3周總結
原創不易,如果你覺得這篇文章還不錯,就「點贊」或者「在看」一下吧,鼓勵我的創作 :)
也可以分享我的公眾號名片給有需要的朋友們。
如果你有關于軟件架構、分布式系統、產品、運營的困惑
可以試試點擊「閱讀原文」
總結
以上是生活随笔為你收集整理的减少联调、高效集成,试试这个工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net webapi bug :
- 下一篇: .NET 云原生架构师训练营(系统架构)