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

這可能是解決你Spring MVC接口漏洞百出的關鍵

開發(fā) 后端
在 Java 開發(fā)中接觸的開發(fā)者大多數(shù)不太注重對接口的測試,結(jié)果在聯(lián)調(diào)對接中出現(xiàn)各種問題。也有的使用 Postman 等工具進行測試,雖然在使用上沒有什么問題,如果接口增加了權限測試起來就比較惡心了。

[[346147]]

1. 前言

在 Java 開發(fā)中接觸的開發(fā)者大多數(shù)不太注重對接口的測試,結(jié)果在聯(lián)調(diào)對接中出現(xiàn)各種問題。也有的使用 Postman 等工具進行測試,雖然在使用上沒有什么問題,如果接口增加了權限測試起來就比較惡心了。所以建議在單元測試中測試接口,保證在交付前先自測接口的健壯性。今天就來分享一下胖哥在開發(fā)中是如何對 Spring MVC 接口進行測試的。

在開始前請務必確認添加了Spring Boot Test相關的組件,在最新的版本中應該包含以下依賴:

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-test</artifactId> 
  4.     <scope>test</scope> 
  5.     <exclusions> 
  6.         <exclusion> 
  7.             <groupId>org.junit.vintage</groupId> 
  8.             <artifactId>junit-vintage-engine</artifactId> 
  9.         </exclusion> 
  10.     </exclusions> 
  11. </dependency> 

本文是在Spring Boot 2.3.4.RELEASE下進行的。

2. 單獨測試控制層

如果我們只需要對控制層接口(Controller)進行測試,且該接口不依賴@Service、@Component等注解聲明的 Spring Bean 時,可以借助@WebMvcTest來啟用只針對 Web 控制層的測試,例如

  1. @WebMvcTest 
  2. class CustomSpringInjectApplicationTests { 
  3.     @Autowired 
  4.     MockMvc mockMvc; 
  5.  
  6.     @SneakyThrows 
  7.     @Test 
  8.     void contextLoads() { 
  9.         mockMvc.perform(MockMvcRequestBuilders.get("/foo/map")) 
  10.                 .andExpect(ResultMatcher.matchAll(status().isOk(), 
  11.                         content().contentType(MediaType.APPLICATION_JSON), 
  12.                         jsonPath("$.test"Is.is("hello")))) 
  13.                 .andDo(MockMvcResultHandlers.print()); 
  14.     } 
  15.  

這種方式要快的多,它只加載了應用程序的一小部分。但是如果你涉及到服務層這種方式是不湊效的,我們就需要整體測試了方了。

3. 整體測試

大多數(shù) Spring Boot 下的接口測試是整體而又全面的測試,涉及到控制層、服務層、持久層等方方面面,所以需要加載比較完整的 Spring Boot 上下文。這時我們可以這樣做,聲明一個抽象的測試基類:

  1. package cn.felord.custom; 
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired; 
  4. import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; 
  5. import org.springframework.boot.test.context.SpringBootTest; 
  6. import org.springframework.test.web.servlet.MockMvc; 
  7.  
  8.  
  9. /** 
  10.  * 測試基類, 
  11.  * @author felord.cn 
  12.  */ 
  13. @SpringBootTest 
  14. @AutoConfigureMockMvc 
  15. abstract class CustomSpringInjectApplicationTests { 
  16.     /** 
  17.      * The Mock mvc. 
  18.      */ 
  19.     @Autowired 
  20.     MockMvc mockMvc; 
  21.     // 其它公共依賴和處理方法 

只有當@AutoConfigureMockMvc存在時MockMvc才會被注入 Spring IoC。

然后針對具體的控制層進行如下測試代碼的編寫:

  1. package cn.felord.custom; 
  2.  
  3. import lombok.SneakyThrows; 
  4. import org.hamcrest.core.Is
  5. import org.junit.jupiter.api.Test; 
  6. import org.springframework.http.MediaType; 
  7. import org.springframework.test.web.servlet.ResultMatcher; 
  8. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; 
  9. import org.springframework.test.web.servlet.result.MockMvcResultHandlers; 
  10.  
  11. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; 
  12.  
  13. /** 
  14.  * 測試FooController. 
  15.  * 
  16.  * @author felord.cn 
  17.  */ 
  18. public class FooTests extends CustomSpringInjectApplicationTests { 
  19.     /** 
  20.      * /foo/map接口測試. 
  21.      */ 
  22.     @SneakyThrows 
  23.     @Test 
  24.     void contextLoads() { 
  25.         mockMvc.perform(MockMvcRequestBuilders.get("/foo/map")) 
  26.                 .andExpect(ResultMatcher.matchAll(status().isOk(), 
  27.                         content().contentType(MediaType.APPLICATION_JSON), 
  28.                         jsonPath("$.test"Is.is("bar")))) 
  29.                 .andDo(MockMvcResultHandlers.print()); 
  30.     } 

4. MockMvc 測試

集成測試時,希望能夠通過輸入 URL 對 Controller 進行測試,如果通過啟動服務器,建立 http client 進行測試,這樣會使得測試變得很麻煩,比如,啟動速度慢,測試驗證不方便,依賴網(wǎng)絡環(huán)境等,為了可以對 Controller 進行測試,所以引入了MockMvc。

MockMvc實現(xiàn)了對 Http 請求的模擬,能夠直接使用網(wǎng)絡的形式,轉(zhuǎn)換到 Controller 的調(diào)用,這樣可以使得測試速度快、不依賴網(wǎng)絡環(huán)境,而且提供了一套驗證的工具,這樣可以使得請求的驗證統(tǒng)一而且很方便。接下來我們來一步步構(gòu)造一個測試的模擬請求,假設我們存在一個下面這樣的接口:

  1. @RestController 
  2. @RequestMapping("/foo"
  3. public class FooController { 
  4.     @Autowired 
  5.     private MyBean myBean; 
  6.  
  7.     @GetMapping("/user"
  8.     public Map<String, String> bar(@RequestHeader("Api-Version") String apiVersion, User user) { 
  9.         Map<String, String> map = new HashMap<>(); 
  10.         map.put("test", myBean.bar()); 
  11.         map.put("version", apiVersion); 
  12.         map.put("username"user.getName()); 
  13.         //todo your business 
  14.         return map; 
  15.     } 

參數(shù)設定為name=felord.cn&age=18,那么對應的 HTTP 報文是這樣的:

  1. GET /foo/user?name=felord.cn&age=18 HTTP/1.1 
  2. Host: localhost:8888 
  3. Api-Version: v1 

可以預見的返回值為:

  1.     "test""bar"
  2.     "version""v1"
  3.     "username""felord.cn" 

事實上對接口的測試可以分為以下幾步。

構(gòu)建請求

構(gòu)建請求由MockMvcRequestBuilders負責,他提供了請求方法(Method),請求頭(Header),請求體(Body),參數(shù)(Parameters),會話(Session)等所有請求的屬性構(gòu)建。/foo/user接口的請求可以轉(zhuǎn)換為:

  1. MockMvcRequestBuilders.get("/foo/user"
  2.                 .param("name""felord.cn"
  3.                 .param("age""18"
  4.                 .header("Api-Version""v1"

執(zhí)行 Mock 請求

然后由MockMvc執(zhí)行 Mock 請求:

  1. mockMvc.perform(MockMvcRequestBuilders.get("/foo/user"
  2.                 .param("name""felord.cn"
  3.                 .param("age""18"
  4.                 .header("Api-Version""v1")) 

對結(jié)果進行處理

請求結(jié)果被封裝到ResultActions對象中,它封裝了多種讓我們對 Mock 請求結(jié)果進行處理的方法。

對結(jié)果進行預期期望

ResultActions#andExpect(ResultMatcher matcher)方法負責對響應的結(jié)果的進行預期期望,看看是否符合測試的期望值。參數(shù)ResultMatcher負責從響應對象中提取我們需要期望的部位進行預期比對。

假如我們期望接口/foo/user返回的是JSON,并且 HTTP 狀態(tài)為200,同時響應體包含了version=v1的值,我們應該這么聲明:

  1. ResultMatcher.matchAll(MockMvcResultMatchers.status().isOk(), 
  2.                MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON), 
  3.                MockMvcResultMatchers.jsonPath("$.version"Is.is("v1"))); 

JsonPath是一個強大的 JSON 解析類庫,請通過其項目倉庫https://github.com/json-path/JsonPath了解。

對響應進行處理

ResultActions#andDo(ResultHandler handler)方法負責對整個請求/響應進行打印或者 log 輸出、流輸出,由MockMvcResultHandlers工具類提供這些方法。我們可以通過以上三種途徑來查看請求響應的細節(jié)。

例如/foo/user接口:

  1. MockHttpServletRequest: 
  2.       HTTP Method = GET 
  3.       Request URI = /foo/user 
  4.        Parameters = {name=[felord.cn], age=[18]} 
  5.           Headers = [Api-Version:"v1"
  6.              Body = null 
  7.     Session Attrs = {} 
  8.  
  9. Handler: 
  10.              Type = cn.felord.xbean.config.FooController 
  11.            Method = cn.felord.xbean.config.FooController#urlEncode(String, Params) 
  12.  
  13. Async: 
  14.     Async started = false 
  15.      Async result = null 
  16.  
  17. Resolved Exception: 
  18.              Type = null 
  19.  
  20. ModelAndView: 
  21.         View name = null 
  22.              View = null 
  23.             Model = null 
  24.  
  25. FlashMap: 
  26.        Attributes = null 
  27.  
  28. MockHttpServletResponse: 
  29.            Status = 200 
  30.     Error message = null 
  31.           Headers = [Content-Type:"application/json"
  32.      Content type = application/json 
  33.              Body = {"test":"bar","version":"v1","username":"felord.cn"
  34.     Forwarded URL = null 
  35.    Redirected URL = null 
  36.           Cookies = [] 

獲取返回結(jié)果

如果你希望進一步處理響應的結(jié)果,也可以通過ResultActions#andReturn()拿到MvcResult類型的結(jié)果進行進一步的處理。

完整的測試過程

通常andExpect是我們必然會選擇的,而andDo和andReturn在某些場景下會有用,它們兩個是可選的。我們把上面的連在一起。

  1. @Autowired 
  2. MockMvc mockMvc; 
  3.  
  4. @SneakyThrows 
  5. @Test 
  6. void contextLoads() { 
  7.  
  8.      mockMvc.perform(MockMvcRequestBuilders.get("/foo/user"
  9.             .param("name""felord.cn"
  10.             .param("age""18"
  11.             .header("Api-Version""v1")) 
  12.             .andExpect(ResultMatcher.matchAll(status().isOk(), 
  13.                     content().contentType(MediaType.APPLICATION_JSON), 
  14.                     jsonPath("$.version"Is.is("v1")))) 
  15.             .andDo(MockMvcResultHandlers.print()); 
  16.  

這種流式的接口單元測試從語義上看也是比較好理解的,你可以使用各種斷言、正例、反例測試你的接口,最終讓你的接口更加健壯。

5. 總結(jié)

一旦你熟練了這種方式,你編寫的接口將更加具有權威性而不會再漏洞百出,甚至有時候你也可以使用 Mock 來設計接口,使之更加貼合業(yè)務。所以 CRUD 不是完全沒有技術含量,高質(zhì)量高效率的 CRUD 往往需要這種工程化的單元測試來支撐。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關推薦

2017-04-11 21:37:26

2013-07-08 10:36:57

2009-12-15 09:04:40

Windows 7系統(tǒng)漏洞

2016-10-26 10:20:22

2025-08-05 07:41:00

2015-03-19 10:01:26

2017-02-20 15:51:07

2017-06-08 11:11:32

互聯(lián)網(wǎng)

2018-07-16 10:10:43

WiFi上網(wǎng)網(wǎng)速

2021-08-27 10:14:22

機器學習工具手冊人工智能

2018-10-25 09:37:02

Docker入門容器

2021-11-03 16:10:16

RedisJava內(nèi)存

2024-08-28 11:56:33

2025-11-17 09:19:10

AI模型開源

2020-12-28 10:22:43

手機App青少年模式網(wǎng)絡

2023-02-26 00:00:01

Spring數(shù)據(jù)庫組件

2023-02-26 10:14:51

Spring第三方庫

2023-01-11 08:24:32

2018-11-12 00:16:21

云計算行業(yè)科技

2018-11-05 08:10:30

Netty架構(gòu)模型
點贊
收藏

51CTO技術棧公眾號

中文字幕一区二区三区乱码图片| 日韩免费大片| 中文一区在线播放| 亚洲一区二区三区成人在线视频精品| www.youjizz.com亚洲| 少妇精品久久久一区二区三区| 欧美人与性动xxxx| 亚洲熟妇av日韩熟妇在线| 1pondo在线播放免费| 成人午夜在线视频| 国产伦精品免费视频| 日韩人妻无码一区二区三区99| 日韩专区精品| 国产视频精品一区二区三区| 日本77777| 婷婷激情一区| 午夜电影一区二区三区| 影音先锋亚洲视频| 免费在线稳定资源站| 国产二区国产一区在线观看| 日本国产精品视频| 精品无码人妻一区二区三| 欧美疯狂party性派对| 亚洲美女免费精品视频在线观看| 久久无码人妻一区二区三区| 欧美日韩女优| 欧美性极品少妇精品网站| 欧美视频在线第一页| 日本高清中文字幕在线| 久久久不卡网国产精品一区| 国产精品国产三级国产专区53| 91精品中文字幕| 欧美96一区二区免费视频| 26uuu另类亚洲欧美日本老年| 免费在线黄色片| 午夜精品视频一区二区三区在线看| 亚洲欧美日韩区| 99久久免费看精品国产一区| 超碰地址久久| 精品免费视频一区二区| 精品国产免费久久久久久婷婷| 亚洲国产91视频| 欧美午夜宅男影院| 无码人妻精品一区二区三区66| 欧美裸体视频| 欧美日韩美女在线观看| 黄色av网址在线播放| 999精品网| 精品久久久久久亚洲国产300| 国产欧美日韩小视频| 不卡的av影片| 亚洲成国产人片在线观看| 青春草国产视频| 国产蜜臀av在线播放| 亚洲一二三四久久| 99在线免费视频观看| 国模私拍视频在线播放| 午夜视频在线观看一区二区三区| 人妻无码久久一区二区三区免费| 高清电影在线免费观看| 亚洲成av人片一区二区三区| 国产97在线 | 亚洲| 天堂中文最新版在线中文| 色综合中文字幕| 天堂在线资源视频| 欧美男男gaygay1069| 欧美一区午夜精品| 岛国精品一区二区三区| 小嫩嫩12欧美| 国产一区二区激情| 中国毛片直接看| 欧美 亚欧 日韩视频在线| 性欧美xxxx交| 91麻豆精品在线| 六月婷婷色综合| 91福利入口| 亚洲色图另类小说| 亚洲国产精品v| 国产日产欧美一区二区| 97超碰免费在线| 欧美综合视频在线观看| 欧美又黄又嫩大片a级| 亚洲精品aⅴ| 亚洲精品丝袜日韩| www.99re6| 在线观看视频免费一区二区三区| 日本中文字幕成人| 91麻豆成人精品国产| 成人国产免费视频| 神马影院午夜我不卡| av毛片在线看| 日韩欧美主播在线| 波多野结衣免费观看| 婷婷精品在线观看| 久久久www成人免费精品| 五月婷婷激情网| 美女视频网站久久| 国产综合av一区二区三区| yw视频在线观看| 亚洲国产乱码最新视频| 手机看片一级片| 国产乱人伦丫前精品视频| 永久免费看mv网站入口亚洲| 国产无遮无挡120秒| 美女网站在线免费欧美精品| 久久精品aaaaaa毛片| 好了av在线| 色狠狠综合天天综合综合| 真实乱偷全部视频| 成人激情在线| 青青青国产精品一区二区| 国产99久一区二区三区a片| 久久精品免费在线观看| av在线观看地址| 91麻豆精品| 国产香蕉一区二区三区在线视频 | 乱子伦视频在线看| www.久久99| 国产一区二区激情| 在线观看国产亚洲| 国产高清亚洲一区| 伊人久久大香线蕉精品| 国产成人精品亚洲日本在线观看| 亚洲精品理论电影| 久草资源在线视频| 国产一区二区三区高清播放| 午夜一区二区三视频在线观看| 性爽视频在线| 亚洲电影在线看| 久久无码精品丰满人妻| 国产一区视频导航| 一本一生久久a久久精品综合蜜 | 色女孩综合影院| 中文字幕一区二区久久人妻网站 | 中文字幕久久av| 国产一区99| 国产精品69久久| 久久久资源网| 在线欧美小视频| 色婷婷av777| 日韩制服丝袜先锋影音| 免费亚洲一区二区| 欧美momandson| 亚洲欧美日韩精品久久| 无码免费一区二区三区| 久久免费美女视频| 亚洲不卡视频在线| 成人精品影视| 成人福利视频网| 黄色在线免费网站| 91精品免费在线观看| 唐朝av高清盛宴| 国产aⅴ综合色| 国精产品一区一区三区视频| 九九热播视频在线精品6| 韩国福利视频一区| 欧洲天堂在线观看| 欧洲一区在线观看| 亚洲 欧美 国产 另类| 国产老女人精品毛片久久| 久久香蕉视频网站| 精品视频自拍| 国产va免费精品高清在线| av小片在线| 欧美一区二区三区在线观看| 免费一级片视频| 91亚洲精华国产精华精华液| 欧美三级一级片| 日本一本不卡| 亚洲综合中文字幕68页| gogo高清午夜人体在线| 亚洲天堂网在线观看| 国产精品无码在线播放 | 奇米影视亚洲色图| 精品影片在线观看的网站| 日本久久中文字幕| 免费在线观看一级毛片| 欧美日本韩国一区| 日本一区二区网站| 日本一区二区高清| 亚洲熟女一区二区三区| 视频一区在线视频| 欧美日韩中文字幕在线播放| 欧亚精品一区| 国产精品一二三在线| 欧美xxxx做受欧美88bbw| 亚洲欧美一区二区精品久久久| 91在线你懂的| 天天操天天综合网| 午夜剧场免费在线观看| 91碰在线视频| 亚洲一区二区偷拍| 美女久久网站| 欧美日韩dvd| 成人免费看片39| 国产免费一区| 亚洲成人毛片| 国产精品18久久久久久麻辣| 肉肉视频在线观看| 丝袜美腿精品国产二区| 亚洲色大成网站www| 欧美一区三区四区| 中文字幕永久免费视频| 黄色一区二区在线观看| 国产男女猛烈无遮挡在线喷水| 久久女同互慰一区二区三区| 亚洲精品成人无码毛片| 蜜桃av一区二区| 美女av免费在线观看| 欧美日韩亚洲国产精品| 一本久久a久久精品vr综合| 天堂资源在线亚洲| 国产精品麻豆免费版| 国产精品一区二区美女视频免费看| 欧美在线视频一区二区| 免费污视频在线| 日韩视频―中文字幕| 国产中文字幕在线| 亚洲国产精品电影| 国产黄色av网站| 欧美久久一二三四区| 国产女主播喷水视频在线观看| 午夜不卡av免费| 久久久久亚洲av片无码下载蜜桃| 国产精品传媒视频| 精品熟妇无码av免费久久| 久久久久青草大香线综合精品| 亚洲天堂av网站| 国产成人在线视频网址| 午夜免费视频网站| 国产精品一区二区久激情瑜伽| 在线免费av播放| 视频一区二区三区中文字幕| 欧美日韩在线视频一区二区三区| 亚洲狠狠婷婷| 妞干网在线观看视频| 亚洲天堂激情| 91午夜在线观看| 亚洲国产高清一区二区三区| 日韩精品视频在线观看视频 | 欧美大学生性色视频| 性欧美ⅴideo另类hd| 欧美多人爱爱视频网站| 欧美日韩色网| 欧美激情一区二区三区久久久| 爱情岛亚洲播放路线| 97视频在线播放| 午夜裸体女人视频网站在线观看| 91超碰中文字幕久久精品| 末成年女av片一区二区下载| 欧美在线国产精品| 三上悠亚亚洲一区| 国产精品久久久久久av| 欧美日韩伦理一区二区| 91精品久久久久久久久久另类| 日韩一区二区三区四区五区 | 日韩成人精品视频在线观看| 久草这里只有精品视频| 日本成人在线免费观看| 成人的网站免费观看| 亚洲高清无码久久| 99re这里只有精品6| 懂色av蜜桃av| 亚洲欧美偷拍另类a∨色屁股| 麻豆changesxxx国产| 大荫蒂欧美视频另类xxxx| 天堂网视频在线| 欧美日韩一卡二卡三卡 | 国产福利拍拍拍| 色偷偷久久一区二区三区| 中日韩av在线| 日韩欧美一级精品久久| 天堂中文字幕av| 伊人久久精品视频| 18加网站在线| 91sa在线看| 黄色精品视频| 国产精品露出视频| 欧美裸体在线版观看完整版| 男女啪啪的视频| 99在线精品免费视频九九视| 五月婷婷激情久久| 国产成人免费xxxxxxxx| 在线免费观看成年人视频| 亚洲欧美日韩国产综合| 黑人一级大毛片| 欧美日韩成人在线| 天堂在线视频免费| 久久视频在线观看免费| 裤袜国产欧美精品一区| 亚洲最大激情中文字幕| 你微笑时很美电视剧整集高清不卡| 熟女视频一区二区三区| 欧美一级二区| 国产探花一区二区三区| 国产日韩av一区| 免费网站看av| 欧美日韩精品高清| 天堂资源中文在线| 美女国内精品自产拍在线播放| 中文在线а√在线8| 亚洲精品免费一区二区三区| 自拍偷拍精品| 少妇大叫太大太粗太爽了a片小说| 99精品久久| 日韩中文字幕a| 99久久久精品免费观看国产蜜| 人与动物性xxxx| 欧美性高跟鞋xxxxhd| 亚洲高清视频在线播放| 久久久国产在线视频| 一级毛片久久久| 懂色一区二区三区av片| 亚洲精品成人无限看| 毛葺葺老太做受视频| 成人黄页毛片网站| 久久r这里只有精品| 欧美午夜电影网| 欧美亚洲日本| 97色在线视频| 成功精品影院| 中文精品无码中文字幕无码专区| 麻豆91在线看| 国产sm调教视频| 色哟哟亚洲精品| 头脑特工队2在线播放| 97视频免费看| 麻豆一区二区| 99久久国产综合精品五月天喷水| 国产精品1区二区.| 亚洲国产成人精品综合99| 91精选在线观看| 亚洲成人三级| 国产欧美日韩中文| 日韩夫妻性生活xx| 最近中文字幕一区二区| 国产欧美日韩亚州综合| 伊人久久久久久久久久久久| 亚洲欧洲一区二区三区久久| 久久青草伊人| 蜜桃麻豆91| 久久久人人人| 日本黄色小视频在线观看| 欧美亚洲综合久久| 91女主播在线观看| 国产精品视频一区二区三区四| 精品欧美激情在线观看| 看欧美ab黄色大片视频免费| 国产亚洲短视频| 日韩黄色片网站| 中文字幕在线视频日韩| 91精品国产色综合久久不卡粉嫩| 在线视频福利一区| 国产一区二区在线免费观看| 久久久久亚洲AV成人| 欧美刺激脚交jootjob| 波多野结衣久久| 精品日产一区2区三区黄免费| 国产日韩欧美一区二区三区在线观看| 加勒比一区二区| 欧美日韩一区二区在线观看视频 | 手机av在线网站| 一区二区三区精品视频在线| 人妻偷人精品一区二区三区| 欧美怡春院一区二区三区| 欧美美女一区| 交换做爰国语对白| 偷偷要91色婷婷| 国产福利在线看| 91在线网站视频| 亚洲精品乱码| 欧美激情亚洲色图| 3d成人h动漫网站入口| 女同一区二区免费aⅴ| 久久精品aaaaaa毛片| 久久精品国产一区二区| 国产真实乱偷精品视频| 亚洲天堂网在线观看| 国产专区精品| 免费观看日韩毛片| 成人免费小视频| 香蕉国产在线视频| 国产一区视频在线| 亚洲久色影视| 青青青视频在线免费观看| 日韩你懂的在线播放| 天堂在线中文网官网| 国产精品亚洲天堂| 91天堂素人约啪| 国产乱码精品一区二区三区精东| 亚洲91av视频| 99热国内精品永久免费观看| 波多野结衣视频播放| 欧美美女网站色| 天天综合av| www插插插无码免费视频网站| 久久精品夜色噜噜亚洲aⅴ| 午夜精品无码一区二区三区| 国产精品99导航| 激情av一区|