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

客戶端單元測試實踐-C++篇

開發 新聞
本文主要分享團隊在做單元測試中遇到的問題與解決思路,希望能對大家所有幫助。

背景

我們團隊在淘寶中主要負責BehaviX模塊,代碼主要是一些邏輯功能,很少涉及到UI,為了減少雙端不一致問題、提高性能,我們采用了將核心代碼C++化的策略。由于團隊項目偏底層,測試同學難以完全覆蓋,回歸成本較高,部分功能依賴研發同學自測,為了提高系統的穩定性,我們在團隊中實行了單元測試,同時由于集團客戶端C++單元測試相關經驗沉淀較少,所以在此分享下團隊在做單元測試中遇到的問題與解決思路,希望能對大家所有幫助。

?  為什么要使用單元測試

1、運行快

如果由測試同學手工測試,可能測試周期很長,對于功能比較復雜的功能,測試同學可能并不能完整覆蓋所有預期鏈路,也可能由于某些操作而錯過一些關鍵性步驟。

2、減少回歸成本

使用單元測試,可以在每次修改代碼后重新運行整套測試,盡可能保證新代碼不會破壞現有功能。

3、優化代碼結構

當代碼耦合度非常大時,可能很難進行單元測試。為代碼編寫測試將自然地按照預期功能分離你的類。

單測工程搭建歷程

?  單測環境搭建

  • 運行環境的選擇

C++工程由于一些三方庫的依賴(需要準備多個平臺的鏈接庫),同一份代碼想要在不同操作系統上運行稍微有點困難。

為了能夠讓單測工程快速運行起來,同時也方便開發同學調試,兼顧Android/iOS同學的開發習慣,在運行環境上支持單測支持在MacOS和Linux下運行。

  • 依賴剝除

由于單測環境是運行在電腦環境的,所以必須要把一些外部依賴去除。

Java/OC的API依賴

涉及到跨語言通信時,通過NativeBridge封裝,內部通過宏或cpp文件鏈接區分Android和iOS環境

圖片

外部庫的依賴

一般采取源碼依賴或打出多平臺鏈接庫(需要MacOS和Linux版本的依賴)的依賴方式解決。

?  單測框架

目前業內C++主流單測框架為google的gtest + gmock。

gtest提供了一些單元測試中的斷言工具,gmock提供了一些mock功能,但是功能比較弱。

?  MOCK工具

gtest提供的gmock工具功能比較弱,只能通過繼承的方式mock虛函數,對于C++來說是極其不方便的。

在Java中,成員方法是默認可以被派生類重寫的,java主流mock工具mockito正是利用了這一特性來完成mock操作。在C++中,所有函數默認是不能被重寫的,而且存在一些靜態函數和工具函數,無法通過繼承重寫的方式完成mock。

最終我們基于開源的hook工具 frida (地址:https://github.com/frida/frida)進行封裝,實現了自己的mock工具。


frida

gmock

普通成員函數

?

?

虛函數

?

?

靜態函數

?

?

final函數

?

?

無需為mock重構代碼

?

?

?  部署到服務器運行

  • 依賴安裝

為了使單測工程和其他系統打通(如:釘釘群、Aone),單測工程同時也支持在Linux環境中運行。

因為C++語言的特殊性,從本機環境(MacOS)遷移到Linux并不是一帆風順的。

集團的服務端機器使用的是CentOS,而且只能下載內網環境中已有的軟件,版本也比較老,而且集團機器對C++的環境支持稍弱,如:編譯器不支持C++11語法,CMake版本低,沒有Clang編譯器等。

所以大部分依賴我們都是通過源碼的形式導入到服務端機器中,編譯出可執行文件安裝。

  • 依賴安裝

為了使單測工程和其他系統打通(如:釘釘群、Aone),單測工程同時也支持在Linux環境中運行。

因為C++語言的特殊性,從本機環境(MacOS)遷移到Linux并不是一帆風順的。

集團的服務端機器使用的是CentOS,而且只能下載內網環境中已有的軟件,版本也比較老,而且集團機器對C++的環境支持稍弱,如:編譯器不支持C++11語法,CMake版本低,沒有Clang編譯器等。

所以大部分依賴我們都是通過源碼的形式導入到服務端機器中,編譯出可執行文件安裝。

?  外圍功能建設

  • 覆蓋率

單測代碼覆蓋率

通過增加編譯參數 -fprofile-arcs 和 -ftest-coverage,在編譯完成后每個源文件會生成對應的.gcno文件,在程序運行結束時會生成.gcda文件,然后可以在單元測試運行完成后,使用lcov/gcov,統計代碼運行的覆蓋率。

注意,推薦使用動態鏈接的方式將你的待測工程庫鏈接到每個測試用例中,如果使用靜態鏈接,在單元測試運行完成后可能會有一些沒有被任何用例覆蓋到的文件沒有生成.gcda文件,在計算代碼覆蓋率時這些源文件會被遺漏。

增量代碼覆蓋率

使用git merge-base可以獲取兩次提交最佳的公共祖先。

圖片

拿到最佳公共祖先與當前節點的提交記錄,通過git diff和git blame,就可以獲得兩次提交的增量代碼行,結合代碼覆蓋率可以計算出增量代碼覆蓋率。

  • 內存泄漏檢查

C++代碼很容易寫出內存泄漏,所以我們在單測工程中集成了valgrind工具,能有效的檢測出內存泄漏的代碼。

下面是一個簡單的示例

圖片

  • 釘釘群播報

每次代碼合并到develop分支的時候,釘釘群中會播報本次測試的通過率以及代碼覆蓋率與上次合并時時差值等信息,方便大家及時修復問題,通過覆蓋率增長差值也可以調動團隊寫單測的積極性。

  • code review卡口

在提交code review時,大家可以看到本次代碼的單測通過率、單測覆蓋率、增量覆蓋率等信息,如果單元測試運行沒有通過,或增量覆蓋率卡口未通過(目前團隊中要求增量單測覆蓋率達到90%),則不允許合并代碼。

圖片

單元測試實踐

?  如何編寫有效的單元測試用例

  • 單元測試的組成部分

一般單元測試由以下幾部分組成

  1. 測試數據:盡可能穩定,減少對不確定性因素的依賴
  2. 邏輯執行體:要明確當前測試用例測試的是哪個函數、哪個分支邏輯,不要一次性覆蓋大多
  3. 結果校驗:盡可能完整,不要只校驗函數返回值

  • 單元測試的原則

單元測試必須遵循的原則:

  1. 獨立性:單元測試是獨立的,可以單獨運行,并且不依賴于任何外部因素,如文件系統或數據庫。
  2. 冪等性:每次運行單元測試應與其結果一致,測試中不要依賴如時間、日期等不確定因素
  3. 快速:不要依賴網絡請求等耗時操作

  • 經驗小結

編寫單元測試時建議從以下角度思考

  1. 實現什么功能,處理哪些數據,最終輸出什么?
  2. 異常和邊界在哪里?
  3. 函數的關鍵結果是否都驗證到?包含返回值和中間值。
  4. 函數的風險在哪里,哪部分邏輯不太自信,最容易出錯
  5. 并不是所有函數都需要單測,如get/set等邏輯比較簡單的的,不一定需要寫 。

?  提高代碼的可測試性

C++是一門多范式的語言,而且由于C+語言本身的一些特性(RAII,模板等),網上很多基于Java等語言總結出來的提高可測試性的方法對C++來說可能過于麻煩,如依賴注入等,不一定特別適用。

下面整理了一些簡單常用能提高可測試性的方式。

  • 影響可測試性的常見因素

外部依賴過多,需要mock

數據依賴鏈過長,導致構造測試數據麻煩

分支邏輯過于復雜

全局變量/靜態變量

內部lambda表達式過多

依賴的類對象不可構造/難以構造

函數功能過多

  • 減少全局變量/靜態變量的使用

如果你的對象依賴了一些全局變量/靜態變量,而且這些全局變量會在多個測試case使用,這種情況是比較難測試的,你不得不在每個測試用例結束之后手動重置全局變量。這樣不符合單測測試的獨立性原則,所以應該盡量避免使用全局變量。

class MyTest {
public:

int GetIndex() {
return index++;
}

static int index; //靜態變量
};

int MyTest::index = 0;

TEST(test, demo) {
ASSERT_EQ(0, MyTest().GetIndex());
}

TEST(test, demo2) {
ASSERT_EQ(0, MyTest().GetIndex()); //Error
}
TEST(test, demo) {
MyTest::index = 0;
ASSERT_EQ(0, MyTest().GetIndex());
}

TEST(test, demo2) {
MyTest::index = 0;
ASSERT_EQ(0, MyTest().GetIndex());
}
  • 迪米特法則

如果你代碼中引入一些復雜的外部依賴,可以考慮將依賴轉移給調用方

如:

class MyClass {
public:
void doSomething() {
if(getUserManager().getUser(123).getProfile().isAdmin()) { //bad 復雜的依賴鏈
//xxxx
} else {

}
}
};
class MyClass {
public:
void doSomething(bool isAdmin) { //簡單的參數依賴
if(isAdmin) {
//xxxx
} else {

}
}
};

直接依賴需要的參數,避免依賴類似于Context大而全的參數(可能非常難以構造)

如:

class MyClass {
public:

void processOrderBefore(const UserContext & userContext) { //修改之前
const User & user = userContext.getUser();
const PlanLevel & level = userContext.getLevel();
const Order & order = userContext.getOrder();

// ... process
}

void processOrderAfter(const UserContext & userContext) { //修改后
const User & user = userContext.getUser();
const PlanLevel & level = userContext.getLevel();
const Order & order = userContext.getOrder();

processOrderAfter(user, level, order); //核心邏輯抽成新的函數
}

void processOrderAfter(const User & user, const PlanLevel & level,const Order & order) {
//只需要對新封裝函數進行單元測試即可
// ... process
}
};
  • 封裝分支邏輯

如果一個函數中分支太多,可以考慮將不同分支封裝成不同的函數處理,然后對封裝的函數分別編寫單元測試用例。

  • 合理使用MOCK工具

考慮在以下場景使用mock工具,可以減少你的單元測試成本

  1. 代碼中依賴的某個功能在你本次測試并不關心,如:db數據讀取,發請求
  2. 測試用例依賴一些復雜的數據源,如:db數據讀取,流水線上游數據,網絡請求
  3. 一些非冪等性的函數調用或者結果返回不穩定的函數調用,如:隨機數獲取,時間獲取,db寫入
  4. 對象的某些狀態難以創建或者重現,如:網絡錯誤或者文件讀寫錯誤
  5. 驗證一些中間過程值,如:你的函數沒有返回值,或者中間過程值不方便驗證,可以mock中間某個函數調用來驗證中間過程結果是否正確

  • 嘗試測試驅動開發(TDD)

如果你的需求所要實現的功能相對明確,那么可以先把接口定義出來,寫一個最簡單的實現運行起來,為其補充單元測試用例,然后再一步步完善具體實現細節。

如果不能先寫測試用例也沒關系,重要的是在開發中盡早編寫測試測試,不要將它們延遲到最后,這樣可以及時重構你的代碼。

圖片

?  常見誤區

  • 只測試正常數據

應當盡量補充一些特殊值(如空值、邊界值)或異常數據,以校驗目標函數在不同的輸入是否符合預期,盡量覆蓋多的代碼分支邏輯。

  • 結果校驗不完整

如果你的目標測試函數中對屬性進行了修改,那么應該盡可能校驗這些修改是否符合預期,而不是單單只校驗函數返回值。

  • 輸入數據過于復雜

  1. 生成測試輸入數據的代碼應當避免與實際工程代碼耦合,如:讀取db或從流水線上游產生等
  2. 使用最小數據依賴的原則,只輸入對當前測試用例會產生影響的數據即可。
  3. 如果數據源構造過于復雜,可以將一個大的測試用例拆分成多個小的測試用例。

  • 測試代碼存在分支條件

避免測試用例代碼中使用if、switch等分支邏輯,保持用例盡量簡單,如果需要測試不同分支的代碼邏輯,應該拆分成多個測試用例。

?  維護測試用例

  1. 重構代碼時,應該同步修改測試用例
  2. 發現新增Bug時,應當將能驗證此Bug被修復的測試用例的補充到單元測試工程中

?  測試用例命名規則參考

TEST_F(TestUCPPipelineCenter, checkTaskInProcess_重復觸發_true);
測試宏 被測試類名, 被測試函數名_簡單描述核心測試邏輯_要校驗的結果值

小結

我們小組的單元測試工程已經穩定運行了一段時間,代碼提交流程也逐步固化下來了,如下圖所示。后續我們會尋找一些指標去量化衡量單元測試所帶來的收益。希望本文能幫助大家更加快捷地搭建C++單元測試環境,限于本人水平,如有不足或錯誤之處歡迎批評指正。

圖片


責任編輯:張燕妮 來源: 大淘寶技術
相關推薦

2010-01-15 14:10:42

C++單元測試

2022-04-08 09:01:56

腳本Go應用單元

2010-01-13 09:38:17

C++單元測試

2012-06-18 10:03:46

Visual Stud

2017-02-21 10:30:17

Android單元測試研究與實踐

2017-01-14 23:42:49

單元測試框架軟件測試

2014-04-24 13:43:37

CC++單元測試框架

2011-08-22 13:57:55

gtest

2010-01-12 16:12:47

C++單元測試

2022-05-26 10:13:22

C/C++GCC插件單元測試

2011-11-18 15:18:41

Junit單元測試Java

2009-09-01 16:35:16

C#單元測試

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2023-04-24 18:38:27

2020-08-18 08:10:02

單元測試Java

2024-08-15 08:11:10

2012-10-29 09:45:52

單元測試軟件測試測試實踐

2017-03-23 16:02:10

Mock技術單元測試

2021-05-05 11:38:40

TestNGPowerMock單元測試
點贊
收藏

51CTO技術棧公眾號

韩国中文免费在线视频| 国产伦精品一区二区三区视频网站| 国产精品美女一区| 亚洲电影在线| 亚洲片在线资源| 成年人三级黄色片| 超碰在线观看免费版| www.日韩av| 国产欧美一区二区三区视频| 日本一级黄色录像| 久久国产电影| 亚洲国产精品电影| 午夜视频在线网站| 韩国久久久久久| 一区二区三区在线观看视频| 日本在线播放一区| 蜜桃av噜噜一区二区三区麻豆| 五月天久久网站| 亚洲精品白浆高清久久久久久| 天堂av在线中文| 欧美成人免费| 国产精品羞羞答答xxdd| 国产成人精品在线| 精品伦精品一区二区三区视频| 国内外成人激情视频| 国产精品一区二区三区四区色| 亚洲免费网站| 欧美成人精品一区二区| 亚洲午夜久久久久久久国产| 成人精品毛片| 欧美一区二区在线免费播放| 999在线免费视频| 波多野结衣中文在线| 综合亚洲深深色噜噜狠狠网站| 成人a在线视频| 中文字幕在线观看视频免费| 亚洲精品婷婷| 久久久久久久一区二区三区| 久久人妻无码aⅴ毛片a片app| 国产精品国产亚洲精品| 在线观看免费亚洲| 免费日韩视频在线观看| 嗯啊主人调教在线播放视频| 亚洲一区二区三区影院| 91精品一区二区三区四区| 日韩精品成人av| 国产精品午夜电影| 亚洲韩国在线| 色开心亚洲综合| 国产精品无遮挡| 一本色道久久99精品综合| 国产精品视频一区二区久久| 国产日韩欧美在线一区| 日本成人黄色免费看| 国产主播福利在线| 国产欧美一区二区精品性| 日本在线一区| 自拍视频在线| 亚洲男人的天堂一区二区 | 欧美大片免费| 欧美丝袜第一区| 亚洲人成无码www久久久| 日韩精品99| 在线观看网站黄不卡| 波多野结衣天堂| av成人免费| 欧美一区二区在线不卡| 蜜桃视频无码区在线观看| 国产美女撒尿一区二区| 国产视频久久久久久久| 蜜桃无码一区二区三区| 日韩精品中文字幕第1页| 俺去了亚洲欧美日韩| 91日韩中文字幕| 影音国产精品| 日韩美女写真福利在线观看| 影音先锋国产在线| 国产精品一区二区三区乱码| 不卡日韩av| 青青草超碰在线| 国产精品久久久久久久久快鸭| 激情视频一区二区| 欧美女子与性| 中文字幕一区二区三区在线播放| 久久久久久国产精品免费免费| 91丨porny丨在线中文| 国产精品一二一区| 欧美视频观看一区| 成人影院在线观看| 色综合久久天天| 国产性生活一级片| 久久动漫网址| 久久精品最新地址| 日韩欧美激情视频| 人人精品人人爱| 风间由美久久久| 国产日本在线视频| 一区二区激情小说| www.日日操| 成人h动漫精品一区二区器材| 日韩午夜av一区| 88久久精品无码一区二区毛片| 精品福利网址导航| 日韩在线观看免费av| 久久久久性色av无码一区二区| 色爱综合网欧美| 欧美高跟鞋交xxxxxhd| 成人一级免费视频| 波多野结衣精品在线| 中文字幕一区二区三区有限公司| 91xxx在线观看| 午夜亚洲福利老司机| 日日干夜夜操s8| 亚洲精品亚洲人成在线| 欧美成年人网站| 伊人亚洲综合网| 99国产精品视频免费观看| 亚洲黄色网址在线观看| 成人黄色免费短视频| 亚洲精品一区二区三区蜜桃下载| 中文字幕乱码一区| 一区二区三区毛片免费| 国产成人精品一区二区三区| 午夜性色福利视频| 亚洲图片一区二区| 中文字幕无码毛片免费看| 成人av动漫在线观看| 国产suv精品一区二区| 免费成人在线看| 亚洲综合色区另类av| 国产精欧美一区二区三区白种人| 视频欧美一区| 久久精品国产v日韩v亚洲| 亚洲精品毛片一区二区三区| 99久久综合99久久综合网站| 日b视频免费观看| 日韩激情精品| 欧美大码xxxx| 亚洲va天堂va欧美ⅴa在线| 亚洲精品中文在线| 亚洲精品久久久久久| 一二三区不卡| 高清视频一区二区三区| av中文字幕在线观看| 日韩一级黄色大片| 欧美成人综合色| 国产99久久久国产精品潘金| 日韩国产小视频| 91蝌蚪精品视频| 欧美极品欧美精品欧美视频| 男人天堂网在线视频| 亚洲午夜精品在线| 亚洲一区和二区| 亚洲久久在线| 久久精彩视频| 欧美精品资源| 日韩中文字幕在线看| 国产精品久久久久久免费| 亚洲三级理论片| 国产成人精品综合久久久久99 | 国产综合色区在线观看| 亚洲欧美激情一区| 一级久久久久久| 自拍视频在线观看一区二区| 一级黄色免费毛片| 1000部精品久久久久久久久| 久久综合九色综合久99| 黄色成人免费网| 中文字幕欧美日韩va免费视频| 国产精久久久久久| 26uuu国产电影一区二区| 欧美私人情侣网站| 久久中文亚洲字幕| 51国偷自产一区二区三区的来源 | 亚洲国产精品三区| 先锋资源久久| 国产精品大全| 麻豆精品蜜桃| 欧美黄色三级网站| 黄视频在线观看免费| 717成人午夜免费福利电影| 久久久一二三区| 国产性天天综合网| 青娱乐精品在线| 午夜综合激情| 一级黄色录像免费看| 欧美日韩一本| 成人妇女淫片aaaa视频| 蜜桃视频在线网站| xxx欧美精品| 五月天激情开心网| 在线观看91精品国产麻豆| 日本一区二区三区免费视频| 国产精品视频观看| 亚洲熟女一区二区| 久久aⅴ国产欧美74aaa| 免费不卡av在线| 成人区精品一区二区婷婷| 国产精品成人观看视频免费| 国产精品亲子伦av一区二区三区| 亚洲视屏在线播放| 亚洲不卡免费视频| 欧美日韩中字一区| 丰满少妇乱子伦精品看片| 国产精品久久毛片av大全日韩| 亚洲天堂av线| 亚洲精品1234| 免费成人进口网站| 欧美最新另类人妖| 久久久久国产精品视频| 日韩精品一区国产| 国产精品久久久久久超碰| 999福利在线视频| 久久不射电影网| 91精彩在线视频| 亚洲人成免费电影| 午夜性色福利视频| 精品国偷自产国产一区| 国产绿帽刺激高潮对白| 欧美影院精品一区| 在线观看免费av片| 亚洲va欧美va人人爽午夜| 极品色av影院| 亚洲国产成人一区二区三区| 国产美女精品久久| 99久久99久久久精品齐齐| 日批视频免费看| 国产真实精品久久二三区| 成人亚洲视频在线观看| 久久久www| 精品中文字幕av| 99热在线精品观看| 欧日韩免费视频| 狠狠爱综合网| 欧美在线观看黄| 欧美福利专区| 蜜臀av.com| 欧美一区成人| 9191国产视频| 国产精品a久久久久| 肉大捧一出免费观看网站在线播放| 久久99国产精品久久99大师| 91久久国产自产拍夜夜嗨| 国产aa精品| 亚洲一区亚洲二区| 亚洲精品影片| 国产精品国产精品国产专区蜜臀ah | 精品女同一区二区三区在线播放| 日本高清www| 久久女同性恋中文字幕| 加勒比精品视频| 久久这里只精品最新地址| 一级片手机在线观看| 久久久99久久| 欧美亚洲色综久久精品国产| 国产精品每日更新在线播放网址| 手机免费看av片| 94色蜜桃网一区二区三区| 好吊日免费视频| 国产欧美视频一区二区三区| www中文在线| 一区二区三区在线观看国产| 免费网站看av| 欧美日韩加勒比精品一区| 免费又黄又爽又猛大片午夜| 欧美三级资源在线| 99久久夜色精品国产亚洲| 精品国产乱码久久| 暖暖视频在线免费观看| 日日骚久久av| 色yeye免费人成网站在线观看| 永久免费毛片在线播放不卡| 18视频免费网址在线观看| 国产一区二区三区18| 色三级在线观看| 日韩精品中文字| 91se在线| 欧美高清不卡在线| 高清电影一区| 7777精品久久久大香线蕉小说| jizzyou欧美16| 97神马电影| 国产精品午夜一区二区三区| 亚洲欧美久久久久一区二区三区| 狠狠色狠狠色综合婷婷tag| 樱花www成人免费视频| 欧美日韩亚洲一区三区| 欧美牲交a欧美牲交aⅴ免费下载| 999在线观看精品免费不卡网站| 好色先生视频污| 亚洲欧美清纯在线制服| 在线观看av免费观看| 26uuu亚洲婷婷狠狠天堂| 亚洲不卡在线播放| 欧美日韩精品二区| 亚洲av无码片一区二区三区| 亚洲色图第三页| a'aaa级片在线观看| 国产精品精品久久久| 国产在线播放精品| 亚洲综合五月天| 亚洲综合99| 日韩欧美中文在线视频| 久久久精品日韩欧美| 免费一级a毛片夜夜看| 欧美撒尿777hd撒尿| 日韩有码电影| 久久久欧美一区二区| 免费一区二区三区四区| 久久亚洲国产精品日日av夜夜| 亚洲深夜福利在线观看| 日本福利视频在线观看| 精品一区二区三区免费播放| 风间由美一二三区av片| 亚洲免费在线观看| 亚洲中文无码av在线| 亚洲免费一级电影| 成人超碰在线| 999精品在线观看| 国产精品久久久久久| 成人亚洲精品777777大片| 久久久噜噜噜久久人人看| 国产91av视频| 日韩精品资源二区在线| 里番在线观看网站| 国产97在线播放| 日本福利一区| 亚洲 欧美 日韩 国产综合 在线| 老司机午夜免费精品视频 | 亚洲成av在线| 国产一区二区高清不卡| 国产综合精品| 日本黄色www| 亚洲色图.com| 99久久免费国产精精品| 久久精品91久久香蕉加勒比| 欧美极品在线| 亚洲精品一区二区三区樱花 | 久久久国产一区二区| 日韩在线短视频| 欧美日韩一区在线观看视频| 欧美亚洲专区| 成人乱码一区二区三区av| 欧美日韩在线第一页| 日本在线视频1区| 日本久久久久久久久| 怕怕欧美视频免费大全| 男人女人黄一级| 国产精品麻豆网站| 国产精品熟女久久久久久| 久久久99免费视频| 日韩在线观看中文字幕| 男人添女人荫蒂免费视频| 粉嫩一区二区三区在线看 | 亚洲一区二区三区在线播放| 国产黄色片网站| 久久青草福利网站| 国产精品视频3p| 日本精品免费在线观看| 久久久无码精品亚洲日韩按摩| 日本一级二级视频| 欧美一级视频精品观看| av在线加勒比| 欧美日韩在线观看一区| 麻豆91在线播放| 欧美成人aaa片一区国产精品| 欧美性欧美巨大黑白大战| 日韩毛片久久久| 国产精品免费一区二区三区四区| 日本欧美肥老太交大片| 欧美激情第一区| 五月天欧美精品| 福利视频在线导航| 亚洲最大福利网站| 午夜亚洲性色视频| 少妇高潮一区二区三区喷水| 欧美变态凌虐bdsm| 成人动漫一区| 精品一区二区成人免费视频| 99精品视频在线播放观看| 国产偷人爽久久久久久老妇app | 欧美老熟妇乱大交xxxxx| 欧美午夜不卡在线观看免费| 国产三级在线播放| 精品一区2区三区| 麻豆传媒一区二区三区| 国产精品美女毛片真酒店| 日韩中文第一页| 精品久久ai| 天堂在线精品视频| 欧美视频在线免费看| 在线视频国产区| 欧洲精品亚洲精品| 国产成人av电影在线观看| 亚洲av无码精品一区二区| 久久91精品国产91久久跳| 欧美一区2区| 老熟妇精品一区二区三区| 在线不卡免费欧美| 成人爽a毛片免费啪啪|