服務虛擬化如何改進應用程序測試
譯文【51CTO.com快譯】如果您正在開發(fā)連接到多個微服務、軟件即服務 (SaaS) API、遺留系統(tǒng)和其他第三方服務的應用程序,那么創(chuàng)建一個強大的測試環(huán)境可能會很棘手。例如,假設正在驗證的一個 API 是團隊開發(fā)的微服務。在這種情況下,可能擁有 DevOps 功能,包括持續(xù)集成和持續(xù)交付 (CI/CD)、基礎設施即代碼以及創(chuàng)建測試數據集的工具,以便為該服務啟用測試環(huán)境。然而,即使有了這些功能,當團隊開發(fā)許多云原生應用程序和微服務時,啟動多個測試服務的成本也會變得很高。
如果是第三方 API、SaaS 或數據流,則可能需要依賴該服務的測試基礎設施和功能。盡管這些測試環(huán)境應該支持生產系統(tǒng)的功能,但它們可能沒有完整的數據集,并且將它們置于負載下以支持性能測試可能會違反服務條款或者造成費用高昂。
服務和 API 虛擬化平臺旨在通過創(chuàng)建和模擬 API 和服務端點來解決這些復雜性。服務虛擬化平臺不再是旋轉測試環(huán)境,而是充當測試下游應用程序和組合服務的端點,并響應連接應用程序或服務的請求和事務。
如果只使用少數幾個 API,那么API模擬可能是模擬端點的一個足夠好的實踐,并且像 Mockito、JMock 或 WireMock 等工具都是 Java 選項。但是一旦有了許多開發(fā)團隊、不斷增長的api或復雜的測試數據集,就需要一種更具可伸縮性的方法,比如服務虛擬化。此外,如果正在測試處理信用卡、連接到賬單支付服務或執(zhí)行其他復雜交易的應用程序,那么服務虛擬化平臺可以針對更廣泛的用戶體驗和錯誤場景進行驗證。
我與金融服務領域的云工程師 Anna Ramadoss 討論過如何使用服務虛擬化平臺的問題。她說:“服務虛擬化,一旦成為團隊的主流,就縮小了主系統(tǒng)和從屬系統(tǒng)之間的界限。更新是即時的,交付時間變得更快。其結果是一個精心設計的系統(tǒng),可以更快地更新市場。它還可以減少基礎設施需求和成本。”
服務虛擬化如何實現(xiàn)左移測試
許多組織都希望將他們的測試工作轉移到更快地識別和解決問題的方向。但是當測試環(huán)境不可用于依賴服務時會發(fā)生什么呢?
開發(fā)人員很自然地避開阻礙其工程工作的障礙。在開發(fā)應用程序時,開發(fā)人員是應該等待 API 的測試基礎設施和功能,還是更有可能將這種測試推遲到開發(fā)過程的后期?更麻煩的是,開發(fā)人員是否會對 API 的行為做出假設,然后被迫在開發(fā)過程的后期解決缺陷,或者是,在生產中發(fā)現(xiàn)缺陷的時候呢?
建立一個服務虛擬化平臺并要求將服務虛擬化作為一個開發(fā)標準有很多好處,特別是對于需要針對許多 API 進行廣泛測試能力的團隊而言。以下是使用服務虛擬化平臺幫助左移測試的幾個優(yōu)點:
• 服務虛擬化是開發(fā)單元測試和為微服務進行持續(xù)測試的自然延伸。作為開發(fā)過程的一部分,開發(fā)人員或質量保證工程師應該在服務虛擬化平臺中配置模擬API響應的端點。所有開發(fā)人員在構建下游應用程序和服務時都可以使用這些端點。
• 服務虛擬化層通過公開所有支持版本的端點,來簡化針對一個 API 的多版本測試。在對新的API版本進行測試時,開發(fā)人員可以創(chuàng)建測試來比較最新版本和舊版本的響應。這種 A/B 測試對于驗證機器學習模型和預測分析新版本的下游影響特別有用。
• 服務虛擬化可以與測試數據集捆綁在一起,并用于驗證事務。一旦開發(fā)人員完成了一個測試場景,他們就可以將端點刷新回原始測試數據集,并根據需要重復測試。
• 在云上運行時,服務虛擬化平臺可以根據測試量增加和減少容量。因此,基礎設施可以擴展以處理許多同時運行測試或更健壯的性能測試的開發(fā)人員。
通過解決一個常見的測試基礎架構挑戰(zhàn),團隊可以使用服務虛擬化平臺的功能在開發(fā)過程的早期建立新的測試場景。
平臺提供商建議其他用例。例如,SmartBear 建議開發(fā)團隊使用服務虛擬化來增強安全測試,根據消息類型自動化不同的測試場景,并支持迭代設計。Parasoft 建議使用服務虛擬化來測試格式錯誤的數據響應、模擬高延遲,或驗證對更大負載的響應。Broadcom Service Virtualization(正式名稱為 CA DevTest)建議開發(fā)團隊將測試鏈接到多步驟事務中,并持續(xù)驗證業(yè)務工作流。
Ramadoss 建議開發(fā)團隊確定他們的測試要求,以查看 API 虛擬化是否足夠,或者是否需要更通用的服務驗證。例如,她說,“服務虛擬化擴展到基于 TCP 的協(xié)議,以支持來自 TransUnion、Equifax 和 Experian 等信貸機構的服務。” 可能需要的其他協(xié)議包括數據庫 (JDBC)、中間件(JMS、Rabbit MQ 等)和大型機協(xié)議(CICS 等)。
我與 Broadcom 的 DevOps 首席技術官 Shamim Ahmed 討論了 DevOps 組織如何在虛擬服務環(huán)境中使用服務虛擬化。他說:“隨著越來越多的組織為他們的軟件系統(tǒng)發(fā)展到組件架構,我們看到采用微服務進行開發(fā)和容器化進行部署的趨勢越來越大。為了支持這一趨勢,虛擬服務可以打包并部署在容器中,按需實例化,并在不再需要時停用。”
服務虛擬化的工作原理
平臺具有不同的能力來創(chuàng)建服務端點,以下是常見的方法:
• 以Web服務描述語言(WSDL)、Web應用程序描述語言(WADL)或OpenAPI規(guī)范(OAS)鏈接或上載API的定義
• 使用瀏覽器插件或web服務器代理記錄事務
• 手動創(chuàng)建服務定義,對于下游開發(fā)人員想要在 API 準備好之前進行測試時很有用
創(chuàng)建端點后,平臺通常支持連接到測試數據源、上傳測試數據或自動生成測試數據。在驗證表單或文檔上傳以及處理復雜事務時,生成測試數據非常有用。這也是創(chuàng)建關于個人身份信息 (PII)(例如姓名、社會安全號碼或信用卡號碼)的模擬數據集的比較安全的方法。
一旦有了服務端點,服務虛擬化平臺就會提供開發(fā)工具包、IDE 插件和 CI/CD 工具插件,作為接口和利用它們的不同方式。以頻繁部署為目標的開發(fā)團隊可以通過提供更多 API 端點和增加測試數據集的廣度來改進連續(xù)測試實踐。
使用服務虛擬化平臺和成熟的持續(xù)測試實踐的敏捷開發(fā)團隊應該考慮幾個最佳實踐,例如創(chuàng)建負面測試用例和培訓技術人員。加快測試周期的幾個最佳實踐,包括定義基礎架構要求、保護虛擬化服務以及定期更新系統(tǒng)。領導者還應該尋求切實的商業(yè)利益,例如更快地將新應用程序投入生產并降低成本。
隨著越來越多的組織針對云實現(xiàn)應用程序現(xiàn)代化、開發(fā)微服務并與許多 SaaS 平臺集成,服務虛擬化成為支持穩(wěn)健和持續(xù)測試的關鍵平臺功能。
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】