亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > PHP > 正文

在Mac OS上搭建PHP的Yii框架及相關(guān)測試環(huán)境

2024-05-04 23:43:02
字體:
供稿:網(wǎng)友
這篇文章主要介紹了在Mac OS上搭建PHP的Yii框架及相關(guān)測試環(huán)境的方法,Mac自帶Apache與PHP等軟件,因而搭建開發(fā)環(huán)境時非常舒適,需要的朋友可以參考下
 

YII集成了單元測試和功能測試,借助phpunit和selenium實現(xiàn)。筆者在配置過程中遇到了不少麻煩,紀(jì)錄在此。

必要概念
selenium

selenium是個著名的自動化測試工具,可以調(diào)起本地的瀏覽器來完成測試,所以可以用來自動化測試web項目。selenium分為服務(wù)端和客戶端,服務(wù)端使用java開發(fā),所以需要一個jdk,服務(wù)端在啟動時,會啟動一個http服務(wù),客戶端通過與服務(wù)端進(jìn)行http通信,向服務(wù)端發(fā)起測試請求,服務(wù)端會自動調(diào)起瀏覽器完成測試。測試人員負(fù)責(zé)編寫客戶端腳本,支持大部分主流的編程語言,當(dāng)然實際上這是由于開源社區(qū)強(qiáng)大的威力,為不同的語言開發(fā)了針對selenium的接口程序而已,服務(wù)端和客戶端之間的協(xié)議筆者并沒有研究,因為這并不重要。

phpunit
phpunit是php語言的測試框架和工具,在進(jìn)行單元測試的時候是使用它的框架,在進(jìn)行功能測試的時候是使用它的工具。基于這個測試框架,有人在此基礎(chǔ)上做了selenium的php接口程序,作為phpunit的擴(kuò)展存在。

YII框架如何集成
Yii在phpunit的基礎(chǔ)上,為測試做了一些簡單的封裝。因此,使用Yii來進(jìn)行測試的時候,需要依賴上述兩者。

環(huán)境安裝
Firefox

selenium-server能夠識別的瀏覽器并不多,似乎是IE和Firefox,所以在OSX上先安裝好Firefox瀏覽器。安裝瀏覽器跟一般的軟件安裝沒有大的區(qū)別,這里不累述了。

JDK
由于selenium-server是使用java開發(fā)的,我們需要先安裝好JDK,百度搜索JDK下載安裝即可。不再累述。

selenium-server
首先來安裝selenium的server版本。在osx下,可以使用brew來安裝,比較方便:

$ brew install selenium-server-standalone

由于selenium-server的源在googleapis上,所以需要翻墻才能進(jìn)行操作,事實上,如果不翻墻,其他步驟也比較困難。

安裝完成后的提示:

To have launchd start selenium-server-standalone at login:  ln -sfv /usr/local/opt/selenium-server-standalone/*.plist ~/Library/LaunchAgentsThen to load selenium-server-standalone now:  launchctl load ~/Library/LaunchAgents/homebrew.mxcl.selenium-server-standalone.plistOr, if you don't want/need launchctl, you can just run:  selenium-server -p 4444

這里明確告訴我們通過如下命令來啟動服務(wù)端

$ selenium-server -p 4444

正如所見,通常selenium-server偵聽4444端口,如果希望修改端口,那么相應(yīng)的Yii處需要修改一下配置。

phpunit
彎路

個人理解,phpunit是一個工具和框架的集合,工具歸工具,框架歸框架。從官網(wǎng)的文檔看,phpunit的工具部分,是以phar包的形式發(fā)布的,而框架部分是通過pear管理的。那么先來記錄一下這兩個概念。沒有興趣的可以跳過這節(jié)。

phar是一種php打包方案。也就是可以把一個php程序或者php網(wǎng)站打包在一起分發(fā),甚至被作為一個功能模塊調(diào)用。因此,phpunit完全可以將工具程序打包成phar,執(zhí)行phar的時候,通常需要使用php命令。

$ wget https://phar.phpunit.de/phpunit.phar$ chmod +x phpunit.phar$ sudo mv phpunit.phar /usr/local/bin/phpunit$ phpunit --versionPHPUnit x.y.z by Sebastian Bergmann and contributors.

用上面的命令可以下載phpunit的可執(zhí)行文件,可以看到這是個phar包

pear是php擴(kuò)展庫的體系,因為早期php復(fù)用比較困難。編譯型語言由于語法比較緊湊和嚴(yán)謹(jǐn),比較容易復(fù)用。而php由于靈活多變,復(fù)用起來學(xué)習(xí)成本比較高,于是pear就提出了一個編程規(guī)范和分發(fā)體系來實現(xiàn)php的功能復(fù)用,現(xiàn)在似乎pear已經(jīng)被composer替代了(下面會說)。不過古老的東西既然已經(jīng)走過彎路了不妨記下來。

在mac下可以這么安裝pear:

$ wget http://pear.php.net/go-pear.phar$ sudo php -d detect_unicode=0 go-pear.phar

可以看到,go-pear也是個phar,只不過它是一個安裝pear的php腳本,使用php命令可以執(zhí)行。安裝過程中會提示是否要修改php.ini文件:

WARNING! The include_path defined in the currently used php.ini does notcontain the PEAR PHP directory you just specified:</usr/share/pear>If the specified directory is also not in the include_path used byyour scripts, you will have problems getting any PEAR packages working.Would you like to alter php.ini </etc/php.ini>? [Y/n] : Yphp.ini </etc/php.ini> include_path updated.Current include path      : .:Configured directory      : /usr/share/pearCurrently used php.ini (guess) : /etc/php.iniPress Enter to continue: The 'pear' command is now at your service at /usr/bin/pear** The 'pear' command is not currently in your PATH, so you need to** use '/usr/bin/pear' until you have added** '/usr/bin' to your PATH environment variable.

從這段提示我們可以得知:

pear的可執(zhí)行程序安裝在/usr/bin/pear
pear有個工作目錄是/usr/share/pear,這個工作目錄需要添加到php.ini中,如果讓安裝程序自動添加的話,將是這樣的:

;***** Added by go-pearinclude_path=".:/usr/share/pear";*****

當(dāng)我們在php使用require等包含其他文件的函數(shù)時,php其實除了搜索當(dāng)前目錄,還會搜索include_path。這樣配置就表明,通過pear安裝的程序代碼將存放在工作目錄,而且php能夠找到,默認(rèn)在工作目錄下會有一個System.php,所以以下代碼是可以工作的:

<?php  require 'System.php';?>


使用composer安裝
本來,phpunit可以通過pear來安裝的,然而,時過境遷,在composer大行其道的時代,phpunit也宣布全面支持composer,并且放棄pear,原本通過pear的安裝方式果然都不行了。最后逼不得已,只能上composer(話說包管理工具真是多的十個手指不夠用了,將來有機(jī)會來個橫向比較)。

首先安裝composer,在翻墻狀態(tài)下:

$ brew update$ brew tap josegonzalez/homebrew-php$ brew tap homebrew/versions$ brew install php55-intl$ brew install josegonzalez/php/composer

這樣composer就裝好了。

在項目的根目錄下,創(chuàng)建一個composer.json,寫入:

{  "require-dev": {    "phpunit/phpunit": "4.7.*",    "phpunit/php-invoker": "*",    "phpunit/dbunit": ">=1.2",    "phpunit/phpunit-selenium": ">=1.2",    "phpunit/phpunit-story": "*"  }}

上面的phpunit-selenium就是基于phpunit寫的selenium客戶端庫,詳見文后的參考資料。

然后在項目根目錄下,執(zhí)行

$ sudo composer install

composer會根據(jù)這個composer.json文件在根目錄創(chuàng)建一個vendor目錄,并將依賴的東西全部下載到這個目錄中,其中vendor/bin下面有phpunit的可執(zhí)行文件。

由于是Yii的項目,所以cd到/protected/tests目錄下,執(zhí)行如下命令即可啟動默認(rèn)的SiteTest.php里面的測試方法: (注意在執(zhí)行前,保持selenium-server開啟狀態(tài))

$ ../../vendor/bin/phpunit functional/SiteTest.php

會看到firefox會在執(zhí)行過程中自動啟動,并由如下日志輸出:

PHPUnit 4.7.7 by Sebastian Bergmann and contributors.Warning: Deprecated configuration setting "selenium" used.Time: 11.52 seconds, Memory: 6.50MbOK (1 test, 1 assertion)

phpunit工具程序會自動找到tests/phpunit.xml這個配置文件并根據(jù)此來進(jìn)行某些配置,而Yii會利用phpunit和phpunit-selenium的框架來與selenium-server端通信,server端會啟動瀏覽器,并將日志和結(jié)果等返回給客戶端。整個過程大致就是這樣的。

測試

測試是軟件開發(fā)中必不可少的環(huán)節(jié).無論我們是否意識到,在開發(fā)Web應(yīng)用的時候,我們始終都是在測試的.例如, 當(dāng)我們用PHP寫了一個類時, 我們可能會用到一些注入 echo 或者 die 語句來顯示我們是否正確地實現(xiàn)了某個方法;當(dāng)我們實現(xiàn)了包含一套復(fù)雜的HTML表單的web頁面時, 我們可能會試著輸入一些測試數(shù)據(jù)來確認(rèn)頁面是否是按照我們的預(yù)期來交互的.更高級的開發(fā)者則會寫一些代碼來自動完成這個測試過程, 這樣一來每當(dāng)我們需要測試一些東西的時候, 我們只需要調(diào)用代碼, 剩下來的就交給計算機(jī)了. 這就是所謂的 自動測試, 也是本章的主要話題.

Yii 提供的測試支持包括 單元測試 和 功能測試.

單元測試檢驗了代碼的一個獨(dú)立單元是否按照預(yù)期工作. 在面向?qū)ο缶幊讨? 最基本的代碼單元就是類. 因此, 單元測試的主要職責(zé)就是校驗這個類所實現(xiàn)的每個方法工作都是正常的. 單元測試通常是由開發(fā)了這個類的人來編寫.

功能測試檢驗了特性是否按照預(yù)期工作(如:在一個博客系統(tǒng)里的提交操作).與單元測試相比, 功能測試通常要高級一些, 因為待測試的特性常常牽涉到多個類. 功能測試通常是由非常了解系統(tǒng)需求的人編寫.(這個人既可以是開發(fā)者也可以是質(zhì)量工程師).

測試驅(qū)動開發(fā)

以下展示的便是所謂的 測試驅(qū)動開發(fā) (TDD) 的開發(fā)周期:

  • 創(chuàng)建一個涵蓋要實現(xiàn)的特性的新的測試. 測試預(yù)計將在第一次執(zhí)行的時候失敗, 因為特性尚未實現(xiàn).
  • 執(zhí)行所有測試,確保這個新的測試是失敗的.
  • 編寫代碼來使得測試通過.
  • 執(zhí)行所有測試,確保所有測試通過.
  • 重構(gòu)新編寫的代碼并確保這些測試仍然能夠通過.
  • 重復(fù)步驟1至5推進(jìn)整體功能的實現(xiàn).

構(gòu)建測試環(huán)境

Yii 提供的測試支持需要 PHPUnit 3.5+ 和 Selenium Remote Control 1.0+.請參照他們提供的文檔來安裝 PHPUnit 和 Selenium Remote Control.

當(dāng)我們使用 yiic webapp 控制臺命令來創(chuàng)建一個新的 Yii 應(yīng)用時, 它將會生成以下文件和目錄供我們來編寫和完成測試.

testdrive/
   protected/                包含了受保護(hù)的應(yīng)用文件
      tests/                 包含了應(yīng)用測試
         fixtures/           包含了數(shù)據(jù) fixtures
         functional/         包含了功能測試
         unit/               包含了單元測試
         report/             包含了 coverage 報告
         bootstrap.php       這個腳本在一開始執(zhí)行
         phpunit.xml         PHPUnit 配置文件
         WebTestCase.php     基于 Web 的功能測試基類
如上所示的, 我們的測試代碼主要放在 fixtures, functional 和 unit 這三個目錄下, report 目錄則用于存儲生成的代碼 coverage 報告.

我們可以在控制臺窗口執(zhí)行以下命令來執(zhí)行測試(無論是單元測試還是功能測試):

% cd testdrive/protected/tests% phpunit functional/PostTest.php  // 執(zhí)行單個測試% phpunit --verbose functional    // 執(zhí)行 'functional' 下的所有測試% phpunit --coverage-html ./report unit

上面的最后一條命令將執(zhí)行 unit 目錄下的所有測試然后在 report 目錄下生成出一份 code-coverage 報告. 注意要生成 code-coverage 報告必須安裝并開啟PHP的 xdebug 擴(kuò)展 .

測試的引導(dǎo)腳本

讓我們來看看 bootstrap.php 文件里會有些什么. 首先這個文件有點(diǎn)特殊,因為它看起來很像是 入口腳本, 而它也正是我們執(zhí)行一系列測試的入口.

$yiit='path/to/yii/framework/yiit.php';$config=dirname(__FILE__).'/../config/test.php';require_once($yiit);require_once(dirname(__FILE__).'/WebTestCase.php');Yii::createWebApplication($config);

如上所示, 首先我們包含了來自 Yii 框架的 yiit.php 文件, 它初始化了一些全局常量以及必要的測試基類.然后我們使用 test.php 這個配置文件來創(chuàng)建一個應(yīng)用實例.如果你查看 test.php 文件, 你會發(fā)現(xiàn)它是繼承自 main.php 這個配置文件的, 只不過它多加了一個類名為 [CDbFixtureManager] 的 fixture 應(yīng)用組件.

return CMap::mergeArray( require(dirname(__FILE__).'/main.php'), array( 'components'=>array(  'fixture'=>array(  'class'=>'system.test.CDbFixtureManager',  ),  /* 去除以下注釋可為測試提供一個數(shù)據(jù)庫連接.  'db'=>array(  'connectionString'=>'DSN for test database',  ),  */ ), ));
當(dāng)我執(zhí)行那些涉及到數(shù)據(jù)庫操作的測試時, 我們應(yīng)該提供一個測試專用的數(shù)據(jù)庫以便測試執(zhí)行不會干擾到正常的開發(fā)或者生產(chǎn)活動. 這樣一來, 我們紙需要去除上面 db 配置的注釋, 然后填寫 connectionString 屬性的用以連接到數(shù)據(jù)庫的DSN(數(shù)據(jù)源名稱)即可.

通過這樣一個啟動腳本, 當(dāng)我們執(zhí)行單元測試時, 我們便可以獲得一個與服務(wù)需求類似的應(yīng)用實例, 而主要的不同就是測試擁有一個 fixture 管理器以及它專屬的測試數(shù)據(jù)庫.

定義特定狀態(tài)(Fixtures)

自動測試需要被執(zhí)行很多次.為了確保測試過程是可以重復(fù)的, 我們很想要在一些可知的狀態(tài)下進(jìn)行測試, 這個狀態(tài)我們稱之為 特定狀態(tài). 舉個例子,在一個博客應(yīng)用中測試文章創(chuàng)建特性, 每次當(dāng)我們進(jìn)行測試時, 與文章相關(guān)的表(例如. Post 表 , Comment 表)應(yīng)該被恢復(fù)到一個特定的狀態(tài)下. PHPUnit 文檔 已經(jīng)很好的描述了一般的特定狀態(tài)的構(gòu)建. 而本節(jié)主要介紹怎樣像剛才描述的例子那樣構(gòu)建數(shù)據(jù)庫特定狀態(tài).

設(shè)置構(gòu)建數(shù)據(jù)庫的特定狀態(tài),這恐怕是測試以數(shù)據(jù)庫為后端支持的應(yīng)用最耗時的部分之一.Yii 引進(jìn)的 [CBbFixtureManager] 應(yīng)用組件可以有效的減輕這一問題.當(dāng)進(jìn)行一組測試的時候,它基本上會做以下這些事情:

在所有測試運(yùn)行之前,它重置測試相關(guān)數(shù)據(jù)為可知的狀態(tài).
在單個測試運(yùn)行之前, 它將特定的表重置為可知狀態(tài).
在一個測試方法執(zhí)行過程中, 它提供了供給特定狀態(tài)的行數(shù)據(jù)的訪問接口.
請按如下使用我們在 應(yīng)用配置 中配置的 [CDbFixtureManager].

return array( 'components'=>array( 'fixture'=>array(  'class'=>'system.test.CDbFixtureManager', ), ),);

然后我們在目錄 protected/tests/fixtures下提供一個特定狀態(tài)數(shù)據(jù). 這個目錄可以通過配置應(yīng)用配置文件中的 [CDbFixtureManager::basePath] 屬性指定為其他目錄.特定狀態(tài)數(shù)據(jù)是由多個稱之為特定狀態(tài)文件的PHP文件組合而成.每個特定狀態(tài)文件返回一個數(shù)組, 代表數(shù)據(jù)的一個特定表的初始行.文件名和表名相同.以下則是將 Post 表的特定狀態(tài)數(shù)據(jù)存儲于名為 Post.php 文件里的例子.

<?phpreturn array( 'sample1'=>array( 'title'=>'test post 1', 'content'=>'test post content 1', 'createTime'=>1230952187, 'authorId'=>1, ), 'sample2'=>array( 'title'=>'test post 2', 'content'=>'test post content 2', 'createTime'=>1230952287, 'authorId'=>1, ),);

正如我們所見, 上面返回了兩行數(shù)據(jù). 每一行都表示一個數(shù)組,其鍵是表的字段名,其值則是對應(yīng)的字段值.每行的索引都是稱之為行別名的字符串(例如: simple1, simple2). 稍后當(dāng)我們編寫測試腳本的時候, 我們可以方便地通過它的別名調(diào)用這行數(shù)據(jù).你也許注意到了我們并未在上述特定狀態(tài)中指定 id 字段的值. 這是因為 id 字段已經(jīng)被定義為自增主鍵了,它的值也會在我們插入新數(shù)據(jù)的時候自動生成.

當(dāng) [CDbFixtureManager] 第一次被引用時, 它會仔細(xì)檢查所有的特定狀態(tài)文件然后使用他們重置對應(yīng)的表.它通過清空表,重置表主鍵的自增序列值,然后插入來自特定狀態(tài)文件的數(shù)據(jù)行到表中來重置表.

有時候,我們可能不想在一套測試前重置特定狀態(tài)文件里描述的每一個表, 因為重置太多的特定狀態(tài)文件可能需要很多時間.這種情況下,我們可以寫一個PHP腳本來定制這個初始化過程.這個腳本應(yīng)該被保存在存放特定狀態(tài)文件的目錄下,并命名為 init.php.當(dāng) [CDbFixtureManager] 檢測到了這個腳本的存在, 它將執(zhí)行這個腳本而不是重置每一個表.

不喜歡使用默認(rèn)方式來重置表也是可以的,例如: 清空表然后插入特定狀態(tài)數(shù)據(jù). 如果是這種情況, 我們可以為指定的特定狀態(tài)文件編寫一個初始化腳本.這個腳本必須名稱為表名+.init.php. 例如: Post 表的初始化腳本文件就是 Post.init.php. 當(dāng) [CDbFixtureManager] 發(fā)現(xiàn)了這個腳本,它將執(zhí)行這個腳本而不是采用默認(rèn)的方式去重置該表.

Tip: 太多的特定狀態(tài)文件大大延長了測試時間.因此, 你應(yīng)該只為那些在測試中數(shù)據(jù)會發(fā)生變化的表提供特定狀態(tài)文件. 那些做為查找服務(wù)的表不會改變,因此不需要特定狀態(tài)文件.



注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
中国人xxxxx69免费视频| 99久久精品费精品国产| 欧美老少做受xxxx高潮| 99久久婷婷国产综合精品首页| 婷婷在线视频观看| 91福利在线观看视频| 国产99在线播放| 三级影片在线看| 曰本人一级毛片免费完整视频| 欧美黑人xx片| 91国产在线免费观看| 久久久久久久av麻豆果冻| 在线视频中文亚洲| 国产精品一区二区三区四| 欧美三级一级片| 99热在线观看精品| 另类成人小视频在线| eeuss影院www影院入口| 在线免费视频福利| 伊人久久大香线| 一本久久综合亚洲鲁鲁| 亚洲国产av一区二区| 国内精品区一区二区三| 你懂的免费视频| 黑人操亚洲人| 国产激情第一页| 丝袜美腿小色网| 黑人巨大猛交丰满少妇| 少妇高潮大叫好爽喷水| 欧美肥婆姓交大片| 日韩动漫一区| av在线不卡免费观看| 欧美黄色性生活| 欧美性xxxxxxxx| 久久国产夜色精品鲁鲁99| 成人久久精品人妻一区二区三区| a视频在线免费看| 精品欧美一区二区三区免费观看| 大桥未久女教师av一区二区| 人妻一区二区视频| 少妇高潮惨叫久久久久| a天堂视频在线| 国产男女猛烈无遮挡在线喷水| 免费污视频在线一区| 久久中文资源| 日韩不卡一区| 国产成人av一区二区三区不卡| 国产熟女一区二区三区四区| 国产精品一级黄片| 四季av中文字幕| 亚洲精品白浆高清| 日韩午夜电影网| 日韩精品电影网站| 欧美一级大片在线视频| 正在播放木下凛凛xv99| 欧美一三区三区四区免费在线看| 小说区图片区综合久久88| 少妇高潮av久久久久久| 可以看av的网站久久看| 欧美无遮挡国产欧美另类| 一级黄色片免费| 成av人免费青青久| 亚洲日本成人网| 免费黄色日本网站| 色综合天天综合网中文字幕| 成人黄色a级片| 国产精品久久久久久久妇| 国产精品日韩在线播放| 欧美精品国产一区二区| 91福利国产成人精品照片| 97福利网站在线观看视频| 91丨国产丨九色丨pron| jizzyou欧美16| 欧美在线黄色| 国产精品欧美久久久久无广告| 美女福利一区二区| 婷婷在线播放| 粉嫩aⅴ一区二区三区四区| av电影一区二区| 欧美日本免费| 国产高清在线免费| 国产性生交xxxxx免费| 日韩国产网站| 日韩毛片一区二区三区| 日韩国产成人无码av毛片| 含羞草www国产在线视频| 亚洲国产日韩欧美在线动漫| 蜜桃臀av在线| 国产超碰精品在线观看| 激情五月深爱五月| 午夜国产精品视频免费体验区| 中文字幕2018| 国产欧美日韩另类视频免费观看| 日韩激情视频在线播放| 91美女在线观看| 最近2018中文字幕免费在线视频| 国产一区二区三区网| 亚洲综合中文字幕在线| 欧美日韩在线精品一区二区三区| 曰皮视频在线播放免费的| 免费观看国产精品视频| 国产精品美女一区二区在线观看| 四虎视频在线精品免费网址| 九九热最新视频| 国产在视频线精品视频| 91精品国自产在线偷拍蜜桃| 精品人伦一区二区三区蜜桃网站| 国产精品久久综合av爱欲tv| 一二三四视频在线中文| 久久99精品久久久久久青青日本| 污视频在线观看网站| 伊人波多野结衣| 久操成人av| 97在线观看免费高清视频| 亚洲精品中文字幕99999| 精品国产区一区| 色婷婷激情综合| 天天射天天拍| 国产精品综合av一区二区国产馆| 亚洲人体大胆视频| 韩国一区二区三区在线观看| 午夜影院免费| 2020久久国产精品| 日本三级视频在线观看| 水蜜桃在线视频| 在线观看成人小视频| 图片区小说区区亚洲影院| 国产+成+人+亚洲欧洲| 国产精品区免费视频| 曰本大片免费观看视频| 天天干天天干天天干天天干天天干| 高清精品xnxxcom| 日韩精品成人一区二区在线| 久久av在线播放| ㊣最新国产の精品bt伙计久久| 国产在线视视频有精品| 无码国产伦一区二区三区视频| 成人av免费电影网站| 成年在线观看免费人视频| www.亚洲一区二区三区| 色噜噜狠狠一区二区三区果冻| 青草青草久热精品视频在线网站| 欧美日韩mv| 欧美日本久久| 国产一区91| www激情五月| 日韩激情在线观看| 992tv成人免费观看| 欧美性生活大片视频| 91.com在线观看| 日韩欧美不卡在线| 精品视频97| 亚洲成人一区二区在线观看| 黄污在线观看| 僵尸再翻生在线观看免费国语| 欧美孕妇与黑人孕交| 成人超碰在线| 日韩久久在线| 日本一区二区三区视频免费看| 91av在线播放| 国产精品一区二区午夜嘿嘿嘿小说| 高清日韩一区| 国产在线精品免费| 99国产精品视频免费观看一公开| 亚洲图片欧美激情| 偷拍精品福利视频导航| 97精品国产aⅴ7777| 91亚洲国产成人久久精品麻豆| 国产精品久久久爽爽爽麻豆色哟哟| 国产成年精品| 18禁男女爽爽爽午夜网站免费| 国内老熟妇对白xxxxhd| 午夜福利视频一区二区| 久久丫精品久久丫| 无码人妻久久一区二区三区蜜桃| 可以免费看污视频的网站在线| av国产在线观看| 伊人久久青青草| 玩弄japan白嫩少妇hd| 国产视频一区二区视频| 91精品人妻一区二区三区蜜桃2| 国产精品久久97| 日本少妇全体裸体洗澡| 国产美女在线精品| 黄色小视频在线免费看| 黄色在线视频网址| 日本1区2区| 日本道在线视频| 午夜精品视频一区二区三区在线看| 亚洲一品av免费观看| 国产精品一 二 三| 亚洲国产日韩欧美| 19禁羞羞电影院在线观看| 久久草av在线| 欧美亚洲国产一区二区三区| 成人精品视频.| 精品国产一级| 日本中文字幕片| 一级毛片免费视频| 亚洲国产成人在线观看| 国产成人精品免费视频| 丝袜美腿综合| 欧美一区二区三区色| 制服诱惑一区| 亚洲黄色一区| 1区2区3区在线视频| 精品精品国产高清一毛片一天堂| 午夜精品福利一区二区| 少妇高潮喷水久久久久久久久久| av电影在线观看网站| 日本电影一区二区在线观看| 久久夜色精品国产欧美乱| 激情偷乱视频一区二区三区| 国内精品久久久久久久影视麻豆| 日本韩国视频一区二区| 男人操女人的视频在线观看欧美| 在线影院福利| 污污视频在线免费| 国产精品无码无卡无需播放器| 爽死777影院| 在线观看视频二区| 色婷婷久久99综合精品jk白丝| 玛雅亚洲电影| 欧美在线视频日韩| 日韩欧美高清在线播放| 91九色偷拍| 波多野结衣一区二区三区| 国产精品久久久999| 日韩欧美一区二区三区久久| 日韩在线www| 日韩中文在线视频| 中文字幕一区二区三区乱码不卡| 狠狠干狠狠久久| 欧美gay男男猛男无套| 欧美三级在线免费观看| 欧美激情视频在线观看| 超级砰砰砰97免费观看最新一期| 精品国产乱码久久久久久久| 中文字幕精品久久| 二区三区在线观看| 日韩视频在线你懂得| 51av在线| 亚洲jjzzjjzz在线观看| 精品一区二区三区毛片| 91久久久在线| 好吊妞国产欧美日韩免费观看网站| 精品97人妻无码中文永久在线| 日韩一区二区三区四区| 日本中文字幕在线播放| 91免费国产精品| 国产激情久久久久久熟女老人av| 国产亚洲综合精品| 91sao在线观看国产| 久久久精品免费网站| 四虎成人免费观看在线网址| 神马午夜电影一区二区三区在线观看| www.毛片com| 国产精品密蕾丝视频下载| 麻豆av免费在线| baoyu777.永久免费视频| 手机在线观看你懂的| av在线不卡观看免费观看| 久久99欧美| 亚洲成人激情视频| 日韩三级av| 亚洲精品午夜国产va久久成人| 十九岁完整版在线观看好看云免费| 桃乃木かなav在线播放| 丝袜美腿精品国产二区| 亚洲成人a**址| 国产麻豆精品入口在线观看| 欧美性猛交xxxxxxxx| www.91popny.com| 久久久精品国产免费观看同学| 亚洲第一中文字幕| av亚洲精华国产精华精| 天堂av免费观看| 国产亚洲精品91在线| 日韩精品免费在线视频观看| 国产欧美日韩三级| 国产精品999视频| 免费高清不卡av| 国产午夜福利100集发布| √最新版天堂资源网在线| 自拍偷拍国产| 蜜桃av久久久亚洲精品| 精品亚洲成a人在线观看| 日韩免费av片在线观看| 久久99热精品| 日韩精品中文字幕吗一区二区| 毛片毛片毛片毛| 一本到不卡精品视频在线观看| 国产一区二区精品福利地址| 国产日韩欧美一区二区三区| 国产在线精品一区二区中文| 主播国产精品| 亚洲欧美日韩精品永久在线| 成年女人的天堂在线| 成人欧美一区二区三区在线| 天天爽人人爽夜夜爽| 国产又粗又长又大视频| 日本韩国一区二区三区视频| 天天摸天天舔天天操| 国产成人精品av| 三上亚洲一区二区| 亚洲AV无码成人片在线观看| 成人免费视频网| www.av在线| 999久久久久久| 天天色综合久久| 精品人妻一区二区三区麻豆91| 日韩久久免费av| 亚洲美女福利视频| 国产精品.www| 丰满人妻一区二区三区53号| 欧美性片在线观看| 国产精品综合一区二区| 国产在线一二三区| 久久久久久噜噜噜久久久精品| 午夜精品久久久久久久99老熟妇| a欧美人片人妖| xxxx国产精品| 国内精品久久久久影院 日本资源| 9999精品成人免费毛片在线看| 99re6在线精品视频免费播放| 瑟瑟视频在线观看| 亚洲欧洲日韩精品在线| 99久久精品国产网站|