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

為Bash腳本寫單元測試

系統 Linux 測試
因為 Bash 腳本通常都是在執行一些與操作系統有關的操作,可能會對運行環境造成一些不可逆的操作,比如修改或者刪除文件、升級系統中的軟件包等。

[[341778]]

為什么要為 Bash 腳本寫單元測試?

因為 Bash 腳本通常都是在執行一些與操作系統有關的操作,可能會對運行環境造成一些不可逆的操作,比如修改或者刪除文件、升級系統中的軟件包等。

所以為了確保 Bash 腳本的安全可靠,在生產環境中部署之前一定需要做好足夠的測試以確保其行為符合我們的預期。

如何能夠安全可靠的去測試 Bash 腳本呢?有人可能會說我們可以用 Docker 容器。是的,這樣做即安全又方便。在容器隔離出來的環境中不用擔心腳本會破壞我們的系統,而且也能非常簡單的快速重建出一個可用的測試環境。不過呢,請考慮以下的幾個常見的場景:

  • 場景一:在執行 Bash 腳本測試前,我們需要需要事先安裝好所有在 Bash 腳本中會用到的第三方工具,否則這些測試將會因為命令找不到而執行失敗。例如,我們在腳本中使用了 Bazel 這個構建工具。我們必須提前安裝并配置好 Bazel,而且不要忘記為了能夠正常使用 Bazel 還得需要一個支持使用 Bazel 構建的工程。
  • 場景二:測試結果的穩定性可能取決于腳本中訪問的第三方服務的穩定性。比如,我們在腳本中使用 curl 命令從一個網絡服務中獲取數據,但這個服務有時候可能會訪問失敗。有可能是因為網絡不穩定導致的,也可能是因為這個服務本身不穩定。再或者如果我們需要第三方服務返回不同的數據以便測試腳本的不同分支邏輯,但我們可能很難去修改這個第三方服務的數據。
  • 場景三:Bash 腳本的測試用例的執行時間取決于腳本中使用的命令的執行時間。例如,如果我們中腳本中使用了 Gradle 來構建一個工程,由于不同的工程大小 Gradle 的一個構建可能要執行3分鐘或者3個小時。這還只是一個測試用例,如果我們還有20個或者100個測試用例呢?我們是否還能在幾秒內獲得測試報告呢?

即使使用了容器來執行 Bash 腳本測試,也一樣無法避免上面的幾個問題。環境的準備過程可能會隨著測試用例的增多而變的繁瑣,測試用例的穩定性和執行時長取決于第三方命令和服務的穩定性和執行時長,還可能很難做到使用不同數據來覆蓋不同的測試場景。

對于測試 Bash 腳本來說,我們真正要驗證的是 Bash 腳本的執行邏輯。比如在 Bash 腳本中可能會根據傳入的參數來組合出內部所調用的命令的選項和參數,我們要驗證的是這些選項和參數確實如我們預期的。至于調用的命令在接受了這些選項和參數后由于什么原因而失敗,可能我們并不關心這所有的可能原因。

因為這會有更多的外部影響因素,比如硬件和網絡都是否工作正常、第三方服務是否正常運行、構建工程所需的編譯器是否安裝并配置妥當、授權和認證信息是否都有效、等等。但對于 Bash 腳本來說,這些外部原因導致的結果就是所調用的命令執行成功或者失敗了。所以 Bash 腳本只要關注的是腳本中調用的命令是否能夠成功執行,以及命令輸出了哪些,并決定隨后執行腳本中的哪些不同分支邏輯。

如果說我們就是想知道這個命令搭配上這些選項參數是否能按我們預期的那樣工作呢?很簡單,那就單獨在命令行里面去執行一下。如果在命令行中也不能按預期的工作,放到 Bash 腳本里面也一樣不會按預期的工作。這種錯誤和 Bash 腳本幾乎沒什么關系了。所以,為了盡量去除影響 Bash 腳本驗證的那些外部因素,我們應該考慮為 Bash 腳本編寫單元測試,以關注在 Bash 腳本的執行邏輯上。

什么樣的測試才是 Bash 腳本的單元測試?

首先,所有存在于 PATH 環境變量的路徑中的命令都不應該在單元測試中被執行。對 Bash 腳本來說,被調用的這些命令可以正常運行,有返回值,有輸出。但腳本中調用的這些命令都是被模擬出來的,用于模擬對應的真實命令的行為。這樣,我們在 Bash 腳本的單元測試中就避免了很大一部分的外部依賴,而且測試的執行速度也不會受到真實命令的影響了。其次,每個單元測試用例之間都應該是獨立的。這意味著,這些測試用例可以獨立執行或者被任意亂序執行,而不會影響驗證結果。最后,這些測試用例可以在不同的操作系統上執行,且都應該得到相同的驗證結果。比如 Bash 腳本中使用了只有 GNU/Linux 上才有的命令,對應的單元測試也可以在 Windows 或者 macOS 上執行,且結果一致。

怎樣為 Bash 腳本寫單元測試?

與其他編程語言一樣,Bash 也有多個測試框架,比如 Bats、Shunit2 等,但這些框架實際上并不能隔離所有 PATH 環境變量中的命令。有一個名為 Bach Testing Framework 的測試框架是目前唯一一個可以為 Bash 腳本編寫真正的單元測試的框架。Bach Testing Framework 的最獨特的特性就是默認不會執行任何位于 PATH 環境變量中的命令,因此 Bach Testing Framework 非常適用于驗證 Bash 腳本的執行邏輯。并且還帶來了以下好處:

  • 簡單

什么也不用安裝。我們就可以執行這些測試。比如可以在一個全新的環境中執行一個調用了大量第三方命令的 Bash 腳本。

因為所有的命令都不會被真正執行,所以每一個測試用例的執行都非常快。

  • 安全

因為不會執行任何外部的命令,所以即使因為 Bash 腳本中的某些錯誤導致執行了一個危險的命令,比如 rm -rf *。Bach 會保證這些危險命令不會被執行。

  • 與運行環境無關

可以在 Windows 上去執行只能工作在 GNU/Linux 上的腳本的測試。

由于操作系統和 Bash 的一些限制,Bach Testing Framework 無法做到:

  • 攔截使用絕對路徑調用的命令

事實上我們應該避免在 Bash 腳本中使用絕對路徑,如果不可避免的要使用,我們可以把這個絕對路徑抽取為一個變量,或者放入到一個函數中,然后用 @mock API 去模擬這個函數。

  • 攔截諸如 >、>>、<< 等等這樣的 I/O 重定向

是的,無法攔截 I/O 重定向。我們也同樣可以把這些重定向操作隔離到一個函數中,然后再模擬這個函數。

Bach Testing Framework 的使用

Bach Testing Framework 需要 Bash v4.3 或更高版本。在 GNU/Linux 上還需要 Coreutils 和 Diffutils,在常用的發行版中都已經默認安裝好了。Bach 在 Linux/macOS/Cygwin/Git Bash/FreeBSD 等操作系統或者運行環境中驗證通過。

  • Bash v4.3+
  • Coreutils (GNU/Linux)
  • Diffutils (GNU/Linux)

安裝 Bach Testing Framework

Bach Testing Framework 的安裝很簡單,只需要下載 https://github.com/bach-sh/bach/raw/master/bach.sh 到你的項目中,在測試腳本中用 source 命令導入 Bach Testing Framework 的 bach.sh 即可。

比如:

 

  1. source path/to/bach.sh 

一個簡單的例子

與其它的測試框架不同,Bach Testing Framework 的每一個測試用例都是由兩個 Bash 函數組成,一個是以test- 開頭的測試執行函數,另一個是同名的以-assert 結尾的測試驗證函數。比如在下面的例子中,有兩個測試用例,分別是

 

  1. – test-rm-rf  
  2. – test-rm-your-dot-git 

 

一個完整的測試用例:

 

  1. #!/usr/bin/env bash 
  2. set -euo pipefail 
  3.  
  4. source bach.sh # 導入 Bach Testing Framework 
  5.  
  6. test-rm-rf() { 
  7.     # Bach 的標準測試用例是由兩個方法組成 
  8.     #   - test-rm-rf 
  9.     #   - test-rm-rf-assert 
  10.     # 這個方法 `test-rm-rf` 是測試用例的執行 
  11.  
  12.     project_log_path=/tmp/project/logs 
  13.     sudo rm -rf "$project_log_ptah/" # 注意,這里有個筆誤!} 
  14. test-rm-rf-assert() { 
  15.     # 這個方法 `test-rm-rf-assert` 是測試用例的驗證 
  16.     sudo rm -rf /   # 這就是真實的將會執行的命令 
  17.                     # 不要慌!使用 Bach 測試框架不會讓這個命令真的執行!} 
  18.  
  19. test-rm-your-dot-git() { 
  20.     # 模擬 `find` 命令來查找你的主目錄下的所有 `.git` 目錄,假設會找到兩個目錄 
  21.  
  22.     @mock find ~ -type d -name .git === @stdout ~/src/your-awesome-project/.git \ 
  23.                                                 ~/src/code/.git 
  24.  
  25.     # 開始執行!刪除你的主目錄下的所有 `.git` 目錄!find ~ -type d -name .git | xargs -- rm -rf 
  26. test-rm-your-dot-git-assert() { 
  27.     # 驗證在 `test-rm-your-dot-git` 這個測試執行方法中最終是否會執行以下這個命令。rm -rf ~/src/your-awesome-project/.git ~/src/code/.git 

Bach 會分別運行每一個測試用例的兩個方法,去驗證兩個方法中執行的命令及其參數是否是一致的。

比如,第一個方法 test-rm-rf 是 Bach 的測試用例的執行,與之對應的測試驗證方法就是 test-rm-rf-assert這個方法。

在第二個測試用例 test-rm-your-dot-git中使用了 @mockAPI 來模擬了命令find ~ type d -name .git的行為,這個命令用來找出用戶目錄下的所有 .git 目錄。模擬之后,這個命令并不會真的執行,而是利用了 @stdout API 在標準終端上輸出了兩個虛擬的目錄名。

然后我們就可以執行真正的命令了,將 find命令的輸出結果傳遞給xargs 命令,并組合到 rm -rf 命令之后。

在對應的測試驗證函數 test-rm-your-dot-git-assert 里面就驗證是 find ~ -type d -name .git | xargs -- rm -rf的運行結果是否等同于命令rm -rf ~/src/your-awesome-project/.git~/src/code/.git

@mock 是 Bach Testing Framework 中很重要的一個 API,利用這個 API 我們就可以模擬 Bash 腳本中所使用的任意命令的行為或者輸出。

比如

 

  1. @mock curl --silent google.com === \ 
  2.     @stdout "baidu.com" 

模擬了命令 curl --silent google.com的執行結果是輸出 baidu.com。在真實的正常場景下,我們是無法做到訪問google.com得到的是 baidu.com。這樣模擬之后就可以用來驗證 Bash 腳本中處理一個命令不同響應時的行為了。@mockAPI 甚至還支持更復雜的行為模擬,我們可以自定義一個復雜的模擬邏輯,比如:

 

  1. @mock ls <<\CMD 
  2.     if [[ "$var" -eq 1 ]]; then 
  3.         @stdout one 
  4.     else 
  5.         @stdout others 
  6.     fi 
  7. CMD 

在這個模擬中,會根據變量$var的值來決定命令ls的輸出one還是 others。用 @mock API 模擬的命令在任何時候執行的時候都是同樣的行為。但如果要模擬同一個命令重復執行的時候要返回不同的值,Bach Testing Framework 還提供了一個 @@mock 這個 API,比如:

 

  1. @@mock uuid === @stdout aaaa-1111-2222 
  2. @@mock uuid === @stdout bbbb-3333-4444 
  3. @@mock uuid === @stdout cccc-5555-6666 

這三個模擬命令模擬了 uuid 在重復執行三次的時候都返回不同的結果,按照模擬的先后順序分別輸出對應的模擬輸出。如果在執行完所有的模擬輸出后,再重復執行將會始終輸出最后一個模擬的輸出。更詳細的 API 介紹請在 Bach Testing Framework 的官網 https://bach.sh 查看。使用 Bach Testing Framework 還可以讓我們更安全方便的練習 Bash 編程。

比如,我們希望實現一個函數 cleanup 用來刪除參數上指定的文件。一個實現可能是:

 

  1. function cleanup() { 
  2.     rm $1 

這個函數的實現其實是有安全問題的,因為對于 Bash 來說,有沒有把一個變量用雙引號包含起來是非常重要的。在這個實現中,變量 $1 就沒有用雙引號,這會帶來嚴重的后果。下面我們將使用 @touch API 來創建幾個文件,其中將有一個文件名中含有特殊字符的文件bar。

我們都知道,對于含有特殊字符的文件名是要放入到雙引號中的。現在這個這個 cleanup 的實現里面沒有使用雙引號,但是傳參的時候使用了雙引號,那是否還會按照我們的預期來執行呢?

 

  1. function cleanup() { 
  2.     rm -rf $1 
  3.  
  4. test-learn-bash-no-double-quote-star() { 
  5.     # 創建了三個文件,其中有一個名為 "bar*" 的文件 
  6.     @touch bar1 bar2 bar3 "bar*" 
  7.  
  8.     # 要刪除這個錯誤的文件名 bar*,而不刪除其他文件,使用了雙引號來傳參,這是正確的 
  9.     cleanup "bar*" 
  10.  
  11. test-learn-bash-no-double-quote-star-assert() { 
  12.     rm -rf "bar*" 

這個測試用例將會失敗,從驗證結果中我們可以看到,期望只刪除文件 bar,但是在函數 cleanup 里面,因為遺漏了雙引號,會導致變量被二次展開。實際執行的命令是 rm -rf "bar*" bar1 bar2 bar3。現在修復函數 cleanup,把變量 $1 放入雙引號:

 

  1. function cleanup() { 
  2.     rm -rf "$1" 

再次執行測試,會發現確實執行的是命令 rm -rf "bar*"。

Bach Testing Framework 目前已經在寶馬集團和華為內部使用了。在寶馬集團的一個有數千人規模的大型項目里,Bach Testing Framework 保證了數個非常重要的構建腳本的維護。

這些腳本的可靠性和穩定性決定了數千人團隊的工作效率,現在就可以在本地快速驗證這些構建腳本的執行邏輯,也避免了在本地很難復現一些構建集群中的特殊場景的問題。 

責任編輯:龐桂玉 來源: 運維派
相關推薦

2017-01-14 23:42:49

單元測試框架軟件測試

2021-10-12 19:16:26

Jest單元測試

2024-08-21 08:22:33

2025-08-28 01:00:00

Go單元測試

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2020-08-18 08:10:02

單元測試Java

2012-03-30 15:52:51

ibmdw

2017-03-23 16:02:10

Mock技術單元測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2021-06-15 08:08:47

Java單元測試

2023-07-26 08:58:45

Golang單元測試

2020-05-07 17:30:49

開發iOS技術

2011-07-04 18:16:42

單元測試

2011-05-16 16:52:09

單元測試徹底測試

2009-09-01 10:20:06

protected方法單元測試

2012-05-17 09:09:05

Titanium單元測試

2010-01-28 15:54:19

Android單元測試

2013-06-04 09:49:04

Spring單元測試軟件測試

2020-09-30 08:08:15

單元測試應用
點贊
收藏

51CTO技術棧公眾號

首页国产欧美日韩丝袜| 国产在线你懂得| 国产精品秘入口| 秋霞午夜鲁丝一区二区老狼| 日日狠狠久久偷偷四色综合免费| 97免费公开视频| 亚洲人成在线网站| 1024成人网| 国产精品有限公司| 中文无码av一区二区三区| 欧美 日韩 国产 一区| 日韩av网站大全| 男生操女生视频在线观看| 24小时免费看片在线观看| 欧美激情一区三区| 国产无套精品一区二区| 亚洲天堂网在线观看视频| 激情婷婷欧美| 久久精品91久久久久久再现| 久久精品老司机| 韩国三级大全久久网站| 欧美日韩一区二区三区| 日本xxxxx18| 国产小视频免费在线网址| 国产精品996| 国产精品久久久久久久久久久久久久| 久久久久久久久久99| 日韩精品首页| 亚洲精品视频免费在线观看| 又大又长粗又爽又黄少妇视频| 日本另类视频| 欧美日韩中文在线观看| 国产av熟女一区二区三区 | 精品久久久久久无| 中文字幕在线观看第三页| 91九色在线看| 亚洲精品国产精华液| 亚洲精品成人自拍| 蝌蚪视频在线播放| 99久久久精品| 国产伦精品一区二区三| h狠狠躁死你h高h| 精品一区二区三区免费毛片爱| 日韩av理论片| 日韩 国产 欧美| 噜噜噜在线观看免费视频日韩| 欧美激情精品久久久久久久变态| 在线免费看av网站| 国产精品videosex性欧美| 中文字幕日韩欧美在线视频| 真实乱视频国产免费观看| 曰本一区二区三区视频| 亚洲人a成www在线影院| 国产精品揄拍100视频| 欧美电影免费网站| 日韩经典一区二区三区| 黄色国产在线观看| 伊人久久综合影院| 在线播放国产一区中文字幕剧情欧美 | 青青草华人在线视频| 禁断一区二区三区在线| 亚洲免费精彩视频| 人人爽人人爽人人片| 成人羞羞在线观看网站| 中文字幕无线精品亚洲乱码一区| 成人性视频免费看| 国产精品国产一区| 久久综合免费视频影院| 欧美xxxx黑人xyx性爽| 亚洲特级毛片| 91精品成人久久| 国产嫩bbwbbw高潮| 捆绑变态av一区二区三区| 91免费看片在线| 亚洲国产精品一| 97久久精品人人做人人爽50路| 久久亚洲综合网| 激情小视频在线| 中文字幕在线观看不卡视频| 精品国产三级a∨在线| 牛牛精品视频在线| 欧美视频二区36p| 欧美男女交配视频| 日本一区二区三区视频在线看 | 国产精品免费久久久久久| 中文字幕网址在线| 国产成人鲁色资源国产91色综| 国产精品一区二区免费| 韩国福利在线| 亚洲精品大片www| 精品人妻一区二区三区四区在线 | 成人黄色影片在线| 亚洲精品久久久久久动漫器材一区| 东方欧美亚洲色图在线| 欧美日韩一区在线视频| 成人video亚洲精品| 亚洲午夜电影在线观看| 国产成人无码av在线播放dvd| 成人福利片在线| 精品不卡在线视频| 国产黄色录像视频| 亚洲国产高清一区| 国产精品久久久久久久天堂| 亚洲国产精品久久人人爱潘金莲 | 天堂社区 天堂综合网 天堂资源最新版| 午夜在线小视频| 偷窥少妇高潮呻吟av久久免费| 男操女免费网站| 国产劲爆久久| 久久国产一区二区三区| 区一区二在线观看| 国产v日产∨综合v精品视频| 日韩.欧美.亚洲| 91九色在线播放| 欧美一区二区三区免费大片| 中文字幕第4页| 亚洲国产清纯| 亚洲一区二区三区xxx视频| 国产在线一二| 午夜av电影一区| 激情久久综合网| gogogo高清在线观看一区二区| 国内精品久久久| 国产强伦人妻毛片| 国产精品日韩成人| 能在线观看的av网站| 久久中文字幕导航| 欧美激情免费视频| 精品久久久免费视频| 国产精品色婷婷久久58| 韩国日本美国免费毛片| 青青视频一区二区| 国自产精品手机在线观看视频| 国产乱淫av免费| 国产精品久久久爽爽爽麻豆色哟哟| 精品一区二区中文字幕| 免费萌白酱国产一区二区三区| 九九热99久久久国产盗摄| 国产一区二区三区中文字幕| 国产精品欧美一区喷水| 黄色片在线免费| 免费精品国产的网站免费观看| 97色在线播放视频| 国产91绿帽单男绿奴| 亚洲一区二区三区三| 日本少妇激三级做爰在线| 我不卡影院28| 91精品综合视频| 国产激情在线视频| 欧美久久久久久蜜桃| 国产在线观看免费视频软件| 日本怡春院一区二区| 亚洲国产欧美一区二区三区不卡| 日本精品不卡| 国产亚洲精品久久久久久牛牛| 黄色av一级片| 国产日韩欧美不卡| 麻豆传传媒久久久爱| 精品国产一区一区二区三亚瑟 | 高清精品久久| 欧美成人激情在线| 午夜精品久久久久久久99热黄桃| 亚洲制服欧美中文字幕中文字幕| 少妇献身老头系列| 激情国产一区| 欧美12av| 国产美女久久| 欧美精品午夜视频| 天堂中文在线看| 日本黄色一区二区| 999精品久久久| 国产乱理伦片在线观看夜一区| 国产免费内射又粗又爽密桃视频| 第一区第二区在线| 日韩免费在线看| 最新97超碰在线| 日韩欧美一级精品久久| 精品国产免费观看| 欧美经典三级视频一区二区三区| 日韩视频在线观看一区二区三区| 国产综合欧美| 欧美一级爱爱| 9999精品视频| 97婷婷涩涩精品一区| 超碰免费在线| 日韩色在线观看| 手机看片久久久| 亚洲私人影院在线观看| 色综合久久五月| 免费高清在线一区| 国产一区二区三区乱码| 视频一区欧美| 亚洲一区亚洲二区亚洲三区| 日韩理论视频| 精品国产一区二区三区四区在线观看 | 日韩av成人高清| 在线观看成人免费| 九色精品国产蝌蚪| 成人3d动漫一区二区三区91| 桃子视频成人app| 欧美裸体男粗大视频在线观看| 你懂的在线视频| 日韩视频一区在线观看| 精品国产www| 午夜精品久久久久久不卡8050| 欧美另类69xxxx| 99久久免费精品高清特色大片| 中文字幕第17页| 国产麻豆综合| 国产1区2区3区中文字幕| 精品久久综合| 久久综合久久综合这里只有精品| 国产精一区二区| 国产精品成人免费视频| 欧美日韩国产观看视频| 久久97精品久久久久久久不卡| 中国日本在线视频中文字幕| 亚洲精品国产综合久久| 成 人 免费 黄 色| 欧美亚洲国产一区二区三区va| 毛片视频网站在线观看| 依依成人综合视频| 日本黄色录像视频| 国产女人18水真多18精品一级做| 97香蕉碰碰人妻国产欧美| 国产乱人伦精品一区二区在线观看 | 日韩美女视频一区二区在线观看| 依依成人在线视频| 色拍拍在线精品视频8848| 久久夜色精品亚洲| 亚洲成人中文在线| 欧美黄色一区二区三区| 亚洲视频一二区| 午夜国产福利视频| 国产精品久久久久久久岛一牛影视| 一本加勒比北条麻妃| 99精品视频一区二区三区| 在线播放第一页| 国产成人精品三级| 老司机av网站| 国产精品123| 99国产精品免费视频| 国产乱理伦片在线观看夜一区| 久久久久久久久久毛片| 九九热在线视频观看这里只有精品| 国产嫩草在线观看| 男女性色大片免费观看一区二区| 女性隐私黄www网站视频| 嫩草成人www欧美| 午夜视频在线瓜伦| 青青草伊人久久| 超碰成人在线播放| 国产精品一区二区三区乱码| 亚洲一区二区三区三州| 国产精品自拍av| 在线中文字日产幕| 99国产精品99久久久久久| 美国黄色一级毛片| 国产亚洲精品精华液| 精品熟妇无码av免费久久| 中文字幕一区二区三区在线观看 | 久久久久久久久久久久久久| 中文字幕一区二区中文字幕| 亚洲影视一区二区三区| 男人添女荫道口女人有什么感觉| 韩日视频一区| 成人毛片视频网站| 免费在线成人网| 日本网站在线看| k8久久久一区二区三区| 亚洲av无码一区二区三区人| 专区另类欧美日韩| 久草视频精品在线| 色婷婷狠狠综合| 一区二区日韩视频| 精品久久一二三区| 国内精品一区视频| 久久视频免费观看| 白浆视频在线观看| 国产精品嫩草影院久久久| 日韩精品免费视频一区二区三区 | 国产97在线亚洲| 成人51免费| 久久国产精品-国产精品| 精品国产一区探花在线观看| 毛片在线视频观看| 老牛影视一区二区三区| 奇米777在线| 2022国产精品视频| 手机在线免费看片| 欧美日韩在线影院| 精品人妻一区二区三区换脸明星 | 毛片在线不卡| 国产69精品久久久| 久久人体av| 好吊妞www.84com只有这里才有精品| 精品国产91乱码一区二区三区四区| 亚洲小说欧美另类激情| 亚洲影音一区| 四川一级毛毛片| 久久久一区二区| 久久黄色免费视频| 欧美日韩国产首页| 日韩欧美在线番号| 欧美夫妻性生活视频| 福利一区二区三区视频在线观看| 成人在线视频电影| 久久影院一区| 国产无套内射久久久国产| 国产91综合网| 蜜臀av午夜精品久久| 色94色欧美sute亚洲线路一ni | 国产午夜精品一区二区三区| 免费看电影在线| 国产日韩欧美在线播放| 亚洲日本三级| aa视频在线播放| 国产成人免费视频网站| 黄色录像一级片| 欧洲国内综合视频| 四虎在线观看| 国模私拍视频一区| 99久久香蕉| 中文字幕第50页| 麻豆91在线播放| 日本性高潮视频| 色噜噜狠狠成人中文综合| 秋霞av鲁丝片一区二区| 欧美成年人在线观看| 欧美成人福利| 先锋影音亚洲资源| 久久一区二区三区四区五区 | 亚洲成熟丰满熟妇高潮xxxxx| 成人午夜av影视| 青娱乐免费在线视频| 日韩一区二区三区在线观看 | 国产精品每日更新| 夜夜躁日日躁狠狠久久av| 亚洲毛片在线观看| 青青青免费在线视频| 国产综合动作在线观看| 亚洲激情社区| 污污污www精品国产网站| 亚洲狠狠爱一区二区三区| 亚洲精品911| 高清视频欧美一级| 福利片在线一区二区| 欧美人成在线观看| 北条麻妃一区二区三区| 日韩成人av毛片| 日韩av中文字幕在线播放| 三妻四妾完整版在线观看电视剧 | 中文字幕在线视频一区二区| 亚洲柠檬福利资源导航| 国产高中女学生第一次| 欧美黑人巨大精品一区二区| 国产美女撒尿一区二区| 亚洲人成无码网站久久99热国产| 99视频有精品| 欧美精品韩国精品| 中文字幕亚洲第一| 欧美黄色一级| 欧美狂野激情性xxxx在线观| 不卡的av电影在线观看| 亚洲 欧美 成人| 国产亚洲视频在线观看| 久久久久久久性潮| 国产人妻人伦精品| 91一区二区三区在线播放| 无码人妻aⅴ一区二区三区有奶水 无码免费一区二区三区 | 婷婷成人影院| 成人免费毛片播放| 亚洲美女偷拍久久| 天堂网在线中文| 国产精欧美一区二区三区| 国产精品99在线观看| 久久久久久久久久影视| 色88888久久久久久影院野外| 一级日本在线| 国产成人精品福利一区二区三区 | 亚洲免费在线电影| 天天摸天天碰天天爽天天弄| 国产精品成人观看视频国产奇米| 91成人精品视频| 久久久久国产精品无码免费看| 91福利视频久久久久| 中文字幕在线观看网站| 久久一区免费| 国内成人精品2018免费看| 四虎永久在线精品| 正在播放欧美一区| 91国内精品白嫩初高生| 国产激情在线观看视频| 亚洲另类色综合网站| 欧美孕妇孕交| 51成人做爰www免费看网站| 在线综合亚洲| 国产又粗又硬又长又爽| 亚洲精品中文字幕女同| 麻豆国产一区二区三区四区|