外部集成 网页制作_外部服务的集成测试
外部集成 網頁制作
我們的系統通常依賴于第三方服務(它們甚至可能是我們無法控制的公司內部服務)。 此類服務包括公開API的社交網絡,帶有諸如Salesforce,身份驗證提供程序之類的API的SaaS或我們系統與之通信但不在產品生命周期內的任何系統。
在常規的集成測試中,我們將對所有子系統進行集成部署,以測試它們如何協同工作。 但是,在使用外部服務的情況下,我們只能使用實際部署(考慮到一些API憑據)。 我們必須編寫集成測試哪些選項,即檢查我們的系統是否與外部系統正確集成?
如果該服務提供了一個沙箱,那就是要走的路–您可以在目標環境中進行任何操作,并且該環境將短暫存在,并且對任何最終用戶都不可見。 但是,這很罕見,因為大多數外部服務都不提供此類沙箱。
另一個選擇是擁有集成測試帳戶-例如,您在Twitter上注冊一個名為“您的產品測試”的應用程序,創建一個測試Twitter帳戶,并將這些憑據提供給集成測試。 如果您沒有涉及多步交互和很多前提條件的復雜場景,那將很好用。 例如,如果您的應用程序在一段時間內分析了推文,則您過去無法使用測試帳戶發布推文。
第三種選擇是模擬。 通常,模擬和集成測試是互斥的,但在這種情況下不是互斥的。 您不想測試外部服務是否符合其規范(或API文檔),而是想要測試您的應用程序是否以正確的方式調用它并正確處理其響應。 因此,可以運行外部系統的模擬程序,該模擬程序以預定義的標準集返回預定義的結果。 這些結果和標準應直接符合規格。
通過運行嵌入式模擬服務器可以輕松實現。 有多種工具可用于執行此操作-以下是其中一些Java列表-WireMock , MockServer , MockWebServer , Apache Wink 。 前三個是為上述用例專門創建的,而Apache Wink具有一個簡單的模擬服務器類,作為較大項目的一部分。
因此,如果要在每次成功購買后測試應用程序是否正確發布了推文,則可以(例如,使用WireMock)執行以下操作:
@Rule public WireMockRule wireMockRule = new WireMockRule(8089);@Test public void purchaseTweetTest() {stubFor(post(urlEqualTo("/statuses/update.json")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(getMockJsonResponse()));// ...purchaseService.completePurchase(purchase);verify(postRequestedFor(urlMatching("/statuses/update.json")).withRequestBody(matching(".*purchaseId: " + purchaseId + "*"))); }這樣,您將驗證與外部服務的通信是否在您的應用程序中得到了正確處理,即,您是否正確集成,但不會在實際系統上進行測試。
當然,這有一個缺點–您在模擬程序中放置的規則可能與外部系統中的規則不同。 您可能對規格/文檔有誤解,或者可能未涵蓋所有特殊情況。 但是為了進行自動化測試,我認為這比支持無法正確清理或設置測試數據的測試帳戶更好。
這些自動化集成測試可以與在暫存環境中進行手動測試相結合,以確保即使在實際的外部系統中集成也可以正常工作。
翻譯自: https://www.javacodegeeks.com/2014/05/integration-tests-for-external-services.html
外部集成 網頁制作
總結
以上是生活随笔為你收集整理的外部集成 网页制作_外部服务的集成测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中的适配器设计模式
- 下一篇: 化学平衡的转化率的公式是什么 化学平衡的