"我可以很快的stub或mock那個部分,為什麼需要另外製造一個virtual service呢?"
我在stack overflow上讀到了一個對stub v.s. mock很好的比喻。假設你的小孩在玩一個玻璃盤(prod),你怕他把盤子打破所以把一個塑膠盤給他玩,這就是Mock(行為類似,但implementation較基本)。把盤子拿走然後跟他講“你如果把盤子摔在地上它就會破”,這就是Stub(直接定義行為)。
如果用這個比喻的話那virtual service就像是把盤子錄到NERvGear裡,然後連到VR裡跟那個盤子互動。Virtual service的一切反應(response code, think time, protocol等)一切都和實際的service一樣,只不過所有的反應都可以被調整,讓開發和測試團隊能反覆測試對軟體的各個變動。
以一個查股價的rest api為例,我們可以調整request parameters(選擇AAPL就給第一個回覆,選擇RY就給第二個回覆等)
以及每一個回覆的內容JSON和服務的回覆時間(think time)
我們也可以控制每一個virtual service的連線方法,例如選擇直接連到live service,如果live service沒回應的話轉到virtual service(Failover)。或是連到virtual service,如果virtual service找不到對應的回覆就連到live service(Stand In),或是錄下新的對應加到virtual service裡(Learning)。
現在市面上有個不同的service virtualization軟體,可模擬的protocol也非常的廣(rest, soap, mq, java beans, jdbc, tcp等)。建議花一點時間試試community version,絕對會對開發和測試過程有幫助。
< 上一篇 Day18 - Continuous Testing - Service Virtualization (Part 1)