<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    減少聯(lián)調(diào)、高效集成,試試這個工具

    共 2544字,需瀏覽 6分鐘

     ·

    2021-12-24 16:55

    這里是Z哥的個人公眾號

    每周五11:45 按時送達

    當然了,也會時不時加個餐~

    我的第「217」篇原創(chuàng)敬上



    大家好,我是Z哥。


    最近在工作中學習到一個我覺得很有價值的小工具,在這里與大家分享一下。


    這個小工具需要自己稍作開發(fā),并不存在什么第三方的現(xiàn)成工具供你使用,因為這個工具的核心關鍵是「數(shù)據(jù)」,而「數(shù)據(jù)」這個東西對于不同的項目天然是不同的。


    可能有的小伙伴已經(jīng)猜到了,我今天要聊的就是一個mock工具(暫且叫這個名字吧,它的能力其實不僅僅只是mock數(shù)據(jù))。



    多團隊協(xié)作中,很多功能的實現(xiàn)需要依賴于其它的子系統(tǒng)。這不但影響開發(fā)進度,還會導致測試工作開展不太順利。這個問題在涉及多團隊協(xié)作的分布式系統(tǒng)中尤其突出。


    如果每個子系統(tǒng)都能夠內(nèi)置一個mock工具(模塊),通過數(shù)據(jù)的自動生成,導入和導出,可以靈活地在不同環(huán)境上快速地讓系統(tǒng)run起來,哪怕自己還沒有真正地完成內(nèi)部的業(yè)務邏輯代碼編寫。


    可能你會覺得說,現(xiàn)在很多工具都支持根據(jù)定義的API自動生成mock數(shù)據(jù)啊,postman、apifox、yapi等等,為啥還要自己搞呢。


    最大的價值在于以下幾點:


    1. 這種方式支持在不同環(huán)境提供一份相同的數(shù)據(jù)(如唯一id等等),便于對相關的上下游系統(tǒng)屏蔽掉環(huán)境不同的影響。而使用上面提到的工具很難實現(xiàn)這點。

    2. 導入和導出功能可以作為在沒有打通上下游系統(tǒng)之前的手動關聯(lián)上下游系統(tǒng)的一種方式。

    3. 自動生成的數(shù)據(jù)可以針對多個API進行共享使用,以模擬“上下文”的感覺,讓mock這件事變得更加貼近真實,而不是很假,不管輸入的參數(shù)是什么,都只能固定返回某個數(shù)據(jù)。

    4. 基于上面第3點,我們可以再通過某種語法,串聯(lián)起多個API的調(diào)用,快速驗證mock出來的數(shù)據(jù)是否符合預期。并且這個串聯(lián)調(diào)用的case可以保存下來,在真實的業(yè)務邏輯實現(xiàn)后再運行一下,快速驗證自己的真實實現(xiàn)是不是存在什么bug。相當于同時編寫了一個針對該項目定制的自動化測試工具。

    5. 基于上面第4點,可以不斷地豐富case,以提高case所覆蓋的場景。這不但豐富了數(shù)據(jù)樣本,也提高了使用該工具進行自動化測試的效果。



    總體來看,這樣一個工具我們在實現(xiàn)的時候需要具備以下這些能力。


    • 自動生成mock數(shù)據(jù)

    • 清除數(shù)據(jù)

    • 導入數(shù)據(jù)

    • 導出數(shù)據(jù)

    • mock開關

    • mock數(shù)據(jù)的條件匹配

    • mock外部依賴數(shù)據(jù)


    下面我們一個個展開說說。



    /01??自動生成mock數(shù)據(jù)/


    自動生成mock數(shù)據(jù)是這個工具的最核心功能。但在這之前還有一件更加重要的事情要做,就是:需要提前確定對外提供的 API 契約,如此才能得到相應的輸入和輸出參數(shù)。然后我們再考慮如何生成mock數(shù)據(jù)的事情。


    當然,生成的數(shù)據(jù)必須要符合契約定義中的標準。比如,

    • 字段的格式。int32還是int64?字符串的格式等等。

    • 入?yún)⒑统鰠⒌南嚓P性,比如輸入?yún)?shù)中傳入的單據(jù)號,應該與輸出參數(shù)中的單據(jù)號保持一致,以體現(xiàn)輸入和輸出之間的相關性。

    • ……


    其次,生成的mock數(shù)據(jù),需要盡可能地覆蓋更多的場景。


    另外,生成的mock數(shù)據(jù)中如果存在一些依賴于外部系統(tǒng)的唯一ID,允許傳入一個ID生成器的hook,確保生成的Mock數(shù)據(jù)中的唯一ID在指定范圍內(nèi)。


    然后,生成的mock數(shù)據(jù)需要持久化到硬盤上,以提供長期使用。


    最后,可以指定生成某個API相關的mock數(shù)據(jù),而非全部數(shù)據(jù)。



    /02??清除數(shù)據(jù)/


    可以通過清除數(shù)據(jù),重置mock數(shù)據(jù)回到初始狀態(tài),以清理不符合當前API標準的垃圾數(shù)據(jù)。實現(xiàn)這個功能主要有兩個點:


    1. 清除數(shù)據(jù)時需要考慮數(shù)據(jù)間的關聯(lián)關系,比如清除單據(jù)類數(shù)據(jù)時,也應當清除與該單據(jù)相關的明細數(shù)據(jù)。


    2. 可以指定清除某個指定API的mock數(shù)據(jù),而非全部數(shù)據(jù)。



    /03? 導入數(shù)據(jù)/


    通過配合導入mock數(shù)據(jù)功能,快速復制出一個完全相同的mock環(huán)境。實現(xiàn)這點也有兩個點:


    1. 可以導出指定API的mock數(shù)據(jù),而非全部數(shù)據(jù)。?


    2. 導出的數(shù)據(jù)建議為csv或者excel格式,便于二次編輯。



    /04? 導出數(shù)據(jù)/


    通過配合導出mock數(shù)據(jù)功能,快速復制出一個完全相同的mock環(huán)境。


    導入數(shù)據(jù)時,需要進行數(shù)據(jù)合法性驗證。如果數(shù)據(jù)不合法,需要進行處理,有兩種情況:


    • 缺失的數(shù)據(jù),如果可以自動填充缺省值,則自動修正。


    • 非法數(shù)據(jù)或者無法自動填充的缺失數(shù)據(jù),進行相應的提示。



    /05??mock開關/


    通過控制開關,靈活切換使用真實業(yè)務存儲中的數(shù)據(jù)還是使用Mock存儲中的數(shù)據(jù)。



    /06??mock數(shù)據(jù)的條件匹配/


    可以對mock數(shù)據(jù)的返回內(nèi)容進行「條件匹配」配置,以滿足兩種能力:

    1. 限定返回的數(shù)據(jù)范圍。

    2. 實現(xiàn)返回的出參一定與入?yún)⒋嬖谙嚓P性。



    /07? mock外部依賴數(shù)據(jù)/


    可以將以上能力運用在所依賴的外部數(shù)據(jù)上,以提供系統(tǒng)「無依賴獨立運行」的能力。


    具備這個能力后,你所負責系統(tǒng)的測試工作可以不用等待所依賴的外部系統(tǒng)全部都準備就緒后才能開展,可以獨立進行。



    好了,就這么多??赡苡械男』锇闀X得,要實現(xiàn)這么多能力,得多大工作量啊。


    我覺得這個問題不能這么考慮,我們還要考慮這個工具可以節(jié)省多少時間。節(jié)約的這個時間不僅僅是你自己做自測的時間,還有團隊中其他人的時間。而且這個工具可以長期反復使用,時間拉得越長,它所發(fā)揮的價值也越大。



    慣例總結(jié)一下。


    這篇呢,Z哥和你分享了一個我認為很有價值的工具,一個需要我們自行開發(fā)的mock工具,它可以提升整個團隊的長期效能。


    這個工具需要實現(xiàn)以下7個能力:

    1. 自動生成mock數(shù)據(jù)

    2. 清除數(shù)據(jù)

    3. 導入數(shù)據(jù)

    4. 導出數(shù)據(jù)

    5. mock開關

    6. mock數(shù)據(jù)的條件匹配

    7. mock外部依賴數(shù)據(jù)


    我相信,一旦你提供了這個工具,在團隊中你將擁有很好的人緣和口碑~


    不知道你是如何看待類似的mock工具的?歡迎和大家一起聊聊你的看法~



    推薦閱讀:


    原創(chuàng)不易,如果你覺得這篇文章還不錯,就「點贊」或者「在看」一下吧,鼓勵我的創(chuàng)作 :)


    也可以分享我的公眾號名片給有需要的朋友們。

    如果你有關于軟件架構(gòu)、分布式系統(tǒng)、產(chǎn)品、運營的困惑

    可以試試點擊「閱讀原文

    瀏覽 49
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    91丨豆花丨成人熟女 熟女 | 狂插猛操 | 欧美性爱XXXX | 久久69 | 看看操逼电影 |