日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

測(cè)試開(kāi)發(fā):從0到1學(xué)習(xí)如何測(cè)試API網(wǎng)關(guān)

 測(cè)試開(kāi)發(fā)技術(shù) 2022-06-18 發(fā)布于廣東

干貨技術(shù),第一時(shí)間送達(dá)!

日常工作中,難免會(huì)遇到臨危受命的情況,雖然沒(méi)有這么夸張,但是也可能會(huì)接到一個(gè)陌生的任務(wù),也許只是對(duì)這個(gè)概念有所耳聞。也許這個(gè)時(shí)候會(huì)感到一絲的焦慮,生怕沒(méi)法完成領(lǐng)導(dǎo)交給的測(cè)試任務(wù)。其實(shí)也沒(méi)有必要那么緊張,面對(duì)一個(gè)陌生的被測(cè)對(duì)象,我們只需要去了解清楚它的應(yīng)用場(chǎng)景、內(nèi)部原理、實(shí)現(xiàn)邏輯,結(jié)合開(kāi)發(fā)的設(shè)計(jì)需求,一樣也能完成好測(cè)試任務(wù),積累經(jīng)驗(yàn)。這次就分享一些從0到1學(xué)習(xí)如何測(cè)試API網(wǎng)關(guān)的經(jīng)驗(yàn)。

一、什么是API網(wǎng)關(guān)

簡(jiǎn)述:

API網(wǎng)關(guān)出現(xiàn)的原因是微服務(wù)架構(gòu)的出現(xiàn),不同的微服務(wù)一般會(huì)有不同的網(wǎng)絡(luò)地址,而外部的客戶端可能需要調(diào)用多個(gè)服務(wù)的接口才能完成一個(gè)業(yè)務(wù)需求,這個(gè)時(shí)候系統(tǒng)結(jié)構(gòu)會(huì)顯得非常錯(cuò)綜復(fù)雜,會(huì)出現(xiàn)許多問(wèn)題:

  • 客戶端復(fù)雜性增加,現(xiàn)在一般同一套后端服務(wù)會(huì)支撐多個(gè)客戶端
  • 存在跨域請(qǐng)求,在一定場(chǎng)景下處理相對(duì)復(fù)雜
  • 認(rèn)證復(fù)雜,每個(gè)服務(wù)都需要單獨(dú)驗(yàn)證
  • 耦合度高,難以重構(gòu)
  • 某些微服務(wù)會(huì)存在防火墻等一些保護(hù)措施,無(wú)法直接訪問(wèn)

微服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中的一個(gè)關(guān)鍵角色,用來(lái)保護(hù),增強(qiáng)和控制對(duì)于微服務(wù)的訪問(wèn),微服務(wù)網(wǎng)關(guān)是一個(gè)處于應(yīng)用程序或服務(wù)之前的系統(tǒng),用來(lái)管理授權(quán),訪問(wèn)控制和流量限制等,這樣微服務(wù)就會(huì)被微服務(wù)網(wǎng)關(guān)保護(hù)起來(lái)對(duì)所有的調(diào)用者透明。因此,隱藏在微服務(wù)網(wǎng)關(guān)后面的業(yè)務(wù)系統(tǒng)就可以更加專注于業(yè)務(wù)本身。

組成:

  • 路由轉(zhuǎn)發(fā):接受外界請(qǐng)求,轉(zhuǎn)發(fā)到后端微服務(wù)
  • 過(guò)濾器:完成一系列橫切功能,例如權(quán)限校驗(yàn),限流以及監(jiān)控等

優(yōu)點(diǎn):

  • 安全性高,只有網(wǎng)關(guān)系統(tǒng)對(duì)外進(jìn)行暴露,微服務(wù)可以隱藏在內(nèi)網(wǎng),通過(guò)防火墻策略保護(hù)
  • 易于監(jiān)控,可以在網(wǎng)關(guān)收集監(jiān)控?cái)?shù)據(jù)并將其推送到外部監(jiān)控系統(tǒng)進(jìn)行分析
  • 易于認(rèn)證,可以在網(wǎng)關(guān)處統(tǒng)一進(jìn)行認(rèn)證,無(wú)需在后端微服務(wù)中進(jìn)行認(rèn)證
  • 減少耦合,避免多個(gè)客戶端與后端微服務(wù)之間的交互次數(shù)
  • 易于鑒權(quán),在網(wǎng)關(guān)處統(tǒng)一鑒權(quán)

職能:

  • 請(qǐng)求接入,作為所有API接口服務(wù)請(qǐng)求的接入點(diǎn)
  • 業(yè)務(wù)聚合,作為所有后端業(yè)務(wù)服務(wù)的聚合點(diǎn)
  • 中介策略,實(shí)現(xiàn)安全,驗(yàn)證,路由,過(guò)濾,流控等策略
  • 統(tǒng)一管理,對(duì)所有API服務(wù)和策略進(jìn)行統(tǒng)一管理

二、微服務(wù)網(wǎng)關(guān)常見(jiàn)技術(shù)

  • nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù)
  • zuul,Zuul是Netflix出品的一個(gè)基于JVM路由和服務(wù)端的負(fù)載均衡器
  • spring-cloud-gateway是spring出品的基于spring的網(wǎng)關(guān)項(xiàng)目,集成斷路器,路徑重寫(xiě)等,性能比Zuul好

2.1    gateway是什么

Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態(tài)系中的網(wǎng)關(guān),目標(biāo)是替代Zuul,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點(diǎn),和限流等。

幾個(gè)概念

  • Route(路由):這是網(wǎng)關(guān)的基本構(gòu)建塊。它由一個(gè)ID,一個(gè)目標(biāo)URI,一組斷言和過(guò)濾器定義。如果斷言為真,則路由匹配成功。
  • Predicate(斷言):輸入類型是一個(gè)ServerWebExchange。我們可以使用它來(lái)匹配來(lái)自HTTP請(qǐng)求的任何內(nèi)容,例如headers或參數(shù)。
  • Filter(過(guò)濾器):Gateway中的Filter分為兩種類型的filter,分別是gateway filter和global filter,過(guò)濾器會(huì)對(duì)請(qǐng)求和響應(yīng)作處理。

2.2gateway怎么用

說(shuō)到底predicate就是為了實(shí)現(xiàn)一組匹配規(guī)則,方便讓請(qǐng)求過(guò)來(lái)找到對(duì)應(yīng)的Route進(jìn)行處理,而spring cloud gateway內(nèi)置了幾種predicate的使用。

1、通過(guò)時(shí)間匹配

Predicate 支持設(shè)置一個(gè)時(shí)間,在請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)的時(shí)候,可以通過(guò)判斷在這個(gè)時(shí)間之前或者之后進(jìn)行轉(zhuǎn)發(fā)。比如我們現(xiàn)在設(shè)置只有在 2018 年 1 月 20 日才會(huì)轉(zhuǎn)發(fā)到我的網(wǎng)站,在這之前不進(jìn)行轉(zhuǎn)發(fā),我就可以這樣配置:

spring:
  cloud:
    gateway:
      routes:
       - id: time_route
        uri: http://
        predicates:
         - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]

2、通過(guò)cookie匹配

Cookie Route Predicate 可以接收兩個(gè)參數(shù),一個(gè)是 Cookie name , 一個(gè)是正則表達(dá)式,路由規(guī)則會(huì)通過(guò)獲取對(duì)應(yīng)的 Cookie name 值和正則表達(dá)式去匹配,如果匹配上就會(huì)執(zhí)行路由,如果沒(méi)有匹配上則不執(zhí)行。

spring:
  cloud:
    gateway:
      routes:
       - id: cookie_route
         uri: http://
         predicates:
         - Cookie=youknowit, value

3、通過(guò)請(qǐng)求路徑匹配

Path Route Predicate 接收一個(gè)匹配路徑的參數(shù)來(lái)判斷是否走路由。

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://x.x.x.x:8022/
        predicates:
        - Path=/foo/{segment}

如果請(qǐng)求路徑符合要求,則此路由將匹配,例如:/foo/1或者/foo/bar。

當(dāng)然內(nèi)置的匹配規(guī)則還有很多,通過(guò)請(qǐng)求參數(shù),請(qǐng)求方式,請(qǐng)求IP地址等去匹配,也可以組合使用。

注意:

一個(gè)請(qǐng)求滿足多個(gè)路由的謂詞條件時(shí),請(qǐng)求只會(huì)被首個(gè)成功匹配的路由轉(zhuǎn)發(fā)

本次提測(cè)版本,開(kāi)發(fā)使用spring-cloud-gateway來(lái)將平臺(tái)業(yè)務(wù)側(cè)引入網(wǎng)關(guān), 將網(wǎng)關(guān)作為調(diào)用PaaS的唯一入口,便于維護(hù),同時(shí)利用網(wǎng)關(guān)的能力實(shí)現(xiàn)限流,熔斷,鑒權(quán),灰度驗(yàn)證等功能。第一期只接入統(tǒng)一前裝,充分驗(yàn)證后后續(xù)接入其他應(yīng)用。因此,本次測(cè)試的重點(diǎn)在路由轉(zhuǎn)發(fā)功能。

三、常見(jiàn)測(cè)試點(diǎn)

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 5000
        response-timeout: 5s
        ssl:
          close-notify-flush-timeout-millis: 3000
          close-notify-read-timeout-millis: 0
          handshake-timeout-millis: 10000
          useInsecureTrustManager: true
      routes:
        # gis
        - id: gis_route
          predicates:
            - Path=/gis/**
          uri: http://x.x.x.x:8022/

知道了網(wǎng)關(guān)的基礎(chǔ)知識(shí)和基本原理之后,對(duì)于我們?nèi)绾螠y(cè)試它,作為一名測(cè)試人員心中已經(jīng)有了大概的思路,接下來(lái)就是根據(jù)我們實(shí)際的需求去列出測(cè)試點(diǎn),并進(jìn)一步轉(zhuǎn)換為用例去執(zhí)行。從上面開(kāi)發(fā)給出的配置能知道,此次開(kāi)發(fā)提測(cè)主要是實(shí)現(xiàn)了基于路徑匹配的路由轉(zhuǎn)發(fā)功能,其余功能暫未引入,這樣想來(lái)就簡(jiǎn)單了許多。

3.1功能測(cè)試

常見(jiàn)請(qǐng)求正常轉(zhuǎn)發(fā)

  • get請(qǐng)求正常轉(zhuǎn)發(fā):帶參數(shù)與不帶參數(shù)
  • post請(qǐng)求正常轉(zhuǎn)發(fā):數(shù)據(jù)格式校驗(yàn),例如json,form等
  • delete請(qǐng)求正常轉(zhuǎn)發(fā):帶參數(shù)與路徑帶參
  • put請(qǐng)求正常轉(zhuǎn)發(fā):數(shù)據(jù)格式校驗(yàn),例如json,form等
  • patch請(qǐng)求正常轉(zhuǎn)發(fā):數(shù)據(jù)格式校驗(yàn),例如json,form等
  • 接口超時(shí)測(cè)試:具體的邊界值測(cè)試需根據(jù)自身業(yè)務(wù)需求場(chǎng)景來(lái)設(shè)計(jì)case
  • 文件上傳功能:大小限制,亂碼問(wèn)題,格式問(wèn)題
  • 路由規(guī)則:根據(jù)項(xiàng)目需求的不同規(guī)則來(lái)制定,例如全量匹配,正則,先后順序等
  • 負(fù)載策略:輪詢,權(quán)重等
  • 超時(shí)設(shè)置

3.2插件測(cè)試

API網(wǎng)關(guān)插件各個(gè)公司根據(jù)不同的需求有不同的插件,此次提測(cè)也沒(méi)有涉及,所以收集整理了一些常見(jiàn)的通用插件,例如降級(jí),限流,熔斷,跨域,abtest插件等,提供一些測(cè)試思路。

限流

基本概念: 客戶端請(qǐng)求太多,超出了服務(wù)端的承受能力,導(dǎo)致服務(wù)端不可用或無(wú)法響應(yīng),耗盡服務(wù)端資源甚至是服務(wù)崩潰。解決方案:服務(wù)端對(duì)客戶端進(jìn)行限流,保護(hù)服務(wù)端資源。對(duì)各類請(qǐng)求設(shè)置最高的QPS閾值,當(dāng)請(qǐng)求高于閾值時(shí)直接阻斷。

限流插件測(cè)試思路:可以在API網(wǎng)關(guān)平臺(tái)為對(duì)應(yīng)測(cè)試接口配置限流策略。根據(jù)不同時(shí)間,使用壓測(cè)工具進(jìn)行階段性的壓力測(cè)試,并統(tǒng)計(jì)阻斷接口數(shù),具體的數(shù)值可以根據(jù)自身業(yè)務(wù)場(chǎng)景進(jìn)行測(cè)試。

降級(jí)

基本概念:服務(wù)降級(jí)是指當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況,將一些不重要的接口換種簡(jiǎn)單的方式處理,從而將服務(wù)器資源釋放給當(dāng)前的核心業(yè)務(wù)使其可以高效運(yùn)作。

降級(jí)插件測(cè)試思路:降級(jí)策略主要看開(kāi)發(fā)如何選擇,有的就是讓請(qǐng)求無(wú)法訪問(wèn)到后端服務(wù),借口暫停使用,當(dāng)接口配置降級(jí)插件。插件開(kāi)關(guān)打開(kāi),返回API網(wǎng)關(guān)所配置的響應(yīng)信息狀態(tài)碼等,接口是無(wú)法真正的請(qǐng)求到后端服務(wù)。

熔斷

基本概念: 微服務(wù)架構(gòu)中,各個(gè)微服務(wù)之間相互依賴非常普遍,因此在整個(gè)鏈路中 ,有一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,都會(huì)造成整個(gè)上下游服務(wù)調(diào)用出現(xiàn)問(wèn)題,服務(wù)出現(xiàn)宕機(jī)。也就是說(shuō),熔斷就是調(diào)用方發(fā)起服務(wù)調(diào)用時(shí),如果被調(diào)用方返回的錯(cuò)誤率超過(guò)一定的閾值,那么后續(xù)的請(qǐng)求不會(huì)真正發(fā)起請(qǐng)求,而是調(diào)用方直接返回錯(cuò)誤。兩個(gè)關(guān)鍵點(diǎn),判斷何時(shí)熔斷和何時(shí)從熔斷狀態(tài)恢復(fù)。

熔斷插件測(cè)試思路: 不同的網(wǎng)關(guān)有不同的熔斷策略,例如針對(duì)5xx的返回,根據(jù)不同的入?yún)⒖刂品祷?,可返?xx,4xx,5xx,當(dāng)規(guī)定的時(shí)間5xx數(shù)達(dá)到閾值,服務(wù)是否開(kāi)啟熔斷。熔斷恢復(fù)測(cè)試也是一樣,比如10s,允許部分請(qǐng)求通過(guò),你可以繼續(xù)控制請(qǐng)求,若這部分請(qǐng)求都成功,恢復(fù)熔斷。具體的case設(shè)計(jì)還是要根據(jù)自身業(yè)務(wù)為準(zhǔn)。

跨域

基本概念: 跨域是指,只要協(xié)議,域名,端口有任何一個(gè)不相同,都被當(dāng)作是不同的域。所謂同源策略就是指,協(xié)議,域名和端口都要相同,其中有一個(gè)不同都會(huì)產(chǎn)生跨域。

跨域測(cè)試思路: CORS是一種基于HTTP頭的機(jī)制,該機(jī)制通過(guò)允許服務(wù)器標(biāo)識(shí)除了自己以外的其他origin,這樣瀏覽器可以訪問(wèn)加載這些資源。瀏覽器必須首先使用OPTIONS方法發(fā)起一個(gè)預(yù)檢請(qǐng)求,從而獲知服務(wù)端是否允許該垮源請(qǐng)求。服務(wù)器允許之后,才發(fā)起實(shí)際的HTTP請(qǐng)求。在預(yù)檢請(qǐng)求的返回中,服務(wù)端也可以通知客戶端,是否需要攜帶身份憑證。測(cè)試時(shí),我們就可以通過(guò)是否需要攜帶參數(shù),身份憑證等;各種參數(shù)組合,不同請(qǐng)求等方面去設(shè)計(jì)case。

3.3容錯(cuò)測(cè)試

  • 數(shù)據(jù)庫(kù)宕機(jī)或者重啟:新發(fā)布的路由或者插件設(shè)置等數(shù)據(jù)操作可能失敗,但是不影響已生效的路由和插件
  • 后端服務(wù)其中一臺(tái)或多臺(tái)宕機(jī),重啟,添加新節(jié)點(diǎn)等:負(fù)載策略能夠自動(dòng)提出不可用的服務(wù)節(jié)點(diǎn)和自動(dòng)增加新的服務(wù)節(jié)點(diǎn)
  • redis服務(wù)宕機(jī)一臺(tái)或多臺(tái):不影響已生效路由和插件
  • eureka掛一臺(tái)或多臺(tái):不影響已生效負(fù)載策略

注意: 數(shù)據(jù)庫(kù)down,因?yàn)橛斜镜鼐彺?,?yàn)證本地緩存是否生效,所以數(shù)據(jù)庫(kù)重啟或者down掉,不能影響已經(jīng)生效的路由和插件;后端服務(wù)down掉一臺(tái),驗(yàn)證eureka是否有將死掉的節(jié)點(diǎn)刪除,若eureka并沒(méi)有將死掉的節(jié)點(diǎn)刪除,則會(huì)報(bào)錯(cuò)。添加新的節(jié)點(diǎn),需要看請(qǐng)求是否有輪詢;redis主要用于限流,在redis down掉限流策略失效,但是其他插件功能及路由應(yīng)該不受影響;eureka是注冊(cè)中心,注冊(cè)中心在啟動(dòng)的時(shí)候會(huì)將所有資源加載本地,所以eureka掛一臺(tái)或者多臺(tái),不影響已經(jīng)加載到本地的。總上所述,總結(jié)來(lái)說(shuō)就是API網(wǎng)關(guān)的所有依賴都可以down,但是gateway不可以不用。

3.4壓力測(cè)試

  • 正常壓測(cè):壓API網(wǎng)關(guān)的API即可
  • 負(fù)載測(cè)試:壓測(cè)時(shí),增加和減少后端服務(wù)節(jié)點(diǎn);某個(gè)服務(wù)資源打滿或者超時(shí)嚴(yán)重,不影響其他項(xiàng)目正常訪問(wèn)
  • 切換路由配置
  • 項(xiàng)目資源測(cè)試:超過(guò)配置資源返回錯(cuò)誤
  • ...

注意: 項(xiàng)目資源的作用是進(jìn)行線程隔離,每個(gè)項(xiàng)目資源分配應(yīng)該是固定的,不能搶占其他項(xiàng)目資源而導(dǎo)致其他服務(wù)不可用,進(jìn)行負(fù)載測(cè)試時(shí),增加壓力,增加和減少后端服務(wù)節(jié)點(diǎn),請(qǐng)求應(yīng)該不報(bào)錯(cuò)。

四、總結(jié)

上述內(nèi)容,是對(duì)一些網(wǎng)關(guān)通用功能的測(cè)試思路總結(jié)。由于本次開(kāi)發(fā)提測(cè)網(wǎng)關(guān)版本并沒(méi)有涉及過(guò)多的功能,例如還有集群的熱加載,插件在集群項(xiàng)目與API間的運(yùn)用,API的發(fā)布,下線,插件的隨時(shí)切換,監(jiān)控等需求,親身實(shí)踐還不夠,只能提供一些思路,還需要具體結(jié)合項(xiàng)目的業(yè)務(wù)進(jìn)行更為準(zhǔn)確的case設(shè)計(jì)。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多