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

探秘Spring Contract:如何保障您的API符合預期?

開發 測試
契約測試(Contract testing)是一種測試技術,它通過以隔離檢查集成點上的每個應用的方式,確保應用發送或接收的消息符合調用雙方共識,并允許隨著時間的推移進行演化。

微服務集成測試之痛

  • 環境搭建成本高,需啟動多個服務
  • 用例編寫難
  • 運行慢
  • 發現問題晚
  • 測試脆弱,外部依賴多

1.什么是契約測試

契約測試(Contract testing)是一種測試技術,它通過以隔離檢查集成點上的每個應用的方式,確保應用發送或接收的消息符合調用雙方共識,并允許隨著時間的推移進行演化。

契約測試是對單元測試的增強,針對服務接口provider測試,覆蓋了一部分本來需要集成測試才能測試到的場景。

2.為什么要做契約測試

契約測試主要解決在存在溝通邊界情況下,測試替身(Test Double)與生產代碼表現可能不一致的問題。在契約測試中,契約由代碼生成,保持與現實同步,而且應用可以獨立于其它應用而僅基于契約進行快速測試。

由于集成測試容易受到網絡緩慢或不可靠,以及服務不可靠等因素的影響而運行緩慢或失敗,所以通常會引入測試替身來代替真實外部服務,以快速完成覆蓋度更廣的測試,讓測試真正起到作用。

3.契約測試的定位

金字塔模型是構建健康、快速、可維護測試集的成熟理論。



4.契約測試的價值

眾所周知,越是在項目生命周期的后期發現Bug,其修復的成本就越高。



不同于端到端(E2E)測試,契約測試可以在開發人員推送代碼之前運行,在開發階段提早發現問題。

契約測試還有很多端到端測試不具備的好處:

  • 不需要調用其它組件,運行得很快。
  • 編寫測試不需要了解系統全貌,更容易維護。
  • 問題只存在于被測試組件中,更容易調試和修復。
  • 極易反復運行。
  • 每個組件獨立測試,不會引發流水線構建時間大幅增長。

引入契約測試,還會帶來如下福利:

  • 在提供者API就緒之前就可以開發消費者應用。
  • 為提供者供應準確的需求
  • 會收獲一組文檔化良好的用例,它們確切地顯示了如何使用提供者。
  • 提供者對API變更更有信息,可以準確知道使用者感興趣的字段,方便地移除未使用的字段,以及添加新的字段。
  • 對提供者API進行修改,可以立即看到會影響哪些使用者。

沒有兩個團隊是完全一樣的,契約測試也不是萬能的,關鍵要看契約測試可以為團隊和項目帶來什么。

5.契約測試適合的場景

契約測試可以用于任何需要通信的兩個服務,比如Web前端與后端API服務。

在微服務架構體系中,因為存在更多團隊獨立、服務間調用及服務單獨演進的情形,契約測試有了更好更大的用武之地。良好的契約測試,使得開發人員很容易避免版本地獄,是微服務開發和部署的利器。

6.概念術語

契約測試主要涉及如下概念術語:

  • 消費者(Consumer):對于調用,發起請求的一方。對于MQ,為接收消息的一方。
  • 提供者(Provider):對于調用,響應請求的一方。對于MQ,為生成消息的一方。
  • 契約(Contract):消費者和提供者之間的共識,是一系列交互的集合。對于HTTP調用,包括描述消費者向提供者發送什么的預期請求,以及描述消費者希望提供者返回的最小期望響應。對于消息交互,則描述消費者希望得到的最小期望消息。


7.契約測試模式

契約測試分為消費者驅動(consumer-driven)和提供者驅動(Provider-driven)兩種模式。

消費者驅動更具哲學意義,將API的消費者置于設計過程的核心,來倡導更好的內部微服務設計。該模式的優點在于,只有消費者正在使用的部分會得到測試,而提供者可以自由地更改消費者不使用的任何其它部分,而不必破壞任何現有測試。

提供者驅動思路較為常規,更適合開放數據或系統的場景。

無論采用哪種風格,關鍵在于獲得契約測試的好處,實現引入契約測試的目的。

(1)消費者驅動

消費者驅動的契約測試運行步驟如下:

  • 步驟1:消費者端
  • 編寫并運行單元測試(包括對接口的請求參數和預期響應)
  • MockService代替實際服務提供者(自動)
  • 生成契約文件(自動)
  • 步驟2:提供者端
  • 啟動服務提供者
  • 重放契約文件中的請求,驗證真實響應是否滿足預期(自動)


(2)提供者驅動

提供者驅動模式由提供者定義契約并驅動整個過程。

8.契約測試工具

流行的契約測試工具為:

  • Pact:是一個命令行工具,反饋時間更短,有助于消費者和生產者之間更好地溝通,支持與Maven/Gradle等集成。
  • Spring Cloud Contract:主要用于JVM環境,也容易擴展到非JVM環境,主要適用于生產者驅動的契約測試。

9.利用Pact進行消費者驅動的測試價值

利用Pact進行契約測試的整個流程示意如下,使用了 pact 之后,依然是每個服務獨立的進行單元測試,但是可以模擬出真實集成場景。

  • 將一個笨重的集成測試化為兩個容易編寫、容易運行的單元測試/接口測試
  • 解耦消費者與提供者,甚至可以在沒有提供者實現的情況下開展消費者端測試
  • 通過測試保證契約和實現的一致性,測試通過之時就是代碼實現完成之時
  • 測試前移:在開發階段就應該運行,并作為CI的一部分,便于盡早發現問題


10.Pact示例

pact契約測試分為兩步:

  • 編寫test用例,生成契約文件(不需要啟動服務)。
  • 利用pact-verifier命令和契約文件,驗證接口提供者是否正確 (需要啟動提供者服務)

以下為nlp-pact-parent示例:

(1)父項目pom包相關

<dependencies>
<!-- contract testing -->
<dependency>
    <groupId>au.com.dius</groupId>
    <artifactId>pact-jvm-consumer-junit5</artifactId>
    <version>4.0.10</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>au.com.dius</groupId>
    <artifactId>pact-jvm-provider-junit5</artifactId>
    <version>4.0.10</version>
    <scope>test</scope>
</dependency>

(2)nlp-pact-consumer消費端項目

編寫ConsumerTest生成契約:

@ExtendWith(PactConsumerTestExt.class)
@SpringBootTest(classes = PactConsumerApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@PactTestFor(providerName = "nlp-pact-provider", port = "8202")
public class ConsumerTest {

   private TestRestTemplate restTemplate = new TestRestTemplate();

   @Test
   @PactTestFor(pactMethod = "greetingPact")
    void greeting_shouldReturnMessage() {
      // Arrange
      HttpHeaders headers = new HttpHeaders();
      headers.add("Content-Type", "application/json");
      // Act
      ResponseEntity<Map> response = restTemplate.getForEntity("http://localhost:8202/greeting?name=John", Map.class);
      // Assert
      assertEquals(HttpStatus.OK, response.getStatusCode());
      assertEquals(Collections.singletonMap("message", "Hello, John!"), response.getBody());
   }

   // Pact 定義
   @Pact(consumer = "nlp-pact-consumer", provider = "nlp-pact-provider")
   public RequestResponsePact greetingPact(PactDslWithProvider builder) {
      return builder
            .given("a request for greeting with name 'John'")
            .uponReceiving("a request to greet John")
            .path("/greeting")
            .method("GET")
            .query("name=John")
            .willRespondWith()
            .status(200)
            .headers(Collections.singletonMap("Content-Type", "application/json"))
            .body("{\"message\": \"Hello, John!\"}")
            .toPact();
   }
}

(3)執行ConsumerTest測試用例,生成如下契約文件:

# nlp-pact-consumer-nlp-pact-provider.json

{
  "provider": {
    "name": "nlp-pact-provider"
  },
  "consumer": {
    "name": "nlp-pact-consumer"
  },
  "interactions": [
    {
      "description": "a request to greet John",
      "request": {
        "method": "GET",
        "path": "/greeting",
        "query": {
          "name": [
            "John"
          ]
        }
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "application/json"
        },
        "body": {
          "message": "Hello, John!"
        }
      },
      "providerStates": [
        {
          "name": "a request for greeting with name 'John'"
        }
      ]
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    },
    "pact-jvm": {
      "version": "4.0.10"
    }
  }
}

(4)nlp-pact-provider提供端驗證契約

build配置如下:

<plugin>
    <groupId>au.com.dius</groupId>
    <artifactId>pact-jvm-provider-maven</artifactId>
    <version>4.0.0</version>
    <configuration>
        <serviceProviders>
            <!-- You can define as many as you need, but each must have a unique name -->
            <serviceProvider>
                <name>nlp-pact-provider</name>
                <!-- All the provider properties are optional, and have sensible defaults (shown below) -->
                <protocol>http</protocol>
                <host>localhost</host>
                <port>8200</port>
                <path>/</path>
                <pactFileDirectory>resources/pacts</pactFileDirectory>
            </serviceProvider>
        </serviceProviders>
        <pactBrokerUrl/>
    </configuration>
</plugin>

(5)運行命令:mvn pact:verify,驗證契約

Found 1 pact files

Verifying a pact between nlp-pact-consumer and nlp-pact-provider
  [Using File D:\IdeaProjects\nlp-other-project-dev\nlp-pact-parent\nlp-pact-provider\target\pacts\nlp-pact-consumer-nlp-pact-provider.json]
  Given a request for greeting with name 'John'
         WARNING: State Change ignored as there is no stateChange URL
  a request to greet John
    returns a response which
      has status code 200 (OK)
      has a matching body (OK)
[WARNING] Skipping publishing of verification results as it has been disabled (pact.verifier.publishResults is not 'true')
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.589 s
[INFO] Finished at: 2023-03-08T15:02:33+08:00
[INFO] --------

11.Pact Broker

Pact Broker是一個用于共享消費者驅動的合同和驗證結果的應用程序。

pact主頁面:

查看服務間關系:

與CICD集成:

12.總結

我在不少項目中都嘗試過實施契約測試,但是真正實施成功的并不多,主要原因還是規模和痛點不夠大,從而導致團隊覺得沒有必要做,或者覺得做了收益比投入少。而成功的一般的都是團隊人員足夠痛,或者經歷過大型多團隊項目中服務改變等各種痛點,從而導致他們解決自己的痛點而主動實施契約測試,但是前提是他們都知道契約測試。所以要成功實施契約都是有兩個主要的前提條件:1,團隊對于相關問題足夠痛,2,團隊懂契約測試。在這種情況下,團隊才可能愿意主動實施契約測試,才能成功的實施契約測試。所以首先是要讓開發團隊懂契約測試,比如契約測試能解決什么問題,實施流程,相關測試框架等,然后等待團隊無法忍受相關痛點后,成功的實施契約測試就可以水到渠成了。

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-09-20 07:31:40

CISOAPI安全安全基礎設施

2022-10-11 11:20:01

智能汽車技術

2017-04-25 07:41:18

2021-03-15 07:55:55

API網關微服務架構

2009-06-15 15:57:21

Spring工作原理

2016-11-02 13:35:26

2010-01-14 11:07:59

Visual C++

2010-02-04 14:27:11

2010-08-09 08:48:46

File APIWeb

2012-09-18 09:42:41

高效工作程序開發者

2019-12-03 11:00:08

spring bootspring-kafkJava

2011-08-09 16:13:23

數據中心APC浪涌保護器

2010-08-25 10:47:38

APC

2010-06-29 13:07:43

Google Font

2013-04-17 10:06:55

Google GlasMirror API

2019-08-01 14:44:31

云存儲安全網絡

2012-03-01 11:47:01

2021-06-21 09:00:00

Python代碼開發

2011-07-18 14:40:19

網康視頻會議

2009-11-09 16:25:24

WCF Data Co
點贊
收藏

51CTO技術棧公眾號

欧美情侣在线播放| 国产成人综合精品三级| 亚洲精品福利在线| 人妻精品无码一区二区三区| 黄色软件在线观看| 毛片不卡一区二区| 欧美肥老妇视频| 精品一区二区视频在线观看| 天天综合网天天| 亚洲欧洲成人自拍| 精品欧美国产一区二区三区不卡| 在线视频一区二区三区四区| 99视频精品全部免费在线视频| 欧美一区二区大片| 欧美亚洲视频在线看网址| 西西444www无码大胆| 日韩一级特黄| 五月激情综合网| 亚洲激情啪啪| 高清毛片aaaaaaaaa片| 欧美专区一区二区三区| 久久偷看各类女兵18女厕嘘嘘 | 免费观看在线午夜影视| 成人精品视频一区二区三区 | 日韩a级大片| 欧洲精品在线观看| www.av蜜桃| 一区二区三区视频在线观看视频| 大胆亚洲人体视频| 欧美国产精品日韩| 亚洲精品一区二区三区影院忠贞| 巨茎人妖videos另类| 成人成人成人在线视频| 国产精品日本精品| 日本视频www| 国产精品久久久久久久| 亚洲欧美制服综合另类| 妖精视频一区二区| 二区三区精品| 亚洲男帅同性gay1069| 欧美另类一区| 欧性猛交ⅹxxx乱大交| 韩国三级中文字幕hd久久精品| 亚洲午夜精品久久久久久久久久久久| 国产人妻精品久久久久野外| www.久久.com| 国产精品理论片在线观看| 久久精品日产第一区二区三区| 99热这里只有精品5| 久久精品国内一区二区三区| 日本成人在线视频网址| 日韩无码精品一区二区三区| 台湾佬综合网| 精品国产精品网麻豆系列| 中文字幕国产高清| 韩国理伦片久久电影网| 欧美性淫爽ww久久久久无| 国产中文字幕免费观看| 热色播在线视频| 亚洲国产精品精华液网站 | 欧美黄色aaaa| 精品国内亚洲在观看18黄| 1024在线看片| 欧美一区二区三区高清视频| 亚洲天堂网站在线观看视频| 免费看裸体网站| 国产一卡不卡| 亚洲人成网站999久久久综合| 不卡一区二区在线观看| 亚州综合一区| 国产视频精品xxxx| 久久久久久国产精品无码| 亚洲系列另类av| 国产婷婷色综合av蜜臀av| 日韩片在线观看| 一道在线中文一区二区三区| 亚洲人成电影网站| 国产精品久久久视频| 日韩精品一区二区久久| 精品国产区一区二区三区在线观看| 美女100%露胸无遮挡| 日韩精品1区| 久久精品美女视频网站| 欧美三级日本三级| 亚洲日韩成人| 国产成人91久久精品| 日韩成人短视频| 久久国产精品免费精品3p| 亚洲国产成人精品电影| 亚洲天堂成人av| 国产亚洲欧美日韩在线观看一区二区 | 日本熟妇乱子伦xxxx| 久久蜜桃精品| 国产精品专区h在线观看| 国产女人高潮毛片| 不卡av在线免费观看| 日本一区二区三区在线视频| 欧美高清视频| 亚洲一区二区黄色| 美女网站免费观看视频| 精品视频在线观看网站| 亚洲а∨天堂久久精品喷水| 久久只有这里有精品| 国产精品毛片久久| 国内精品久久久久久中文字幕| 国产成人无码专区| 悠悠资源网久久精品| 欧美在线视频在线播放完整版免费观看| 成人a v视频| 国产一区二三区| 久久av一区二区三区亚洲| 天天影视久久综合| 午夜亚洲福利老司机| 性生交免费视频| 日韩一区二区三区色 | 黄视频在线观看免费| 日韩美女啊v在线免费观看| 黄色一级视频片| 91蜜桃在线视频| 欧美高清在线一区二区| av在线免费观看国产| 日本另类视频| 精品卡一卡二卡三卡四在线| 卡一卡二卡三在线观看| 亚洲清纯自拍| 91视频国产一区| 蜜芽tv福利在线视频| 白白色亚洲国产精品| 日韩欧美精品一区二区三区经典| 欧美人与动牲性行为| 欧美日韩一区在线观看| 亚洲黄色在线网站| 狠色狠色综合久久| 韩剧1988免费观看全集| 一级片一区二区三区| 久久精品夜夜夜夜久久| 欧美重口乱码一区二区| 草莓视频丝瓜在线观看丝瓜18| 欧美色综合天天久久综合精品| 亚洲国产综合视频| 午夜国产精品视频| 国产精品高潮视频| 伊人亚洲综合网| 99精品国产99久久久久久白柏| 99中文字幕在线观看| 久操视频在线免费播放| 在线亚洲免费视频| 中文字幕一区二区三区人妻电影| 999在线观看精品免费不卡网站| 亚洲一区中文字幕| 理论片午午伦夜理片在线播放| 欧美综合久久久| 91网站免费视频| 免费永久网站黄欧美| 精品乱码一区| 国产h片在线观看| 精品免费一区二区三区| 久久r这里只有精品| 国产一区二区91| 国产精品亚洲天堂| 97精品资源在线观看| 久久精品人人爽| 国产女主播福利| 亚洲精品国产一区二区精华液| 小早川怜子一区二区三区| 天天揉久久久久亚洲精品| 成人国产在线视频| 大地资源网3页在线观看| 在线综合+亚洲+欧美中文字幕| 成人18视频免费69| 久久成人免费日本黄色| 综合操久久久| 麻豆国产一区二区三区四区| 欧美超级乱淫片喷水| 精品国产av一区二区| 亚洲午夜一区二区| 国产精品久久AV无码| 西西人体一区二区| 色就是色欧美| 亚洲天堂网站| 欧美福利视频网站| 少妇人妻精品一区二区三区| 欧美日韩另类在线| 人与嘼交av免费| 精品在线播放午夜| 亚洲 欧美 综合 另类 中字| 日韩欧美在线精品| 国产精品视频网站| 日韩三级电影视频| 国产午夜精品麻豆| 中文字幕在线观看国产| 一区二区三区在线免费观看| 亚洲激情 欧美| 日韩激情一二三区| 国内精品二区| 成人短视频在线| 亚洲成人激情在线| 中文字幕乱伦视频| 怡红院av一区二区三区| 丝袜美腿中文字幕| 精品一区二区三区日韩| 久久国产精品网| 欧洲乱码伦视频免费| 91精品国产综合久久久久久丝袜 | 91精品国产乱码久久久竹菊| 欧美一级片久久久久久久| 色的视频在线免费看| 欧美本精品男人aⅴ天堂| 免费看毛片网站| 亚洲蜜臀av乱码久久精品 | 久久久久久久久久久影院| 国产精品乱码一区二三区小蝌蚪| 无码人妻精品一区二区三区99不卡| 美女网站久久| 国产又粗又大又爽的视频| 亚洲传媒在线| 99re在线国产| jizz欧美| 亚洲欧洲第一视频| av一级黄色片| 色乱码一区二区三区88| 久久国产一级片| 中文字幕 久热精品 视频在线| 色悠悠在线视频| 蜜桃免费网站一区二区三区| 欧美在线一区视频| 亚洲成人最新网站| 日韩欧美三级一区二区| 99re8这里有精品热视频8在线| 国产精品大陆在线观看| 嗯~啊~轻一点视频日本在线观看| 精品国产一区二区三区久久狼黑人 | 先锋资源在线视频| 麻豆传媒一区二区三区| 欧在线一二三四区| 99精品久久久| 国产 欧美 日本| 国产精品88久久久久久| 日本午夜精品一区二区| 欧美电影在线观看完整版| 亚洲精品女av网站| 欧美黄页在线免费观看| 国产极品精品在线观看| 亚洲精品动漫| 国自产精品手机在线观看视频| а√天堂资源地址在线下载| 中文字幕视频在线免费欧美日韩综合在线看 | 加勒比精品视频| 成人午夜在线播放| 国产伦理在线观看| 国产成人亚洲综合色影视| 中文av字幕在线观看| 久久精品72免费观看| 国产又大又黄又粗又爽| 蜜桃av一区二区三区电影| 熟妇人妻无乱码中文字幕真矢织江 | 国产一区二区三区视频在线播放| 久久人人爽av| 狠狠色伊人亚洲综合成人| 亚洲欧美视频二区| 欧美一区成人| 在线观看日韩羞羞视频| 午夜国产一区二区| 超碰97免费观看| 中文无码久久精品| 成年人深夜视频| 国内精品美女在线观看| 无码av天堂一区二区三区| 激情久久综合| 国产精品无码一区二区在线| 亚洲尤物在线| 男人天堂成人在线| 蜜臀av在线播放一区二区三区| 黄色手机在线视频| 国产资源在线一区| wwwxx日本| 久久久久久综合| 国产又大又粗又爽的毛片| 亚洲国产精品传媒在线观看| 日韩一区二区三区四区视频| 免费观看久久av| 全部av―极品视觉盛宴亚洲| 亚洲午夜电影在线观看| 久久久精品视频在线观看| 日本精品性网站在线观看| 中文字幕在线观看第三页| 欧美jizz18性欧美| av资源网一区| 隔壁老王国产在线精品| 日韩精品一区二区免费| 精品少妇theporn| 国产黄色精品| 国产精品久久看| 鬼打鬼之黄金道士1992林正英| aaaaa级少妇高潮大片免费看| 黑人操亚洲女人| 成人涩涩网站| 91麻豆精品一区二区三区| 成人性生交大合| 精品免费视频| 亚洲深夜福利视频| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 操你啦视频在线| 激情综合亚洲| 这里只有精品电影| 超碰免费在线公开| 一区二区三区视频免费看| 国外成人福利视频| 91色婷婷久久久久合中文| 色婷婷综合久久久久| 日韩中文字幕视频在线| 成人国产一区二区三区| www.日本精品| 99久久这里有精品| 国产精品久久久久aaaa| 国产精品国语对白| 免费看的黄色网| а√在线中文网新版地址在线| 欧美aaaaa成人免费观看视频| 亚洲国产精品福利| 国产免费一区二区三区四在线播放| 69av.com| 免费一区二区三区四区| 亚洲欧洲国产日本综合| 日韩免费中文字幕| 18禁裸乳无遮挡啪啪无码免费| 九色porny丨国产首页在线| 美女任你摸久久| 一本一道久久a久久精品逆3p| 99久久人妻精品免费二区| 精精国产xxxx视频在线中文版 | 精品人妻一区二区三区换脸明星| 精品国产aⅴ| 91久久一区二区| 亚洲黄色成人久久久| 日韩欧美不卡视频| 久久wwww| 久久精品综合网| 91精品国产精品| a级在线观看视频| 国外成人福利视频| 亚洲乱码国产乱码精品精98午夜| 成年人免费观看视频网站| 污片在线观看一区二区| 亚洲精品久久久久avwww潮水| 亚洲精品成人天堂一二三| 中文字幕在线播放日韩| 一区二区欧美激情| avav成人| 艳色歌舞团一区二区三区| 免费成人你懂的| 国产视频精品免费| 678五月天丁香亚洲综合网| 黄av在线播放| av一本久道久久波多野结衣| 欧美理论在线| 一区二区三区少妇| 91久久精品一区二区三区| 9色在线观看| 亚洲影院色无极综合| 亚洲婷婷在线| 尤物视频最新网址| 欧美日韩一卡二卡三卡 | 国产丶欧美丶日本不卡视频| 免费在线一级片| 欧美mv日韩mv亚洲| 在线日韩影院| 亚洲7777| 丁香另类激情小说| 69成人免费视频| 日韩中文在线中文网在线观看| 国产精品成人**免费视频| 99在线精品免费视频| 久久一区二区三区四区| 亚洲天堂avav| 国产69精品久久久久99| 国产videos久久| 久久人人爽人人片| 欧美日韩亚洲91| 国产美女福利在线| 精品不卡在线| 精品亚洲国内自在自线福利| 2018天天弄| 亚洲欧美中文在线视频| 欧美黄色一级| 四虎永久在线精品无码视频| 中文字幕在线不卡国产视频| www精品国产| 国产精品99久久久久久人| 女人色偷偷aa久久天堂| 亚洲永久精品ww.7491进入| 欧美浪妇xxxx高跟鞋交| 日本午夜大片a在线观看| 亚洲一区二区三区欧美| 不卡免费追剧大全电视剧网站| 中文字幕视频在线播放| 国内揄拍国内精品少妇国语| 久久精品国产www456c0m| 精品少妇人妻av一区二区三区| 欧美视频中文字幕|