軟體開發人員和測試人員每天面臨的主要挑戰之一源於無法獲得真實的資料。作為開發人員,很多時候,你是在與下游服務互動,你必須使用該環境中的任何資料,因為為你的場景獲取實際可用資料的過程非常耗時。你經常找不到你需要的資料,必須從生產中獲取,這就帶來了一系列新的挑戰。
更複雜的是,個人資料不能從生產中使用,因為這增加了組織被盜、丟失或暴露的風險。以最近雅虎的違規事件為例,有5億個電子郵件賬戶被入侵,或者最近
的約680
億使用者的資料被洩露。這些違規事件發生在安全性較高的生產層面。開發領域使用的生產資料並不罕見,安全性往往較低。以這種方式操作會給組織的品牌聲譽帶來巨大風險。因此,必須對敏感資料進行擦洗或遮蔽,這是乙個耗時的過程,需要資料專業知識。
無論怎樣,資料都是乙個成本問題,因為它拖累了你的速度。通過使用服務虛擬化,你不僅可以控制依賴應用程式的行為和功能,以達到穩定測試環境的目的,而且你可以完全控制這些依賴的資料來源,並提供你當天工作所需的任何資料。此時,規則發生了變化,因為你現在不僅控制了資料,還控制了邏輯。你可以建立按照你希望的方式行事的服務,而不是嚴格遵守它們的正常行為模式。
在之前的一篇文章中,我討論了缺陷虛擬化,它有相同的基本原則。但之前我們討論的是服務邏輯。這篇文章將進行下一步,並討論資料控制。在我們開始的時候,讓我們關注一下當前測試人員和開發人員每天都要面對的資料挑戰。
在應用程式開發初期,由於服務的全部功能尚未實現,因此測試所需的資料通常比較簡單。隨著開發的不斷增加功能,測試的成熟度也會增加,資料的複雜度也會增加。
舉個例子,我們用我之前文章中的例子——假設我是一家航空公司,正在開發機票頁面的功能。我需要驗證使用者是否能買到機票,根據航班在未來多遠的時間,使用者會得到幾個響應中的乙個,隨著時間的臨近,這些響應會發生變化。在開發之初,我可以簡單的生成一堆複雜的資料,其中有未來3個月的航班,這樣我就可以做我目前需要的所有測試。但當然問題是,我只是點燃了一顆定時炸彈的引線。
3個月後,這些美麗的資料就會過期,而我有可能已經忘記了它。突然間,我所有的測試都會開始失敗,而時間恰恰不對,因為即將發布,我根本沒有時間重新生成資料
......
聽起來很熟悉?
通過在開發過程的早期引入服務虛擬化,你可以為提供這些資料挑戰的解決方案打下基礎。乙個虛擬服務的資料可以來自許多地方,但在一開始,簡單的虛擬服務從固定資料開始。你建立這些「固定資產」或mock來解決
what-if
場景測試階段的問題,並使事情非常簡單。這裡的想法是,「我只需要乙個服務,它將用這個特定的有效載荷進行響應」。
隨著虛擬服務的成熟,有必要將資料和服務分開,這樣如果你想在模擬中新增邏輯,你實際上不必開啟虛擬服務來運算元據。事實上,成熟的使用者建立虛擬服務的方式是讓資料來源處理大部分的邏輯。然後,他們可以將資料來源交給測試人員或測試資料管理團隊來插入這個服務未來可能需要的任何資料。向服務新增新功能就像向資料來源新增一行一樣簡單。這使得虛擬化的工作可以共享,乙個虛擬服務可以容納多個團隊。虛擬服務成為活的有機體,可以根據需要成長和改變。
一旦開發建立了最初的簡單服務,就到了測試團隊接手的時候了。測試團隊會有更複雜的資料需求。這些資料從**來?通常情況下,你從記錄和回放中獲得這些資料。這通常是建立虛擬服務時的第一步。你記錄了應用程式和依賴的後端系統之間的事務,並使用這個記錄來建立你的虛擬服務。這允許你建立乙個非常可用的基線資料來源,可以在任何需要的時候進行擴充套件。在我的航空公司的例子中,這將允許我們獲得現實的航班數量和目的地。資料將擁有所有必要的複雜性,包括多航段和國際航班。資料來源的相關性處理了所有複雜的請求/響應關係,由於對「真實」資料的後續變化可以簡單地重新記錄並合併到現有的虛擬服務中,因此獲取新的資料變得微不足道。
我們記錄的資料並不是來自於生產,這可以保護我們在低階環境中不被資料洩露。這些資料面臨的挑戰是,由於它不是來自生產,所以它不那麼完整或最新。這時,資料的生成和操作就成為服務虛擬化的乙個強大功能。
不存在的資料可以用簡單的生成資料來補充,來完成我們所需要的資料。在我的航空公司的例子中,回覆中的航班日期可以一直是今天的日期,偏移3個月。通過使用資料生成,這個任務變得微不足道。
我們可以通過提供動態資料來管理任何「非定義的」請求/響應關係,繼續按摩和運算元據。這些是靜態資料集中永遠不可能存在的關係型別。在航空公司的例子中,假設當向下游元件發出請求時,它提供了使用者的當前位置,這將在響應中作為出發地使用。由於我們的測試用例會不斷變化,所以乙個真實的服務必須維護所有的當前位置,這樣才能在響應中提供這些位置。通過使用虛擬服務,你不需要維護所有的位置,你可以簡單地動態返回使用者的當前位置作為出發城市。
最後,使用負資料可以靜態提供,也可以插入到資料來源中,以方便負資料或異常測試。例如,在我的航空公司例子中,這將是插入乙個隨機取消或延遲的航班,以驗證使用者在出發去機場之前得到通知。
服務虛擬化測試
forrester 服務虛擬化測試是乙個新興市場,旨在消除應用開發人員和測試人員在當今交付活動中遇到的諸多開發和測試限制。列舉一些這個市場上的產品供參考 calisa 2011年ca斥資3.3億美金全現金收購的it服務模擬解決方案提供商interativetko公司 itko hpservice v...
自動化測試中,測試資料如何管理?
今晚在某個測試群,看到有人問了乙個問題 把測試資料放配置檔案讀取和放檔案通過函式呼叫讀取有什麼區別?當時我下意識的這麼回答 資料量越大,配置檔案越臃腫,放在專門的資料檔案 比如excel,csv 方便針對性的維護。乍看沒毛病,但回頭和人討論這個問題的時候,就認真思考了一下這個問題,下面是我的一些思考...
如何理解自動化測試資料驅動與關鍵字驅動的區別
一 關鍵字驅動kdt keyword driven testing 1 自動化測試框架發展的第三個階段是關鍵字驅動測試框架階段,它是當前比較流行的一種框架之一,並且現在的自動化測試工具已經將關鍵字驅動框架融入到工具中。在錄製過程中自動化測試工具會將物件及操作屬性儲存到物件庫中。2 關鍵字驅動測試是資...