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

Mock框架的三次迭代,讓你的單元測試更高效

開發 開發工具 測試
對于單元測試中的單元,不同的人有不同的看法:可以理解為一個方法,可以理解為一個完整的接口實現,也可以理解為一個完整的功能模塊或者是多個功能模塊的一個耦合。

如何定義單元

對于單元測試中的單元,不同的人有不同的看法:可以理解為一個方法,可以理解為一個完整的接口實現,也可以理解為一個完整的功能模塊或者是多個功能模塊的一個耦合。

根據以往的單元測試經驗,在設計單元測試用例時,當針對方法級別展開單元測試時,重點關注的是方法的底層邏輯;當針對的是模塊時,針對的是實際的業務邏輯實現;當針對整合后的模塊進行測試時,一般稱之為集成測試。

[[243805]]

不管是單元測試還是集成測試,都可以統一的理解為單元測試。因為他們的本質都是對方法或接口的一種測試形式,只是所處的階段不一樣罷了。

1. 集成測試應該由誰編寫

在我們的實際工作中,研發人員在提交代碼之前,會設計一些“冒煙測試”級別集成測試用例。等到整個功能開發完成后,測試人員會根據業務需求和設計的測試用例,來進行整體的集成測試用例的編寫、執行、失敗用例分析,以及代碼的調式和問題代碼的定位等工作。

2. 集成測試用例

業務相關的測試主要是通過spring-test來進行集成測試,基本的測試結構為先定義一個基類用來初始化被測試類。

測試基類定義結構如下:

  1. @RunWith(SpringJUnit4ClassRunner.class)   
  2. ContextConfiguration(locations = {"classpath:./spring/applicationContext.xml"})   
  3. @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)   
  4. public class BaseSpringJunitTest {   
  5.     @Autowired   
  6.     protected BusinessRelatedServiceImpl businessRelatedService;   

業務相關的測試類定義如下格式:

  1.   public class BusinessRelatedServiceImplDomainTest  extends BaseSpringJunitTest {  
  2.   @Test   
  3.   public void testScenario1 (){  
  4.   new Thread(new DOSAutoTest("testScenario1")).start();   
  5.   Thread.sleep(1000*60*1);   
  6.   String requestJson=""//測試入參;   
  7.   RequestPojo request=( RequestPojo )JSONUtils.jsonToBean(requestJson,RequestPojo .class);   
  8.   ResponsePojo responsebusinessRelatedService.businessRelatedMethod(ResponsePojo );   
  9.   //業務相關的assert區域   
  10. }   

3. 如何解決下游系統依賴

businessRelatedMethod方法在處理業務邏輯的過程中需要調用下游JSF(Jingdong Service Framework,完全自主研發的高性能RPC服務框架)提供的訂單接口(OrderverExportService),并根據入參中的訂單編號獲取訂單的詳細信息(ResultPojo getOrderInfoById (long orderId))。

那么如何獲取下游JSF接口的返回正確數據就變成了一個比較重要的問題。如果是在功能測試或者聯調測試階段,可以由下游測試人員來提供數據。不過這樣溝通和測試成本較高,無法滿足業務快速上線和變化的要求,尤其在集成測試階段這個問題就變得尤為明顯,因為下游數據對于上游來說是不可控的。這樣mock下游數據就變得尤為緊急和重要。

4. Mock框架的選擇

在整個java生態圈中,支持mock的開源框架還是比較多的,比如常用的mockito、powermock、easymock和jmockit等開源框架。這些框架在mock方面都具有比較強大的功能與比較廣泛的使用量。但是這些框架都具有一個相同的缺點,那就是需要或多或少的編碼工作來mock所需要的接口返回數據。

在設計mock框架的時候,我們考慮到盡量讓寫單元測試的人員或研發人員少編碼或不編碼,來獲取不同的業務場景所需要的測試數據。

Mock框架 ***版

該版本的mock框架的整體思想為:結合JSF的特性,Override所有下游接口的方法,然后將實現下游接口的應用部署到測試環境,發布一個有別與真實下游接口的服務,在接口調用的時候,通過不同的JSF接口別名來進行區分。Mock的數據存儲在數據庫中。

該框架類調用關系:

Mock框架

Mock接口的具體實現:

  1.   public class OrderverExportServiceImp extends OrderverExportServiceAdapter {   
  2.       @Resource   
  3.       private OrderverMapper orderverMapper;   
  4.      
  5.       @Override   
  6.       public ResultPojo getOrderInfoById (long orderId) {   
  7.   OrderverPojo orderverMock=orderverMapper.getOrderId(new Long(orderId).toString());   
  8.           ResultPojo result=new ResultPojo ();   
  9.           result.setFiled1(null);   
  10.         result.setFiled1(0);   
  11.         result.setFiled2(null);   
  12.         result.setFiled3(null);   
  13.         result.setResult(true);   
  14.         …//mock需要的數據 
  15.         result.setReturnObject(orderver);   
  16.         return result;   
  17.     }   

Mock服務發布完后的效果:

Mock服務發布完后的效果

在集成測試階段,只需要修改該接口的JSF別名,就可以實現該接口的mock調用。

  1. <jsf:consumer id="orderverExportServiceJsf" interface="xxx.xxx.xxx.xxx.xxx.OrderverExportService"   
  2.                protocol="jsf" timeout="${timeout}"  
  3.                alias="${alias}" retries="2" serialization="hessian">   
  4.  </jsf:consumer>  
  5.   alias=orderver_mock 

該框架的優缺點

優點:

  • 做集成測試用例設計時,不用編寫代碼,只需要維護測試場景所需要的返回數據;
  • 該框架不僅可以用在集成測試中,在下游接口無變更的前提下,同時還可以用在后續系統測試與聯調測試階段。

缺點:

  • mock服務的發布依賴于服務器與數據庫,當依賴的服務器或數據庫出現跌機情況時,該mock服務不用;
  • 該框架的維護成本比較大,當下游依賴的接口較多時,所有的服務包含的方法均需要進行override;
  • 當下游的接口定義發生變化時比如新增接口方法,該mock服務需要重新override該新增的方法并且需要重新打包部署;
  • 下游接口方法的數據結構發生變化時,存儲數據的數據表結構需要做相應的調整,對于業務變化較快的系統,這種類型的改動頻率還是較高。

Mock框架 第二版

為了解決上述mock框架依賴服務器與數據庫的問題,我們又做了第二次嘗試。將mock框架設計為jar包的形式,提供給程序來調用。在下游接口的實現方式上第二版與***版保持不變,同時業務數據不放數據庫,而是將業務數據放到文件中。變化的點為接口調用上需要將對應的jsf:comsumer節點替換為對應的實際mock的實現類。

Mock接口的實現:

  1.   @Service("orderverExportService")   
  2.  public class OrderverExportServiceMock extends OrderverExportServiceAdapter { 
  3.       @Override   
  4.       public ResultPojo getOrderInfoById(long orderId) {   
  5.           ResultPojo result=new ResultPojo ();   
  6.           result.setFiled1(null);   
  7.           result.setFiled1(0);   
  8.           result.setFiled2(null);   
  9.           result.setFiled3(null);   
  10.         result.setResult(true);   
  11.         …//mock需要的數據 
  12.         result.setReturnObject(orderver);   
  13.         return result;   
  14.     }   
  15. }  

Mock接口調用配置:

  1. <!--<jsf:consumer id="orderverExportServiceJsf" interface="xxx.xxx.xxx.xxx.xxx.OrderverExportService" protocol="jsf" timeout="${timeout}"alias="${alias}" retries="2" serialization="hessian"> 
  2. </jsf:consumer>--> 
  3. <bean id="orderverExportServiceJsf" class="xxx.xxx.xxx.xxx.xxx.OrderverExportServiceMock"></bean>   

該框架的優缺點

優點:

  • 做集成測試用例設計時,不用編寫代碼,只需要維護測試場景所需要的返回數據;
  • 相比較***個版本,該版本在執行效率上有了較大的提升,因為mock類的加載是走的本地Spring配置文件,同時數據加載也是走的本地文件;
  • 無需再依賴于服務器部署和數據庫依賴。

缺點:

  • 該框架的維護成本比較大,當下游依賴的接口較多時,所有的服務包含的方法均需要進行override;
  • 當下游的接口定義發生變化時比如新增接口方法,該mock服務需要重新override該新增的方法并且需要重新打包,然后上傳到maven倉庫;
  • 下游接口方法的數據結構發生變化時,對于業務變化較快的系統,這種類型的改動頻率還是較高。

Mock框架 第三版

隨著需要mock的接口變的越來越龐大,以上兩種mock框架的實現的缺點就變的越來越突出。該框架可以說從根本上解決了上述框架實現的問題。因為該框架充分利用了JDK的動態代理,反射機制以及JSF提供的高級特性來實現我們的mock框架。框架維護任務可以做到無需做更多的針對接口的編碼任務。測試人員只需要將重點放在測試數據的準備上。

框架整體調用時序圖:

框架的核心類圖:

框架的核心類圖

其中DOSAutoTest類用來啟動和發布JSF的mock接口,JSFMock通過動態代理的方式,實現下游接口的mock功能并根據測試場景獲取對應的mock數據。

其中,mock的數據以json格式存儲在mock框架項目工程的指定目錄下。

該框架解決的問題:

  • 省去了利用第三方mock框架如jmockit,mockito,powermock時,需要在單元測試或集成測試類中寫mock代碼的麻煩;
  • 該框架模擬數據返回時,完全的模擬了接口之間的調用關系;
  • 測試人員或研發人員在利用該框架mock數據時,無需額外的代碼,就可以實現mock數據的返回;
  • 在模擬下游數據返回時,發布的mock接口調用完成后就自行銷毀,無需額外服務器進行部署與維護。
  • 在進行接口mock時,無需在mock框架中添加相關的接口maven依賴。

單元測試展開方式

1. 單元測試應該由誰編寫

單元測試由誰編寫?針對這個問題,大家在網上會找到不同的觀點:

  • 一個觀點是,誰寫代碼,誰自己寫單元測試。當然,有的結對編程里面,也有相互寫的,不過,這個過程中,兩個人是共同完成的代碼。也不違反誰寫代碼誰寫單元測試的原則。
  • 另一個觀點是單元測試應該由其它的研發人員或測試人員來進行編寫,理由大概可以理解為對于非代碼編寫人員來說,在設計單元測試用例的時候,對應的是一個黑盒。在這樣的背景下,設計出來的用例覆蓋程度更高。

2. 單元測試的行業現狀

如果研發來負責單元測試的編寫,很多時候研發人員都不編寫單元測試。研發人員不編寫單元測試的原因其實也是比較容易理解的,因為編寫單元測試用例工作太耗時。有時候研發的經理或項目的業務方會認為單元測試用例會減緩項目的整體進度。有時候甚至整個公司層面都不認可花費大量的時間在單元測試上是合理的,尤其是在項目周期緊張和業務變動較大的項目上。因為單元測試從一定程度上來說確實增加的研發人員的編碼量,同時還會增加代碼的維護成本。

如果測試來負責單元測試的編寫,目前的現狀是測試人員需要時間理解代碼,寫單元測試的時間會變長。有代碼修改之后,在項目的測試壓力之下,有的測試人員,就選擇不維護單元測試,而選擇趕緊完成傳統的手工測試。

3. 單元測試用例自動生成

人工編寫測試用例成本增加,那么我們考慮是否可以通過自動生成的方式來實現單元測試呢?EvoSuite是由Sheffield等大學聯合開發的一種開源工具,用于自動生成測試用例集,生成的測試用例均符合Junit的標準,可直接在Junit中運行。

對于非業務相關的模塊,在單元測試的實踐中,就可以直接使用上述工具來自動生成單元測試代碼。雖然該工具只是輔助測試,并不能完全取代人工,測試用例的正確與否還需人工判斷,但是通過使用此自動測試工具能夠在保證代碼覆蓋率的前提下極大地提高測試人員的開發效率。

下面來詳細介紹如何使用該工具生成單元測試用例以及如何檢查單元用例的正確性。

EvoSuite為Maven項目提供了一個插件,該插件的具體配置如下所示:

  1.   <plugin>   
  2.      <groupId>org.evosuite.plugins</groupId>   
  3.      <artifactId>evosuite-maven-plugin</artifactId>   
  4.      <version> ${evosuiteVersion} </version>   
  5.      <executions><execution>   
  6.         <goals>   
  7.            <goal>   
  8.               prepare   
  9.            </goal>   
  10.       </goals>   
  11.       <phase>   
  12.          process-test-classes   
  13.       </phase>   
  14.    </execution></executions>   
  15. </plugin>    

除了需要配置上述plugin外,maven還需要做如下的配置:

  1.   <dependency>   
  2.      <groupId>org.evosuite</groupId>   
  3.      <artifactId>evosuite-standalone-runtime</artifactId>   
  4.      <version>${evosuiteVersion}</version>   
  5.      <scope>test</scope>   
  6.   </dependency>   
  7.   <!--上述依賴主要是用來自動生成單元測試用例-->   
  8.   <plugin>   
  9.      <groupId>org.apache.maven.plugins</groupId>   
  10.    <artifactId>maven-surefire-plugin</artifactId>   
  11.    <version>${maven-surefire-plugin-version}</version>   
  12.    <configuration>   
  13.       <systemPropertyVariables>   
  14.          <java.awt.headless>true</java.awt.headless>   
  15.       </systemPropertyVariables>   
  16.       <testFailureIgnore>true</testFailureIgnore>   
  17.       <skipTests>false</skipTests>   
  18.       <properties>   
  19.          <property>   
  20.             <name>listener</name>   
  21.             <value>org.evosuite.runtime.InitializingListener</value>   
  22.          </property>   
  23.       </properties>   
  24.    </configuration>   
  25. </plugin>  

上述plugin主要是用來混合執行手動設計的單元測試用例和使用EvoSuite自動生成的單元測試用例。

以上EvoSuite所需的plugin和maven依賴配置完成之后,就可以使用maven命令來自動生成單元測試用例并執行了。

  1. mvn -DmemoryInMB=2000 -Dcores=2 evosuite:generate evosuite:export test  

生成測試用例后,可以通過人工排查生成測試用例的正確性。

寫在***

不管是研發還是測試負責集成或單元測試,選取適合自身項目的mock框架,一方面可以縮短測試代碼的編寫時間,另一方面可以加速測試代碼的執行效率,同時又可以降低測試代碼的維護成本。不管是行業中通用的mock框架還是定制化的框架,都可以廣泛的應用的測試中。

因為做mock框架不是目的,目的是為了能高效的設計出更多的測試覆蓋場景,來進一步提升測試效率、保證產品質量和將測試人員從繁重的手工測試中得以解放。

當單元測試代碼已經準備完畢,如何才能發揮測試代碼的作用以及如何評價測試代碼的效率和做單元測試的投入產出比如何來衡量等等這些問題,將在后續的文章中給大家一一解答。

【本文來自51CTO專欄作者張開濤的微信公眾號(開濤的博客),公眾號id: kaitao-1234567】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2024-07-29 12:12:59

2022-05-12 09:37:03

測試JUnit開發

2017-01-14 23:42:49

單元測試框架軟件測試

2017-03-23 16:02:10

Mock技術單元測試

2011-11-30 22:03:49

ibmdwJava

2023-10-28 10:10:41

2011-06-20 16:41:59

單元測試

2009-06-01 10:47:32

jboss seam例jboss seam開jboss seam

2024-10-16 16:09:32

2023-12-24 10:00:35

Java單元測試

2010-12-23 15:55:00

上網行為管理

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2010-08-27 09:11:27

Python單元測試

2024-12-02 18:16:56

2024-08-19 00:35:00

Pythondict遍歷列表推導式

2017-03-30 07:56:30

測試前端代碼

2022-09-15 10:02:58

測試軟件

2011-05-16 16:52:09

單元測試徹底測試

2009-08-19 09:00:48

單元測試框架自動化測試
點贊
收藏

51CTO技術棧公眾號

久久久精品国产一区二区| 欧美视频在线观看 亚洲欧| 国产精品视频最多的网站| 天天色天天综合| 综合中文字幕| 色久综合一二码| 黄色www在线观看| 日本黄色免费视频| 日本vs亚洲vs韩国一区三区二区| 久久天天躁狠狠躁夜夜av| 国产麻豆剧传媒精品国产av| 99久久er| 五月婷婷综合网| 亚洲视频精品一区| 日本黄色大片视频| 黄色精品一二区| 欧美在线性爱视频| 久久97人妻无码一区二区三区| 亚洲婷婷伊人| 日韩欧美一区二区三区在线| 欧美日韩亚洲一二三| 日本性爱视频在线观看| 国产拍揄自揄精品视频麻豆| 国产精品综合久久久久久| 中文在线免费看视频| 国产日韩综合| 久久久久久久久久久av| 精品在线观看一区| 久久最新网址| 亚洲国产中文字幕久久网| 四虎成人在线播放| 国产精品麻豆成人av电影艾秋| 精品成人在线视频| 国产真实老熟女无套内射| 米奇777四色精品人人爽| 久久久久久麻豆| 精品福利影视| 亚洲黄色在线播放| 激情六月婷婷久久| 国产欧美精品日韩| 中文字幕免费视频观看| 亚洲永久免费精品| 久久久欧美一区二区| 青青草原免费观看| 亚洲午夜精品一区 二区 三区| 国产亚洲a∨片在线观看| 天天插天天射天天干| 一区二区精彩视频| 日韩丝袜美女视频| 国产老头和老头xxxx×| 精品一区视频| 欧美一区二区三区精品| 巨乳女教师的诱惑| 久久丁香四色| 日韩欧美的一区二区| 亚洲精品无码久久久久久久| 国产亚洲字幕| 日韩欧美国产精品一区| 99riav国产精品视频| jizz18欧美18| 亚洲第一页中文字幕| 日韩综合第一页| 欧美一级一片| 亚洲欧美一区二区三区四区| 人妻一区二区视频| 手机在线一区二区三区| 久久亚洲成人精品| 九九热视频精品| 亚洲手机视频| 38少妇精品导航| 午夜精品一区二| 免费高清成人在线| 91丝袜美腿美女视频网站| 精品女同一区二区三区| 成人一区二区三区| 快播亚洲色图| 国产区高清在线| 国产精品二区一区二区aⅴ污介绍| 欧美爱爱视频网站| 超免费在线视频| 欧美日韩激情视频| 人人干人人干人人| 欧洲大片精品免费永久看nba| 337p日本欧洲亚洲大胆色噜噜| 在线黄色免费网站| 国产成人一区二区三区影院| 久久久国产精品亚洲一区| 中日韩一级黄色片| 99re国产精品| 国产精品亚发布| 理论片中文字幕| 国产网站一区二区| 日韩精品综合在线| 亚洲四虎影院| 精品国产91久久久久久久妲己| 中文字幕一区二区人妻在线不卡| 日韩理论片av| 国模精品视频一区二区三区| 亚洲精品国产精品乱码视色| 国产成人精品免费看| 日韩.欧美.亚洲| 日本高清在线观看| 欧洲亚洲国产日韩| 国产精品无码自拍| 日韩欧美中文| 91av在线免费观看视频| ,亚洲人成毛片在线播放| 福利一区二区在线| 亚洲人成网站在线观看播放| free性m.freesex欧美| 欧美精品日韩综合在线| 亚洲午夜福利在线观看| 亚洲欧美亚洲| 国产日韩欧美一二三区| 免费福利在线视频| 亚洲一区二区在线播放相泽 | 亚洲av成人无码一二三在线观看| 成人av国产| 91av在线免费观看视频| 精品国自产拍在线观看| 欧美经典三级视频一区二区三区| 女人天堂av手机在线| 久久99成人| 色婷婷综合成人av| 一级做a爰片久久毛片| 粉嫩av一区二区三区粉嫩 | 成人av电影观看| 亚洲成人免费视频| 国模大尺度视频| 婷婷激情图片久久| 国产精品视频播放| 国产一二在线观看| 色www精品视频在线观看| 91人人澡人人爽| 你懂的国产精品永久在线| 国产欧美一区二区三区在线看| 免费黄色片在线观看| 精品久久久久久亚洲国产300| 国产乱国产乱老熟300部视频| 99国产**精品****| 国产一区二区在线免费| 欧洲毛片在线| 欧美日韩国产麻豆| 97人妻精品一区二区三区免| 亚洲久久一区| 国产在线精品一区| 超碰激情在线| 亚洲国内高清视频| www.国产高清| 久久蜜桃av一区精品变态类天堂 | 日韩欧美一级二级三级久久久| 少妇视频一区二区| 久久99精品久久久| 日韩第一页在线观看| 爱情电影网av一区二区| 久久人人爽人人爽爽久久| 97人妻一区二区精品免费视频| 国产精品不卡在线观看| 日本不卡一区二区在线观看| 亚洲精品国产偷自在线观看| 97碰碰视频| 538视频在线| 亚洲精品视频在线观看视频| 波多野结衣不卡| 国产精品久久久久久妇女6080 | 成人全视频免费观看在线看| 日韩中文字幕精品| 国产黄色一区二区| 亚洲国产精品久久艾草纯爱| 精品无码在线视频| 日本中文一区二区三区| 亚洲一区精品视频| 人人九九精品视频| 91超碰中文字幕久久精品| 久久久久久久影视| 欧美精品在欧美一区二区少妇| 色欲人妻综合网| 不卡的av电影| 91视频免费版污| 亚洲在线久久| 蜜桃久久精品乱码一区二区| 97精品资源在线观看| 久久久久久久一区二区| 黄色av免费在线看| 欧美精品在线一区二区三区| 国产在线视频卡一卡二| 久久精品在线免费观看| 成年网站免费在线观看| 亚洲麻豆av| 亚洲一区尤物| 老司机成人在线| 国产精品久久久久久网站| 污污视频在线| 亚洲天堂av网| 亚洲精品成av人片天堂无码| 在线视频欧美精品| 久久久久黄色片| 国产网站一区二区| 稀缺呦国内精品呦| 毛片基地黄久久久久久天堂| 99热亚洲精品| 99热精品久久| 欧美黑人xxxxx| 无人区乱码一区二区三区| 国产精品wwwwww| а√在线天堂官网| 一区二区三区无码高清视频| 人妻中文字幕一区| 9191国产精品| 少妇无套内谢久久久久| 午夜激情一区二区三区| 91麻豆精品成人一区二区| 久久精品一区二区三区四区| 国产成人精品一区二区在线小狼| 日本欧美一区二区三区乱码| 缅甸午夜性猛交xxxx| 亚州av乱码久久精品蜜桃 | 青青草免费观看免费视频在线| 欧美一级淫片007| 最新黄色网址在线观看| 欧美日韩一区免费| 日本少妇久久久| 亚洲另类春色国产| 五月激情四射婷婷| 久久久久久97三级| 国产精品揄拍100视频| 成人精品免费看| 色婷婷狠狠18禁久久| 国精产品一区一区三区mba视频| 男人舔女人下面高潮视频| 亚洲免费影视| 午夜精品久久久久久久无码| 亚洲视频免费| av日韩在线看| 欧美久久成人| 欧美日韩中文字幕在线播放| 亚欧美无遮挡hd高清在线视频| 亚洲欧美日产图| 久久高清精品| 亚洲资源在线网| 91亚洲一区| 一区二区三区在线观看www| 欧美一站二站| 亚洲精品中文字幕乱码三区不卡| 精品国产精品国产偷麻豆| 日韩国产在线一区| 不卡在线一区| 一区二区在线高清视频| 日韩欧美高清| 亚洲一区二区三区欧美| 亚洲xxx拳头交| 亚洲精品偷拍视频| 欧美日韩理论| 霍思燕三级露全乳照| 国产亚洲毛片| 国产一区二区视频免费在线观看 | 欧美专区在线视频| 亚洲精品日产| 国产精品7m视频| 国产美女久久| 亚洲一区二区免费| 一区二区三区四区视频免费观看| 国产精品美女诱惑| 思热99re视热频这里只精品| 欧美在线视频二区| 日韩在线高清| av日韩在线看| 国产一区二区你懂的| 亚洲视频在线观看一区二区三区| 日本v片在线高清不卡在线观看| 欧美特黄aaa| 成人午夜av影视| 国产熟妇久久777777| 国产精品色眯眯| 久久一级黄色片| 一本久久a久久免费精品不卡| 亚洲一区二区三区高清视频| 日韩亚洲欧美在线| 欧洲成人av| 久久伊人精品天天| 日韩电影毛片| 成人免费xxxxx在线观看| 成人av资源网址| 视频二区一区| 国产中文一区| 国产免费视频传媒| 国产大陆精品国产| 国产精品成人无码免费| 一区二区三区精品在线| 丁香六月婷婷综合| 91精品国产高清一区二区三区| 国产精品国产高清国产| 中文字幕无线精品亚洲乱码一区 | 国产在线观看免费| 欧美精品在线播放| 亚洲www啪成人一区二区| 99久久99久久| 日韩欧美一区二区三区免费看| 日韩小视频网站| 精品一区二区日韩| 女同性恋一区二区三区| 国产精品精品国产色婷婷| 国产午夜免费视频| 欧美剧情片在线观看| 极品白浆推特女神在线观看| 九九视频直播综合网| 日韩漫画puputoon| 久久99精品久久久久久久青青日本| 97精品一区| 国产一区亚洲二区三区| 成人一区二区三区| 三级影片在线看| 欧美日韩视频一区二区| 台湾av在线二三区观看| 九九九久久久久久| 日韩毛片免费看| 青娱乐一区二区| 亚洲精品婷婷| 亚洲av无码久久精品色欲| 国产精品欧美久久久久一区二区| 久久久久久久久影院| 日韩三级视频在线观看| 免费日本一区二区三区视频| 国产精品第一页在线| 四虎5151久久欧美毛片| 国产婷婷一区二区三区| 国产真实乱偷精品视频免| 男人天堂资源网| 欧美性三三影院| 黄色毛片在线看| 日本伊人精品一区二区三区介绍| 精品三级av| 成人网站免费观看入口| 成人天堂资源www在线| 男女免费视频网站| 日韩一区二区免费在线观看| caopeng在线| 成人中文字幕在线观看| 色无极亚洲影院| 天天看片天天操| 1000部国产精品成人观看| 国产一区二区三区四区视频 | 精品中文字幕人| 一本色道久久综合亚洲精品高清| 欧美xxxx×黑人性爽| 精品国产福利在线| 青青视频在线观| 国产91在线高潮白浆在线观看| 国产精品自拍区| 久久99999| 日韩一区中文字幕| 国产精品老熟女视频一区二区| www.欧美精品| 精品亚洲二区| 成人短视频在线观看免费| 风流少妇一区二区| 日韩精品久久久久久久| 日韩精品日韩在线观看| 户外露出一区二区三区| 视频一区二区三区在线观看| 麻豆视频观看网址久久| √天堂中文官网8在线| 日韩欧美电影一区| 自拍视频在线看| 亚洲精品久久区二区三区蜜桃臀| 国内一区二区在线| 国产一级生活片| 亚洲人成人99网站| 欧美特黄色片| 欧妇女乱妇女乱视频| 91免费国产在线观看| 九九热最新视频| 久久av资源网站| 久久这里只有精品一区二区| 欧美亚洲日本一区二区三区| 国产日韩精品久久久| 国产高清在线观看视频| 2019中文字幕在线免费观看| 日本精品黄色| 亚洲av无码专区在线播放中文| 日韩欧美极品在线观看| 欧美日韩欧美| 国产精品三区四区| 青青草一区二区三区| 国产这里有精品| 亚洲午夜国产成人av电影男同| 欧美视频二区欧美影视| 四虎永久在线精品无码视频| 综合久久久久久| 色视频免费在线观看| 成人黄色片网站| 亚洲深夜影院| 波多野结衣亚洲一区二区| 亚洲人成欧美中文字幕| 天堂va在线高清一区| 国产精品拍拍拍| 一区二区三区.www| 成人在线免费电影| 狠狠久久综合婷婷不卡| 九九九久久久精品|