精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解Spring云端微服務的組件測試

譯文
開發 前端
本文將以常見用例的形式和您討論Spring Cloud微服務組件測試的相關指南和注意事項。

軟件開發教父--Martin Fowler在其題為《??微服務架構的測試策略??》講演中,詳細詮釋了測試不同級別的微服務的概念,其中就提到了如下圖所示的“測試金字塔”模型。該模型從下到上分別為:單元、集成、組件、端到端和探索。

而不可否認的是,隨著業界廣泛采用云端微服務,我們在得益于處理多個可獨立部署的組件的同時,需要提高微服務應用的測試級別,并按需增加測試策略的復雜性。下面,我將從使用者的角度出發,以一個Spring Cloud微服務為例,深入探究各種服務組件的相關測試。

服務

我們的Spring Boot微服務示例會具有如下特征:

  • 將啟用??Spring Cloud Netflix??。它會使用Spring Boot應用的Netflix OSS集成,來執行服務注冊與發現、分布式外部配置(Spring Cloud Config)、以及客戶端的負載平衡
  • 將與關系型數據庫(如PostgreSQL)相集成
  • 將能調用另一個(內部)微服務
  • 將調用第三方(外部)Web服務
  • 將啟用Spring Security,以充當OAuth2的資源服務器
  • 將被“隱藏”在API網關服務器,例如??Spring Cloud Gateway??的后面

我們將通過Java 11、Apache Maven、Docker、以及一組協作庫,“盡早地”在CI/CD管道中,進行單獨的服務測試,而無需實際部署或占用其他服務、數據庫、甚至是完整的測試環境資源。同時,您可以通過鏈接--https://github.com/kmandalas/spring-cloud-component-tests,在GitHub上獲取該示例的所有代碼。

該示例中的“訂單跟蹤”微服務是由一個Spring Controller、Service和Repository所組成。它公開了兩個端點:

  1. GET/api/orders/{trackingNumber}/status:它通過給定的跟蹤號,執行數據庫查詢,來獲取相關訂單;然后調用FulfillmentService的內部服務,來確定交付的狀態;進而讓最終外部服務根據狀態,調用位置服務來實現定位。這是一個帶有有效的JWT、且受保護的API調用。
  2. GET/api/orders:通過查詢數據庫,以列出所有訂單。這是一個受到額外授權限制的、且受保護的API調用。它僅適用于具有“back-office”角色的用戶。

組件測試

OrderControllerTest.java類將針對API提供的多種方法,來封裝組件測試。例如,我們可以選用包括:??Maven插件??、??JUnit功能??、??Spring Boot測試切片??和分類單元測試、集成測試、組件測試、合同測試等方法。當然,并非所有的測試類別都需要在CI/CD管道中被執行(或重新執行)。鑒于該示例過于簡單,我強烈建議您實施適當的分類。

在??/src/test/resources/application.yml??中,我們針對屬性的測試配置如下:

YAML

server:
port: 0

spring:
application:
name: order-service-test
cloud:
service-registry:
auto-registration:
enabled: false
loadbalancer:
ribbon:
enabled: false
config:
enabled: false
jpa:
show-sql: true

eureka:
client:
enabled: false
service-url:
registerWithEureka: false

okta:
oauth2:
issuer: https://kmandalas/oauth2/default

location-service:
  url: http://localhost:9999/v1/track/

在上述代碼段所示中,我們禁用spring.cloud.config、eureka.client和spring.cloud.service-registry.auto-registration的原因在于,方便孤立地測試微服務。因此,既不會有Spring Cloud Config服務器在啟動時,為OrderService的配置屬性提供服務;也不會有Eureka服務器提供注冊,并能夠使用它來按需調用FulfillmentService的動態服務發現。

數據庫

當出于測試目的而必須與數據庫(關系型或NoSQL)集成時,我們通常有如下三種選擇:

  1. 使用嵌入式或內存中(in-memory)方案,例如:H2,https://www.h2database.com/
  2. 使用一個能在測試期間可供訪問的真實數據庫
  3. 使用與生產數據庫接近甚至相同的臨時數據庫

不同的選項所涉及到的測試資源,將會不盡相同。

  • 如果采用第一種方法,將H2進行集成和組件測試,那么由于生產環境的數據庫很可能與H2不同,因此您將不得不維護各種獨立的DDL和DML腳本。此外,您也可能會用到原生查詢、或其他特定于某個數據庫的功能。
  • 如果您需要進行端到端或性能測試的話,那么就應該部署真實的數據庫,并在測試環境中啟動并運行它。對此,現代化的IaC(infrastructure as code,基礎設施即代碼)工具、以及詳盡的??測試數據管理??,將可以為項目按需提供靈活性。
  • 在本測試示例中,我們將使用第三種方法,利用??testcontainers???和??Flyway??,實現與Spring Boot的配合,而數據庫才采用PostgreSQL。在testcontainers的幫助下,我們將在測試的初始化階段,創建一個臨時的dockerized數據庫實例。而Flyway將會在這個臨時模式(schema)上觸發???遷移腳本??(DDL/DML),以便我們的代碼將透明地、針對該臨時模式運行。而在測試完成時,我們會處理掉這個dockerized數據庫。

可見,我們實際上只需要OrderControllerTest類上的@Testcontainers注釋,以及如下的靜態聲明:

Java

@Container
static PostgreSQLContainer database = new PostgreSQLContainer("postgres:12")
.withDatabaseName("tutorial")
.withUsername("kmandalas")
.withPassword("dzone2022");
?
@DynamicPropertySource
static void setDatasourceProperties(DynamicPropertyRegistry propertyRegistry) {
propertyRegistry.add("spring.datasource.url", database::getJdbcUrl);
propertyRegistry.add("spring.datasource.password", database::getPassword);
propertyRegistry.add("spring.datasource.username", database::getUsername);
}

內部服務調用

我們將使用??Spring Cloud OpenFeign??來調用FulfillmentService,它是另一個“內部”的Spring Cloud微服務,可以被注冊到Eureka上。在正常執行的情況下,后臺的feign客戶端能夠通過名稱定位目標服務實例,實現客戶端的負載均衡(如果發現了多個實例的話)。

在我們的測試中,在沒有Eureka(或者是??Consul??等其他發現機制)的情況下,我們需要通過如下兩個方面,盡可能真實地模擬此類集成:

  1. 通過??WireMock??啟動一個模擬服務器。該服務器能夠根據URL的不同模式,來截獲請求,并回復由我們提供的模擬響應。
  2. 使用@TestConfiguration來模擬各種FulfillmentService實例的發現,并將其指向WireMock服務器的URI。您可以通過鏈接--https://github.com/kmandalas/spring-cloud-component-tests/blob/50241126932fce3e9cfc6351291af5857f77806a/src/test/java/gr/kmandalas/dzone/OrderControllerTest.java#L55,查看到此類測試配置。

當然,您也可以使用??Hoverfly??作為嵌入式模擬服務器。在本示例里,我們通過如下依賴項設置,來引入WireMock:

XML

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
<scope>test</scope>
 </dependency>

通過spring-cloud-starter-contract-stub-runner,WireMock在Spring Boot應用測試套件中的引導被簡化了許多,同時這對于??契約測試??(contract tests)也是非常實用的。請通過查看Spring Cloud Contract WireMock的鏈接--https://docs.spring.io/spring-cloud-contract/docs/current/reference/html/project-features.html#features-wiremock,了解更多相關信息。

有了上面的基礎,我們只需要使用@AutoConfigureWireMock去注釋測試類,并在測試資源目錄下的??JSON文件??中定義各種WireMock映射即可。

外部服務調用

在集成的過程中,為了能夠調用某些外部的(第三方)服務,我們仍然需要依賴有效的WireMock映射(畢竟能夠提供的響應多多益善),以便在??application.yml??中定義測試URL資源。下面是一個簡單的示例:

YAML

location-service:
  url: http://localhost:9999/v1/track/

我們在外部服務的URL端點路徑處,提供了WireMock嵌入式服務器運行的主機和端口。端口號雖然不必經過硬編碼,但是可以被定義為動態的,以便在CI/CD管道中并行運行多個組件測試,且不會發生端口沖突。

值得一提的是,WireMock不僅可以用于模擬來自RESTful服務的各種JSON響應,還可以模擬基于SOAP的Web服務的響應。

安全

正如前文提到的,Spring Cloud微服務基礎設施通常能夠合并出一個諸如Spring Cloud Gateway的API網關。據此,我們可以使用OAuth 2.0、JavaScript對象簽名和加密(Object Signing and Encryption,JOSE)、以及JSON Web令牌標準的令牌中繼模式,來處理用戶的身份識別,授權應用程序查看他們的個人資料,以及訪問網關后面的安全資源。通常,此類安全設置會由如下組件構成:

  • 單點登錄服務器,如??Keycloak???、Cloud Foundry 的用戶帳戶和???身份驗證服務器???、以及??諸如Okta??之類商用的OAuth2身份驗證提供程序。
  • Spring Cloud Gateway之類的API網關服務器,將用戶帳戶的管理和授權委托給單點登錄服務器。
  • 資源服務器:在本Spring Boot微服務示例中為OrderService。

針對本測試示例,我們在單獨測試Spring Boot微服務時,會采用??Spring Security??的SecurityMockMvcRequestPostProcessors。它將使我們能夠在MockMvc調用期間,傳遞有效的JWT,定義權限(即用戶角色),并在啟用安全性的情況下,測試組件的行為。例如:

Java

mockMvc.perform(get("/api/orders/11212/status").with(jwt())).andExpect(status().isOk())

mockMvc.perform(get("/api/orders/").with(jwt().authorities(new 
SimpleGrantedAuthority("backoffice"))))
.andExpect(status().isOk());

小結

如今,對于成功的產品交付而言,開發人員是否能夠在CI/CD管道中,以自動化的方式執行各類測試是至關重要的。希望上述討論的有關Spring Cloud微服務組件測試的相關指南和注意事項,能夠給您的實際項目交付提供幫助。

譯者介紹

陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。

原文標題:Component Tests for Spring Cloud Microservices,作者:Kyriakos Mandalas和Dimitris Stavroulakis


責任編輯:華軒 來源: 51CTO
相關推薦

2022-10-13 14:14:42

開發微服務測試

2022-10-08 07:31:26

微服務編排體系

2023-02-09 08:01:12

核心組件非阻塞

2018-04-19 09:32:46

2018-06-01 23:08:01

Spring Clou微服務服務器

2022-05-06 10:03:51

數據庫存儲微服務

2019-12-26 15:49:14

微服務架構業務

2023-12-19 07:56:08

微服務軟件測試左移測試

2021-06-30 10:16:54

微服務架構測試

2023-03-24 16:18:08

微服務架構

2022-01-16 23:10:40

語言服務注冊

2023-12-19 09:33:40

微服務監控

2017-12-20 15:37:39

Spring Clou微服務架構

2011-05-06 11:28:27

微軟云端基礎構架

2017-09-05 14:05:11

微服務spring clou路由

2022-01-26 09:36:53

Consul語言微服務

2018-11-15 07:56:26

2020-11-18 09:37:44

微服務

2018-09-17 14:34:34

微服務測試架構

2024-06-05 11:29:54

微服務監控工具
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲美洲av| 在线播放成人av| 久久综合五月婷婷| 91黄色免费观看| 亚洲视频小说| 亚洲高清在线观看视频| 欧美综合国产| 日韩在线视频中文字幕| 激情小说欧美色图| 欧美电影免费看| 日韩毛片在线免费观看| 国产精品国产三级国产专区53| 国产成人无码精品亚洲| 欧美高清视频手机在在线| 精品少妇一区二区三区免费观看 | 亚洲国产精品久久久天堂| 精品国产电影一区二区| 另类小说第一页| 超碰在线99| 国产精品国产自产拍在线| 国产亚洲精品自在久久| 亚洲中文字幕在线一区| 国产欧美一级| 欧美成人精品三级在线观看| 欧美老熟妇乱大交xxxxx| 国产亚洲高清在线观看| 欧美性xxxx在线播放| 加勒比海盗1在线观看免费国语版| 神马精品久久| 国产成人99久久亚洲综合精品| 国产精品成av人在线视午夜片 | 亚洲av成人精品一区二区三区| 97精品国产综合久久久动漫日韩 | 一区二区三区视频免费视频观看网站| 日本高清不卡视频| 国产精品专区在线| 亚洲综合图区| 中文字幕一区二区三区蜜月| 欧美二级三级| 天堂中文网在线| 国产精品一区在线观看你懂的| 国产精品黄页免费高清在线观看| 久久国产精品免费看| 欧美激情日韩| 久久综合国产精品台湾中文娱乐网| 国产av自拍一区| 99精品国产一区二区三区2021| 欧美精品在线观看一区二区| 特级丰满少妇一级| 欧美最新精品| 一本大道综合伊人精品热热| 久草热视频在线观看| 日本资源在线| 亚洲一区二区高清| 国产一二三四区在线观看| 日本中文在线| 一区免费观看视频| 亚洲天堂av免费在线观看| 91九色在线porn| 中文字幕一区二区三区视频| 亚洲欧洲国产日韩精品| 在线免费观看黄色网址| 国产精品久久久久久久岛一牛影视 | av亚洲精华国产精华| 国产高清精品一区| 蜜臀久久精品久久久久| 波多野结衣一区二区三区| 国内成+人亚洲| 亚洲欧洲视频在线观看| 久久天堂av综合合色蜜桃网 | 欧美3p在线观看| 俺去啦;欧美日韩| 杨钰莹一级淫片aaaaaa播放| 中文精品久久| 久久久久久有精品国产| 久久久国产高清| 老司机午夜精品视频| 国产精品www| 国产永久免费视频| 国产精品主播直播| 国产自产精品| 免费资源在线观看| 国产精品午夜春色av| 佐佐木明希av| 国产污视频在线播放| 色av综合在线| 五月六月丁香婷婷| 国产精品黄网站| 亚洲欧美日韩国产精品| 美国精品一区二区| 欧美+日本+国产+在线a∨观看| 久久久久久97| 久久国产乱子伦精品| 精品在线亚洲视频| 精品九九九九| 欧美精品日韩少妇| 精品福利樱桃av导航| 91人人澡人人爽人人精品| 久久av偷拍| 亚洲精品在线91| 日韩三级久久久| 亚洲先锋成人| 国产精品日韩欧美大师| 亚洲乱码国产乱码精品精软件| 91麻豆国产精品久久| 一区中文字幕在线观看| 久久久男人天堂| 欧美精品久久一区| 国内精品久久99人妻无码| 希岛爱理一区二区三区| 日韩免费在线看| 精品久久久久中文慕人妻| 久久蜜桃一区二区| 777久久精品一区二区三区无码| 色多多在线观看| 欧美一区二区二区| 免费一级特黄3大片视频| 精品电影一区| 91久久精品美女高潮| 国产二区视频在线观看| 亚洲成人一区二区在线观看| 玖玖爱视频在线| 奇米亚洲欧美| 91精品国产高清久久久久久| 国产福利视频导航| 久久久不卡网国产精品二区| 国产91沈先生在线播放| 亚洲精品无播放器在线播放| 亚洲视频视频在线| 永久免费看片在线播放| 高清shemale亚洲人妖| 99精品视频网站| 性欧美freehd18| 亚洲女人初尝黑人巨大| 日本熟女一区二区| 国内精品福利| 精品中文一区| 欧美极品免费| 涩涩在线视频| 久久青草国产手机看片福利盒子| 黄频视频在线观看| 99久久婷婷国产综合精品首页| 亚洲国内高清视频| 久久影院一区二区| 国产一区二区不卡老阿姨| 亚洲精品久久久久久一区二区| 在线亚洲人成| 亚洲理论在线a中文字幕| 日韩免费不卡视频| 不卡视频一二三| 和岳每晚弄的高潮嗷嗷叫视频| 国产精品一区三区在线观看| 日韩性生活视频| 一区二区三区精彩视频| 国产精品亲子伦对白| 亚洲一区在线不卡| 欧美gayvideo| 国产欧美日韩丝袜精品一区| avtt亚洲| 7777女厕盗摄久久久| 2018天天弄| 成人午夜视频网站| 国产美女主播在线| 欧美自拍一区| 国产成人精品久久| 99精品老司机免费视频| 欧美区在线观看| 久久精品一区二区三区四区五区| 精品一区二区免费在线观看| 日韩精品福利片午夜免费观看| 欧美2区3区4区| 午夜精品久久久久久久白皮肤| 午夜视频福利在线| 91福利国产精品| 成人黄色短视频| 国产福利视频一区二区三区| 91午夜在线观看| 啪啪国产精品| 国产精品久久久久久久久免费 | 亚洲无线码在线一区观看| 精品国产午夜福利| 国产精品人人做人人爽人人添| 亚洲免费av一区| 欧美视频亚洲视频| 欧美一二三四五区| 精品久久国产一区| 欧美一级黑人aaaaaaa做受| caoporn国产精品免费视频| 欧美一区二区三区免费视频| 日韩在线观看第一页| 中文一区在线播放| 久久久男人的天堂| 日韩中文字幕不卡| 成人午夜视频免费观看| 亚洲免费福利一区| 亚洲影视中文字幕| 欧洲亚洲两性| 久久99热精品这里久久精品| 日韩电影网址| 日韩一级二级三级精品视频| 亚洲天堂av片| 一区二区三区国产豹纹内裤在线| 亚洲av片不卡无码久久| 久久99九九99精品| 欧美 国产 日本| 欧美在线视屏| 日韩黄色影视| 99国产精品免费网站| 国产精品亚洲美女av网站| 污污的视频在线观看| 国产亚洲欧美一区| 三级网站免费观看| 制服丝袜日韩国产| 免费在线观看黄网站| 亚洲特黄一级片| 国产成人精品无码免费看夜聊软件| 国产精品一区免费在线观看| 成人一区二区三| 亚洲日本黄色| av日韩在线看| 国产精品成人av| 日本一区二区精品| 欧美理伦片在线播放| 波多野结衣精品久久| 外国成人毛片| 国产精品视频白浆免费视频| 午夜伦理福利在线| 国内精品视频在线| 手机在线免费av| 精品精品国产国产自在线| 国产在线超碰| 亚洲欧美制服中文字幕| 欧美亚洲精品在线观看| 日韩欧美一区电影| av av片在线看| 欧美电影在线免费观看| 波多野结衣av无码| 91久久奴性调教| 影音先锋在线国产| 欧美午夜宅男影院在线观看| 国产精品7777777| 亚洲va天堂va国产va久| 欧美日韩综合一区二区| 亚洲欧美激情在线| 日本中文在线视频| 亚洲欧美自拍偷拍| 亚洲怡红院在线观看| 中文字幕一区二区日韩精品绯色| 色屁屁草草影院ccyy.com| 国产午夜亚洲精品羞羞网站| 女人又爽又黄免费女仆| 久久精品人人做| 国产人妻大战黑人20p| 久久久国产精品不卡| 一级肉体全黄裸片| 亚洲国产精品黑人久久久| 国产又粗又长又黄的视频| 中文字幕在线不卡视频| 五月综合色婷婷| 亚洲综合男人的天堂| 国产一卡二卡在线播放| 亚洲成人一区在线| 午夜精品一区二| 欧美男男青年gay1069videost | 极品少妇xxxx偷拍精品少妇| 在线观看免费视频污| 国产成人免费视频一区| 99riav国产精品视频| 99精品桃花视频在线观看| 成人影视免费观看| 国产精品国产三级国产普通话三级 | 国产三级欧美三级| 日韩一级片在线免费观看| 亚洲欧洲美洲综合色网| 久草免费在线观看视频| 天天色综合天天| 亚洲午夜无码久久久久| 91精品国产综合久久福利| 成人av一区二区三区在线观看 | 成人网在线观看| 亚洲精品午夜| 久久国产日韩欧美| 日韩欧美字幕| 亚洲熟妇无码一区二区三区导航| 性欧美精品高清| 成人性生交免费看| 处破女av一区二区| 性少妇bbw张开| 1024亚洲合集| 色一情一乱一伦| 6080午夜不卡| 色天堂在线视频| 久久精品99久久久香蕉| 绿色成人影院| 成人久久一区二区| 亚洲免费毛片| 国产在线无码精品| 日韩精品欧美精品| 91超薄肉色丝袜交足高跟凉鞋| 国产欧美一区二区精品久导航| 欧美做爰爽爽爽爽爽爽| 一本一本大道香蕉久在线精品 | 操bbb操bbb| 久久久噜噜噜久久狠狠50岁| 色男人天堂av| 国产亚洲福利社区一区| 精品99在线观看| 欧美日韩一区 二区 三区 久久精品| 午夜精品久久久久久久96蜜桃 | 国产高清一区二区三区四区| 亚洲黄色录像片| 中文区中文字幕免费看| 日韩高清欧美高清| 日本高清在线观看| 国产欧美精品在线| 精品中文一区| 黄色一级视频片| 国产白丝精品91爽爽久久| 成人做爰69片免网站| 天天av天天翘天天综合网| 99久久精品日本一区二区免费| 亚洲色图35p| 欧美久久天堂| 精品日韩欧美| 亚洲福利精品| 粗大的内捧猛烈进出视频| 国产精品久久久久桃色tv| 精品人妻一区二区三区免费看| 精品国产乱码久久久久久影片| 麻豆影视国产在线观看| 国产精品一香蕉国产线看观看| 日本亚洲不卡| 免费毛片小视频| www.亚洲精品| 国产精彩视频在线| 精品久久人人做人人爽| 在线播放免费av| 亚洲综合第一页| 中国成人一区| 18深夜在线观看免费视频| 亚洲日本丝袜连裤袜办公室| 国产一区二区在线播放视频| 综合136福利视频在线| 亚洲天堂1区| 亚洲.欧美.日本.国产综合在线| 久久久噜噜噜| 青娱乐国产视频| 欧洲一区在线电影| 国产露出视频在线观看| 国产精品国模在线| 日韩毛片视频| 中文字幕 欧美日韩| 亚洲欧美视频在线观看视频| 国产色综合视频| 精品视频9999| 卡通动漫国产精品| 丰满少妇被猛烈进入高清播放| 91麻豆国产精品久久| 国产免费a视频| 日韩中文字幕网| 国产精一区二区| 妞干网视频在线观看| 北岛玲一区二区三区四区| 久久艹免费视频| 一区二区三区四区视频| 四虎视频在线精品免费网址| 四虎永久免费网站| 成人精品国产免费网站| 五月天综合激情网| 一区二区三区无码高清视频| 日韩久久一区| 日本黄色片一级片| 91色porny在线视频| 中文在线字幕免费观| 欧美不卡视频一区发布| 懂色av一区二区| 欧美日韩亚洲一二三| 中文字幕一区三区| 黄色av一区二区三区| 国产精品9999| 欧美+亚洲+精品+三区| 一二三不卡视频| 欧美日韩国产一级片| 女人天堂av在线播放| 欧美日韩在线观看一区| 激情av综合网| 亚洲国产成人精品激情在线| 色悠悠久久久久| 国产精品任我爽爆在线播放| 男人女人黄一级| 亚洲一区自拍偷拍| 国内av一区二区三区| 51国偷自产一区二区三区| 国产欧美日韩一级| www.毛片com| 亚洲欧美资源在线| 亚洲国产一区二区三区网站| 免费国产成人av| 亚洲国产中文字幕在线视频综合| 国产在线观看免费|