精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧类av怡春院| 奇米影视亚洲色图| 国产精品无码天天爽视频| 亚洲久久久久| 亚洲成人中文字幕| 国产主播在线看| 午夜小视频在线| 国产精品456| 欧美在线日韩在线| 中国美女黄色一级片| 精品久久亚洲| 色婷婷精品久久二区二区蜜臀av| 樱花www成人免费视频| 成人久久精品人妻一区二区三区| 久久精品亚洲一区二区| 精品国产欧美一区二区五十路| 超碰caoprom| 91另类视频| 五月婷婷久久丁香| 在线播放 亚洲| 日本一区视频| 国产99久久久国产精品| 国产精品久久久久久久久免费 | 青青国产在线视频| 欧美在线国产| 一区国产精品视频| 7788色淫网站小说| 国产日韩欧美中文在线| 色偷偷成人一区二区三区91| 日韩视频 中文字幕| 国产三级在线看| 成人深夜在线观看| 成人国产精品一区二区| 亚洲欧美自拍视频| 欧美高清一区| 久久久97精品| 蜜桃av免费在线观看| 羞羞色国产精品网站| 精品久久人人做人人爱| 久久精品视频在线观看免费| 91精品xxx在线观看| 精品久久久久久久久久久| 日韩精品一区二区三区电影| 四虎久久免费| 国产精品三级在线观看| 久久综合婷婷综合| 日韩中文字幕免费观看| 国产乱码精品1区2区3区| 国产精品男人的天堂| 免费污污视频在线观看| 国产欧美精品久久| 久久久视频免费观看| 一区二区在线观看免费视频| 亚洲va在线| 久久影院在线观看| 黄色录像一级片| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 欧美日韩国产综合视频在线观看| 国产在线观看福利| 午夜激情在线播放| 欧美色播在线播放| 日本三级免费网站| 亚洲欧洲日本韩国| 日韩欧美国产网站| 中文字幕在线观看第三页| 外国成人直播| 欧美日韩一区国产| 蜜臀一区二区三区精品免费视频| 国产精品久久久久久吹潮| 欧美性大战久久| 激情黄色小视频| 国产精品白丝久久av网站| 欧美男男青年gay1069videost| 少妇一级淫免费播放| 欧美爱爱视频| 欧美一区二区观看视频| 日本wwww色| 欧美尿孔扩张虐视频| 日韩高清a**址| 色哟哟精品观看| 欧美色网址大全| 久久手机免费视频| 久久综合成人网| 中文一区二区| 国产精品你懂得| 国产乱叫456在线| 夫妻av一区二区| 久久久一本精品99久久精品| 国产视频网站在线| 国产精品初高中害羞小美女文| 男人的天堂成人| aa级大片免费在线观看| 色欧美日韩亚洲| 欧美一级特黄aaa| 久久99国产精品久久99大师| 亚洲欧洲国产伦综合| 国产在线观看免费视频软件| 亚洲图片在线| 国产精品88a∨| 国产高清第一页| 免费在线黄色片| 久久在线91| 18成人在线| 色鬼7777久久| 一区二区三区日韩欧美| 国产欧美在线一区| 国产一区二区三区黄网站| 日韩精品中文字| 亚洲波多野结衣| 国产精品五区| 51蜜桃传媒精品一区二区| 青青草免费在线| 樱桃视频在线观看一区| 不卡av免费在线| 国产精品视屏| 久久精品福利视频| 亚洲欧美偷拍一区| 国产91在线看| 亚洲日本无吗高清不卡| 僵尸再翻生在线观看免费国语| 欧美人动与zoxxxx乱| 人妻在线日韩免费视频| 在线国产一区| 国产精品久久国产精品99gif| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 国产精品久久久久婷婷二区次| 国产av天堂无码一区二区三区| 四虎地址8848精品| 亚洲欧美另类人妖| 国产无码精品久久久| 精品亚洲成a人在线观看| 秋霞毛片久久久久久久久| 超碰97免费在线| 欧美一级一区二区| 老司机深夜福利网站| 老**午夜毛片一区二区三区| 韩国成人动漫在线观看| 色屁屁www国产馆在线观看| 欧美日韩一二三区| 国产精久久一区二区三区| 在线国产精品一区| av在线不卡一区| 大片免费在线观看| 欧美精品三级在线观看| 99久久精品免费视频| 免费日韩av| 久久精品国产一区二区三区日韩| 国产在线xxx| 日韩欧美国产综合在线一区二区三区| 亚洲女人毛茸茸高潮| 视频一区视频二区中文| 欧美日韩高清在线一区| 日本不良网站在线观看| 亚洲精品理论电影| 日韩欧美不卡视频| 99国产欧美另类久久久精品| 国自产拍偷拍精品啪啪一区二区| 高潮按摩久久久久久av免费| 久久久久久久久久久免费| 欧美一级做性受免费大片免费| 亚洲综合男人的天堂| 国产国语老龄妇女a片| 韩国一区二区三区在线观看| 成人激情直播| 91老司机福利在线| 日韩精品视频免费| 亚洲大片免费观看| 国产亚洲欧洲一区高清在线观看| 亚欧在线免费观看| 久久福利综合| 91视频最新| 成年人黄色大片在线| 亚洲女人天堂av| 瑟瑟视频在线免费观看| 国产精品久久毛片| 亚洲av无一区二区三区久久| 欧美天天视频| 欧美男人的天堂| 丁香久久综合| 久久这里只有精品99| 国产国语亲子伦亲子| 亚洲成人av中文| 国产色视频一区二区三区qq号| 日韩电影免费在线看| 伊人色综合影院| 国产精品香蕉| 国产精品久久二区| 69成人在线| 亚洲精品永久免费精品| 一级特黄aaa大片| 亚洲一级二级在线| 91成人破解版| 国产一区二区精品久久| 免费av手机在线观看| 精品日本12videosex| 91在线免费观看网站| 国产精品13p| 最近中文字幕2019免费| 亚洲国产日韩在线观看| 色婷婷久久综合| 欧美被狂躁喷白浆精品| 91丨porny丨蝌蚪视频| 天天色综合社区| 在线成人黄色| 亚洲自拍偷拍二区| 欧美国产极品| 国产深夜精品福利| 高清毛片在线观看| 久久五月天色综合| 猫咪在线永久网站| 日韩欧美国产一区二区三区 | 欧美在线制服丝袜| 九九视频免费观看| 国产女主播在线一区二区| 亚洲综合中文网| 蜜臀av一区二区在线观看| 妞干网在线观看视频| 久久国产精品亚洲人一区二区三区 | 亚洲男人天堂网| 99热这里只有精品1| 色综合天天视频在线观看| 青娱乐免费在线视频| 欧美国产一区二区在线观看| 亚洲一级Av无码毛片久久精品| 麻豆免费精品视频| 99精品视频播放| 91久久夜色精品国产九色| 在线视频精品一区| 日本一本不卡| 欧美日本一区| 天天干天天色天天爽| 国产欧美日韩| 麻豆91蜜桃| 免费萌白酱国产一区二区三区| 亚洲japanese制服美女| 69堂免费精品视频在线播放| 欧美怡春院一区二区三区| a级片免费在线观看| 久久综合电影一区| 欧美边添边摸边做边爱免费| 一区二区三区视频在线| 欧美激情中文字幕在线| 久草资源在线| 久久精品国产精品亚洲| 免费黄色网址在线观看| 中文字幕在线成人| а天堂8中文最新版在线官网| 精品网站999www| 亚洲av成人无码久久精品老人| 亚洲精品一区二区三区99| aaaa一级片| 日韩一区二区视频| 精品国产亚洲一区二区麻豆| 日韩一区二区三区四区| 国内毛片毛片毛片毛片| 日韩欧美国产综合在线一区二区三区| 99热这里只有精品1| 日韩精品一区二区三区视频 | 亚洲一区站长工具| 欧美性视频精品| 这里有精品可以观看| 日本精品视频在线观看| 日韩高清在线| 国产欧美一区二区三区在线看 | 国产精品免费在线播放| 99精品中文字幕在线不卡 | 色悠悠久久综合网| 免费观看在线色综合| 在线观看av日韩| 六月丁香综合在线视频| 三日本三级少妇三级99| 成人夜色视频网站在线观看| 精品国产一区在线| 久久毛片高清国产| 手机看片国产日韩| 一区二区三区丝袜| 国产精品美女久久久久av爽| 色综合久久天天| 中文亚洲av片在线观看| 91麻豆精品久久久久蜜臀| 99久久免费国产精精品| 精品99久久久久久| 黄上黄在线观看| 久久久精品久久久| ririsao久久精品一区| 情事1991在线| 亚洲青青一区| 国新精品乱码一区二区三区18| 国产成人三级| 国产奶头好大揉着好爽视频| 亚洲三级电影在线观看| 亚洲中文字幕久久精品无码喷水| 久久机这里只有精品| 国产女主播在线播放| 国产日韩欧美a| 午夜69成人做爰视频| 婷婷激情综合网| 怡春院在线视频| 亚洲成av人影院在线观看| 成人18在线| 久久久伊人日本| 久久免费视频网| yiren22亚洲综合| 国产精品国产三级欧美二区| 欧美精品羞羞答答| 日本阿v视频在线观看| 日本午夜精品一区二区三区电影| 无码国产精品一区二区高潮| 国产亚洲欧美日韩俺去了| 欧美日韩大片在线观看| 欧美在线一区二区| 婷婷在线免费观看| 免费成人高清视频| 日韩av中字| 精品综合在线| 欧美精品激情| 亚洲久久中文字幕| www精品美女久久久tv| 久久久久久久久久久久久女过产乱| 日韩欧美在线免费观看| 国产精品毛片一区二区在线看舒淇| 精品盗摄一区二区三区| 操你啦视频在线| 国产精品视频在线播放| 亚洲人成亚洲精品| 久青草视频在线播放| 久久精品久久99精品久久| 在线免费观看黄色小视频| 亚洲最大色网站| 国产又粗又猛又爽又黄的视频一| 亚洲人成电影网站色xx| 狠狠躁少妇一区二区三区| 999热视频在线观看| 97人人精品| 91麻豆精品视频| 日韩大片免费在线观看| 精品免费日韩av| 青草影视电视剧免费播放在线观看| 成人黄色在线播放| 精品国产91久久久久久浪潮蜜月| 日韩av资源在线| 91免费国产在线| 日韩免费在线视频观看| 精品国产免费久久| 三级福利片在线观看| 91系列在线观看| 91高清一区| 亚欧美一区二区三区| 专区另类欧美日韩| 国产又粗又猛又爽又黄的视频一| 欧美舌奴丨vk视频| 青青草原成人| 天堂av在线一区| 久久亚洲无码视频| 欧美性生活大片视频| 91亚洲精选| 成人性教育视频在线观看| 91精品国产91久久综合| www.久久com| 亚洲国产日韩a在线播放| 香蕉国产在线视频| 日本一欧美一欧美一亚洲视频| 美女亚洲一区| 五月婷婷六月合| 亚洲免费成人av| 男人的天堂a在线| 91高清免费视频| 国产精品美女久久久久久不卡 | 国产在线观看99| 亚洲国产一区自拍| 欧美成人性网| 亚洲永久激情精品| 国产乱码精品一品二品| 亚洲精品午夜久久久久久久| 精品一区二区三区四区| 四虎成人在线| 午夜探花在线观看| 福利一区二区在线观看| youjizz在线视频| 在线视频欧美日韩精品| 精品一区二区三区中文字幕| 国产成人永久免费视频| 99视频有精品| 在线中文字幕网站| 欧美激情视频网| 国产亚洲一卡2卡3卡4卡新区 | 久久天天久久| 日韩精品一区二区三区电影| 97久久精品人人做人人爽| 中文字幕精品一区二区精| 久久久999精品视频| 美女视频亚洲色图| 无尽裸体动漫2d在线观看| 亚洲国产精品久久人人爱蜜臀| 韩国福利在线| 日韩在线观看电影完整版高清免费悬疑悬疑| 亚洲综合20p| 日韩欧美亚洲范冰冰与中字| jizz性欧美10| 日本一区免费|