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

并發模擬工具詳解

開發 開發工具
嚴格來說postMan并不是并發請求,而是串行執行的,現在用postMan更多的是用來測試Http連接的一個工具,但是也是一個很實用的工具,也有一些比較強大的功能和優點

[[380130]]

 簡介:

  • 一、Psotman
  • 二、Apache Bench(AB)
  • 三、JMeter
  • 四、代碼

一、Psotman:Http請求模擬工具

嚴格來說postMan并不是并發請求,而是串行執行的,現在用postMan更多的是用來測試Http連接的一個工具,但是也是一個很實用的工具,也有一些比較強大的功能和優點

1.1 下載地址

  1. 1) Postman for MAC:https://app.getpostman.com/app/download/osx64?utm_source=site&utm_medium=apps&utm_campaign=macapp&_ga=2.21151352.2119858274.1527039878-1088353859.1527039878 
  2. 2) Postman for windows X64:https://app.getpostman.com/app/download/win64?_ga=2.201562513.1250696341.1530543681-1582181135.1530543681 
  3. 3) Postman for windows X86:https://app.getpostman.com/app/download/win32?_ga=2.21151352.2119858274.1527039878-1088353859.1527039878 
  4. 4) Postman for linux X64:https://app.getpostman.com/app/download/linux64?_ga=2.96050783.2119858274.1527039878-1088353859.1527039878 
  5. 5) Postman for Linux X86:https://app.getpostman.com/app/download/linux32?_ga=2.96050783.2119858274.1527039878-1088353859.1527039878 
  6. 6) 官網地址:https://www.getpostman.com/ 

1.2 操作說明(以win64為例)

1、打開Postman,輸入我們需要測試的網址,點擊左邊的"+",保存請求


2、點擊"+"后,彈出下面提示,保存鏈接地址生成測試文件夾名稱

3、保存成功后,選擇"collections"后選擇文件夾名為"gbfTest"的,點擊小三角——點擊Run

 

4、這里我們可以設置請求次數和間隔時間,一般間隔時間會設置為0,設置好之后,我們點擊Run gbfTest運行

5、查看結果,從圖中我們可以看到百度的響應速度還是很快的


6、點擊 Run Summary 可以看到運行結果概述


7、測試全部通過


8、測試結果可以通過點擊Export Results按鈕進行導出,方便分析每次的請求時間

 

 

二、Apace Bench(AB):Apache附帶的工具,測試網站性能

2.1 簡介

Apache Bench 是 Apache 服務器自帶的一個web壓力測試工具,簡稱ab。ab又是一個命令行工具,對發起負載的本機要求很低,根據ab命令可以創建很多的并發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問,因此可以用來測試目標服務器的負載壓力。總的來說ab工具小巧簡單,它不僅可以對apache服務器進行網站訪問壓力測試,也可以對或其它類型的服務器進行壓力測試。比如nginx、tomcat、IIS等,上手學習較快,可以提供需要的基本性能指標,但是沒有圖形化結果,不能監控

2.2 原理

ab命令會創建多個并發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基于URL的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力

2.3 Apache Bench安裝

Apache服務器,下載地址:https://www.apachelounge.com/download/

選擇:httpd-2.4.41-win64-VS16 下載目錄結構:

2.4 Apache Bench 使用

運行環境:Windows7 Apache Bench版本:httpd-2.4.41-win64-VS16

1、進入cmd目錄下,進入我們解壓好的Apache Bench目錄下


3 使用命令

  1. ab -c 10 -n 10 http://www.baidu.com/ 或者 ab.exe -n 1000 -c 500 http://www.baidu.com 

ab -c 10 -n 10 http://www.baidu.com/ 或者 ab.exe -n 1000 -c 500 http://www.baidu.com

對百度首頁進行一個請求總數為1000,本次請求并發數為500的測試


參數分析:

  1. C:\Users\Lenovo\Downloads\httpd-2.4.41-win64-VS16\Apache24\bin>ab.exe -n 1000 -c 
  2.  500 http://www.baidu.com/path 
  3. This is ApacheBench, Version 2.3 <$Revision: 1843412 $> 
  4. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
  5. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  6.  
  7. Benchmarking www.baidu.com (be patient) 
  8. Completed 100 requests 
  9. Completed 200 requests 
  10. Completed 300 requests 
  11. Completed 400 requests 
  12. Completed 500 requests 
  13. Completed 600 requests 
  14. Completed 700 requests 
  15. Completed 800 requests 
  16. Completed 900 requests 
  17. Completed 1000 requests 
  18. Finished 1000 requests 
  19.  
  20.  
  21. Server Software:        Apache      #測試服務器的名字 
  22. Server Hostname:        www.baidu.com  #請求的URL主機名 
  23. Server Port:            80        #請求端口 
  24.  
  25. Document Path:          /path      #請求路徑   
  26. Document Length:        222 bytes    #頁面大小 
  27.  
  28. Concurrency Level:      500        #并發量,設置的參數之一 
  29. Time taken for tests:   45.805 seconds  #整個測試所用的時間/秒 
  30. Complete requests:      1000      #完成的請求數 
  31. Failed requests:        0        #失敗的請求數 
  32. Non-2xx responses:      1000      #接收到的HTTP響應數據的頭信息中含有2XX以外的狀態碼,則會在測試結果中顯示另一個名為“Non-2xx responses”的統計項,用于統計這部分請求數(1000) 
  33. Total transferred:      484000 bytes  #表示所有請求的響應數據長度總和 
  34. HTML transferred:       222000 bytes  #表示所有請求的響應數據中正文數據的總和 
  35. Requests per second:    21.83 [#/sec] (mean)    #吞吐率,吞吐率是與并發數相關的,使請求總數相同,但如果并發數不一樣,吞吐率還是很可能有很大差異的 
  36. Time per request:       22902.310 [ms] (mean)    #用戶平均請求等待時間。也就是一次并發總的時間 
  37. Time per request:       45.805 [ms] (mean, across all concurrent requests)    #服務器平均請求等待時間。也就是一次請求(在本例中也就是500中的平均每一次)所需時間 
  38. Transfer rate:          10.32 [Kbytes/sec] received    #這些請求在單位時間內從服務器獲取的數據長度 
  39.  
  40. Connection Times (ms) 
  41.               min  mean[+/-sd] median   max 
  42. Connect:        9   46 460.5     11    9060 
  43. Processing:    25 20066 13796.4  14798   36549 
  44. Waiting:       14 16163 15029.9   8460   36484 
  45. Total:         37 20111 13785.1  22804   36562 
  46.  
  47. Percentage of the requests served within a certain time (ms) 
  48.   50%  22804     #50%用戶請求在22804ms內返回 
  49.   66%  33043    #66%用戶請求在33043ms內返回 
  50.   75%  34181 
  51.   80%  34791 
  52.   90%  35877 
  53.   95%  36416 
  54.   98%  36502    #98%用戶請求在36502ms內返回 
  55.   99%  36512 
  56.  100%  36562 (longest request) 

命令參數參考:

  1. -n requests Number of requests to perform //本次測試發起的總請求數 
  2. -c concurrency Number of multiple requests to make   //一次產生的請求數(或并發數) 
  3. -t timelimit Seconds to max. wait for responses    //測試所進行的最大秒數,默認沒有時間限制。 
  4. -r Don't exit on socket receive errors.    // 拋出異常繼續執行測試任務 
  5. -p postfile File containing data to POST  //包含了需要POST的數據的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt 
  6. -T content-type Content-type header for POSTing 
  7. //POST數據所使用的Content-type頭信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p) 
  8. -v verbosity How much troubleshooting info to print 
  9. //設置顯示信息的詳細程度 – 4或更大值會顯示頭信息, 3或更大值可以顯示響應代碼(404, 200等), 2或更大值可以顯示警告和其他信息。 -V 顯示版本號并退出。 
  10. -C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable
  11. //-C cookie-name=value 對請求附加一個Cookie:行。 其典型形式是name=value的一個參數對。此參數可以重復,用逗號分割。 
  12. 提示:可以借助session實現原理傳遞 JSESSIONID參數, 實現保持會話的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。 
  13. -w Print out results in HTML tables  //以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。 

2.5 使用注意

1、MAC中自帶了Apache。

2、在使用ab命令時,并發了過高會出現錯誤:Too many open files,由于系統打開文件數量限制了具有輕量化特點的bench還是很適合中小企業使用,尤其在于模擬訪問頁面的多機測試

三、JMeter:Apache組織開發的壓力測試工具(使用比較多的工具)

3.1 簡介

Apache JMeter是一款純java編寫負載功能測試和性能測試開源工具軟件。相比Loadrunner而言,JMeter小巧輕便且免費,逐漸成為了主流的性能測試工具,是每個測試人員都必須要掌握的工具之一

JDK版本:1.8 運行環境:Windows 7 64 JMeter版本:3.3

注意:安裝JMeter需要 Java8和8以上的JDK版本

3.2 JDK安裝(如果已經安裝JDK 1.8 忽略這一步)

1、jdk官網下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、選擇 Java SE 8u231,點擊JDK下載


安裝下載的JDK

配置系統環境變量 具體可以自行查找資料,這里就不做過多描述

3.2 JMeter安裝

1、官網下載地址:JMeter地址:http://jmeter.apache.org/download_jmeter.cgi

2、下載最新JMeter 5.1.1 版本:Apache JMeter 5.1.1 (Requires Java 8+)

3、下載完成后解壓zip包,雙擊bin目錄下jmeter.bat文件


3.3 JMeter 使用

1、雙擊bin目錄下jmeter.bat文件后,打開Apache JMeter工具


2、案例測試(Test Plan - > Add - > Thread(User) - > Thread Group)

3、設置名稱和線程數


線程參數解讀:Number of Threads (users):虛擬用戶數(也就是線程數),一個虛擬用戶占用一個進程或線程Ramp-Up Period(in seconds):準備時長,設置的虛擬用戶數需要多長時間全部啟動。

Loop Count:循環次數每個線程發送請求的次數

如果線程數為20,循環次數為100,那么每個線程發送100次請求??傉埱髷禐?0*100=2000 。

如果勾選了“Forever”,那么所有線程會一直發送請求,一到選擇停止運行腳本。

Delay Thread creation until needed:直到需要時延遲線程的創建

Scheduler:調度器,設置線程組啟動的開始時間和結束時間(配置調度器時,需要勾選循環次數為永遠)

Duration(Seconds):持續時間(秒),測試持續時間,會覆蓋結束時間

Startup delay(Seconds):啟動延遲(秒),測試延遲啟動時間,會覆蓋啟動時間

4、添加Http請求

右鍵點擊,Htto請求 > Add > Sampler > Http Request

接下來我們對接口 https://www.baidu.com/s?ie=UTF-8&wd=edg進行性能測試,如下圖所示:


請求參數詳解:

  • Web Server(Http服務): 1、Protocol[http]:協議,向目標服務器發送HTTP請求協議,可以是HTTP或HTTPS,默認為HTTP 2、服務器名稱或IP:HTTP請求發送的目標服務器名稱(域名)或IP 3、Port Number:端口號
  • Http Reuqeset(Http請求體): 1、Method:請求方法類型,有GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等 2、path:目標URL路徑,除去服務器地址、端口和請求參數后所得到的數據 3、Content encoding:編碼方式,設置為 UTF-8
  • 請求參數: 設置請求參數,都在下面的列表中進行設置,
  • 列表參數解讀:Name:請求參數名 Value:請求值 URL Encode:是否Url編碼 Conten-Type:內容類型,有需要自行調整(一般選擇默認即可) include Equals:是否包含等于

注意:參數傳入中文時需要勾選“URL Encode”

這里的按鈕都是針對列表中的數據進行操作的

  1. Detail 
  2. :查看參數詳情 
  3.  
  4. Add 
  5. :添加一行列表請求參數 
  6.  
  7. Delte 
  8. :刪除一行數據 
  9.  
  10. Up 
  11. :設置列表參數上移 
  12.  
  13. Down 
  14. :設置列表參數下移 
  15.  
  16. add from  
  17. Clipdoard 
  18. :從我們復制的內容中進行添加 

5、添加察看結果樹

1、右鍵點擊 Http請求 > Add > Listener > View Results Tree

2、這里我們設置響應數據格式:HTMLSourceFormatted,點擊運行我們就可以看到請求結果


3、本次搜索返回結果頁面標題為 edg_百度搜索

6、添加用戶自定義變量

1、添加用戶自定義變量用以Http請求參數化:Http請求 > Add > Config Element > User Defined Variables


2、新增請求參數,存放搜索關鍵字


3、在 Http測試請求 中使用該參數,格式為:${wd} ,如下圖所示


7、添加響應斷言

右鍵點擊 Http測試請求(注意是Http測試請求) > Add > Assertions > Response Assertion

 

校驗返回的文本中是否包含搜索詞,添加參數${wd}到要測試的模式中

  1. Contains 
  2. :包括 
  3.  
  4. Matches 
  5. :匹配 
  6.  
  7. Equals 
  8. :相等 
  9.  
  10. SubString 
  11. :原諒博主才疏學淺,這個就不做解釋了 
  12.  
  13. Not 
  14. :否 
  15.  
  16. or 
  17. :或者 

 

7、添加響應斷言結果

右鍵點擊 Http測試請求 > Add > Listener > Assertion Results


點擊運行,查詢運行結果

8、添加聚合報告

右鍵點擊 Http請求 > Add > Listener > Aggregate Report


到這里我們就完成了一個完整的Http接口的性能測試編寫,接下來我們會對它的性能進行測試

3.4 JMeter 性能測試

1、配置Http請求(線程組)信息

點擊Http請求(線程組),配置相關的性能測試相關參數線程數:50 循環次數:永遠持續時間:60秒


2、執行測試信息

選擇聚合報告,查詢結構,點擊 箭頭 按鈕啟動測試,如果要清楚具體內容,點擊小掃把,清除調試結果


3、測試結果分析解讀

1、打開聚合報告

參數詳解:

  1. Label:每個 JMeter 的 element都有一個 Name 屬性,這里顯示的是 Name 屬性的值
  2. #Samples:請求數——表示這次測試中一共發出了多少個請求 如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100
  3. Average:平均響應時間——默認情況下是單個 Request 的平均響應時間 當使用了 Transaction Controller 時,以Transaction 為單位顯示平均響應時間
  4. Median:中位數,也就是 50% 用戶的響應時間
  5. 90% Line:90% 用戶的響應時間
  6. 99% Line:99% 用戶的響應時間
  7. Min:最小響應時間
  8. Max:最大響應時間
  9. Error%:錯誤率——錯誤請求數/請求總數
  10. Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second) 當使用了TransactionController時,也可以表示類似LoadRunner的TransactionperSecond數
  11. KB/Sec:每秒從服務器端接收到的數據量

在實際中我們需要關注的點只有—— #Samples 請求數,Average 平均響應時間,Min 最小響應時間,Max 最大響應時間,Error% 錯誤率和Throughput 吞吐量

四、代碼模擬

1、Semaphore

Semaphore是計數信號量。Semaphore管理一系列許可證。每個acquire方法阻塞,直到有一個許可證可以獲得然后拿走一個許可證;每個release方法增加一個許可證,這可能會釋放一個阻塞的acquire方法。然而,其實并沒有實際的許可證這個對象,Semaphore只是維持了一個可獲得許可證的數量。

[[380133]]

1.1 代碼演示:獲取一個許可證

  1. import lombok.extern.slf4j.Slf4j; 
  2.  
  3. import java.util.concurrent.CountDownLatch; 
  4. import java.util.concurrent.ExecutorService; 
  5. import java.util.concurrent.Executors; 
  6. import java.util.concurrent.Semaphore; 
  7.  
  8. @Slf4j 
  9. public class SemaphoreExample1 { 
  10.  
  11.     private final static int threadCount = 20; 
  12.  
  13.     public static void main(String[] args) throws Exception { 
  14.  
  15.         ExecutorService exec = Executors.newCachedThreadPool(); 
  16.  
  17.         final Semaphore semaphore = new Semaphore(3); 
  18.  
  19.         for (int i = 0; i < threadCount; i++) { 
  20.             final int threadNum = i; 
  21.             exec.execute(() -> { 
  22.                 try { 
  23.                     semaphore.acquire(); // 獲取一個許可 
  24.                     test(threadNum); 
  25.                     semaphore.release(); // 釋放一個許可 
  26.                 } catch (Exception e) { 
  27.                     log.error("exception", e); 
  28.                 } 
  29.             }); 
  30.         } 
  31.         exec.shutdown(); 
  32.     } 
  33.  
  34.     private static void test(int threadNum) throws Exception { 
  35.         log.info("{}", threadNum); 
  36.         Thread.sleep(1000); 
  37.     } 

執行結果:如下圖所示,我們看到雖然結果是無序的,但是請求的線程數量是正確的,這里展示的是獲取一個許可,同時也釋放一個許可,我們可不可以獲取多個許可,釋放多個許可呢,答案是可以的


1.2 代碼演示:獲取多個許可證

  1. package com.mmall.concurrency.example.aqs; 
  2.  
  3. import lombok.extern.slf4j.Slf4j; 
  4.  
  5. import java.util.concurrent.ExecutorService; 
  6. import java.util.concurrent.Executors; 
  7. import java.util.concurrent.Semaphore; 
  8.  
  9. @Slf4j 
  10. public class SemaphoreExample { 
  11.  
  12.     private final static int threadCount = 20; 
  13.  
  14.     public static void main(String[] args) throws Exception { 
  15.  
  16.         ExecutorService exec = Executors.newCachedThreadPool(); 
  17.  
  18.         final Semaphore semaphore = new Semaphore(3); 
  19.  
  20.         for (int i = 0; i < threadCount; i++) { 
  21.             final int threadNum = i; 
  22.             exec.execute(() -> { 
  23.                 try { 
  24.                     semaphore.acquire(3); // 獲取多個許可 
  25.                     test(threadNum); 
  26.                     semaphore.release(3); // 釋放多個許可 
  27.                 } catch (Exception e) { 
  28.                     log.error("exception", e); 
  29.                 } 
  30.             }); 
  31.         } 
  32.         exec.shutdown(); 
  33.     } 
  34.  
  35.     private static void test(int threadNum) throws Exception { 
  36.         log.info("{}", threadNum); 
  37.         Thread.sleep(1000); 
  38.     } 

執行結果:這里我們看到我們設置了獲取多個許可同時也釋放多個許可,放回的線程數是正確的,同時執行結果也是有序的


2、CountDownLatch

CountDownLatch是一個同步工具類,用來協調多個線程之間的同步,或者說起到線程之間的通信(而不是用作互斥的作用)。CountDownLatch能夠使一個線程在等待另外一些線程完成各自工作之后,再繼續執行。使用一個計數器進行實現。計數器初始值為線程的數量。當每一個線程完成自己任務后,計數器的值就會減一。當計數器的值為0時,表示所有的線程都已經完成了任務,然后在CountDownLatch上等待的線程就可以恢復執行任務

 

2.1 代碼演示:

  1. import lombok.extern.slf4j.Slf4j; 
  2.  
  3. import java.util.concurrent.CountDownLatch; 
  4. import java.util.concurrent.ExecutorService; 
  5. import java.util.concurrent.Executors; 
  6.  
  7. @Slf4j 
  8. public class CountDownLatchExample1 { 
  9.  
  10.     private final static int threadCount = 200; 
  11.     public static void main(String[] args) throws Exception { 
  12.         int num = 0; 
  13.  
  14.         ExecutorService exec = Executors.newCachedThreadPool(); 
  15.         final CountDownLatch countDownLatch = new CountDownLatch(threadCount); 
  16.  
  17.         for (int i = 0; i < threadCount; i++) { 
  18.             final int threadNum = i; 
  19.             num++; 
  20.             exec.execute(() -> { 
  21.                 try { 
  22.                     test(threadNum); 
  23.                 } catch (Exception e) { 
  24.                     log.error("exception", e); 
  25.                 } finally { 
  26.                     countDownLatch.countDown(); 
  27.                 } 
  28.             }); 
  29.         } 
  30.         countDownLatch.await(); 
  31.         log.info("finish——"+num); 
  32.         exec.shutdown(); 
  33.     } 
  34.  
  35.     private static void test(int threadNum) throws Exception { 
  36.         Thread.sleep(100); 
  37.         log.info("{}", threadNum); 
  38.         Thread.sleep(100); 
  39.     } 

 

通過返回結果我們可以看到,設置的線程數量返回結果數量和我們設置的線程數量200一致

五、總結

postMan:非專業的并發測試,嚴格來說postMan并不是并發請求,而是串行執行的,postMan更多的是用來測試Http連接的一個工具,是一個很實用的工具

Apache Bench:Apache Bench是 Apache 服務器自帶的一個web壓力測試工具,簡稱ab,ab工具小巧簡單,上手學習較快,可以提供需要的基本性能指標,但是沒有圖形化結果,不能監控

JMeter:Apache JMeter 是Apache 組織開發的基于java的壓力測試工具。用于對軟件做壓力測試的工具,它可以用于測試靜態和動態資源例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、 數據庫, FTP 服務器等等

總的來說,并發測試中,JMeter和Apache Bench是比較好的選擇,由于Apache Bench是基于命令行的,ab處理速度更快,而Jmeter更準確,由于Jmeter本身支持斷言、可變參數和CSV數據集的輸入,能設定更加靈活多變的的測試場景,至于postMan這款工具,用來最多的是用來模擬Http請求的一個,并不是一個專業的并發請求工具。

 

責任編輯:姜華 來源: 牧小碼農
相關推薦

2025-07-01 08:20:00

JUC包Java并發

2017-01-09 16:06:19

2023-12-14 07:36:16

Java并發原子類

2025-07-04 09:05:35

2024-11-13 15:09:57

Java線程開發

2017-02-14 10:00:19

Java開發Lock

2023-02-10 09:40:36

Go語言并發

2012-03-06 11:01:44

Java

2024-04-22 09:30:24

2024-01-31 08:50:41

Guava并發工具

2019-07-25 12:46:32

Java高并發編程語言

2020-02-18 14:05:47

模擬并發Java

2014-07-02 09:37:02

模擬并發并發

2010-06-08 18:53:43

UML建模工具

2023-10-18 15:19:56

2024-09-06 10:48:13

2019-11-19 09:00:38

JavaAND信號量

2012-07-06 15:00:03

跨平臺工具MoSync

2012-07-06 15:08:14

跨平臺工具Netbiscuits

2011-08-15 11:13:06

IOS開發并發Dispatch Qu
點贊
收藏

51CTO技術棧公眾號

又色又爽又黄视频| 欧美极品一区二区| 国产又色又爽又黄的| 九热爱视频精品视频| 欧美视频在线一区二区三区 | 日本免费一区二区三区最新| 久久一本综合频道| 欧美成人精品一区二区三区| 99久久免费看精品国产一区| 久久不卡日韩美女| 亚洲成av人影院| 亚洲一区二区不卡视频| 亚洲男女视频在线观看| 日韩av中文字幕一区二区| 欧美精品一区二区三区国产精品| 无套内谢大学处破女www小说| 欧美一级网址| 欧美午夜精品久久久久久浪潮 | 在线观看亚洲专区| 国产小视频免费| 91在线视频免费看| 99久精品国产| 亚洲自拍偷拍视频| 蜜臀尤物一区二区三区直播| 国产一区二区三区四区三区四| 国产亚洲精品一区二555| 欧美丰满熟妇bbb久久久| 成人av集中营| 日韩欧美高清在线视频| 佐佐木明希av| 午夜免费福利在线观看| 99re6这里只有精品视频在线观看| 国产主播欧美精品| 男操女视频网站| 一区二区三区成人精品| 九色91av视频| 久草手机视频在线观看| 国产一区二区三区电影在线观看| 精品免费视频一区二区| 国产精品久久久久久9999| 精品123区| 日本久久电影网| 人妻久久久一区二区三区| 怡红院红怡院欧美aⅴ怡春院| 中文天堂在线一区| 欧美在线一区二区三区四区| 天堂成人在线观看| 成人av免费观看| 国产精品xxxx| 欧美在线精品一区二区三区| 成人中文字幕电影| 成人黄动漫网站免费| 国产高清第一页| 国产乱人伦偷精品视频免下载 | 精品久久久久久中文字幕2017| 狠狠操一区二区三区| 亚洲图片欧美视频| 久久国产精品视频在线观看| 97超碰免费在线| 午夜国产不卡在线观看视频| 青青青青草视频| 超碰资源在线| 懂色aⅴ精品一区二区三区蜜月| 欧美成人高潮一二区在线看| 忘忧草在线影院两性视频| 欧美性极品少妇精品网站| 久久久久久久久久久久久国产精品| 在线看的毛片| 一本一道久久a久久精品| 日韩欧美xxxx| 欧美大陆国产| 欧美一区二区三区电影| 丰满少妇xbxb毛片日本| 性欧美lx╳lx╳| 亚洲天堂av图片| 日本裸体美女视频| 欧美精品国产| 秋霞av国产精品一区| 日韩电影在线观看一区二区| 蜜臀av国产精品久久久久| 92裸体在线视频网站| 国产小视频免费观看| 26uuu国产日韩综合| 色一情一乱一伦一区二区三欧美 | 一区二区三区四区毛片| 亚洲免费一区三区| 亚洲老头老太hd| 精品一区二区在线观看视频| 欧美精品1区| 欧美在线一区二区三区四| 中文字幕一区二区三区四区视频 | 国产在线一区二区三区播放| 理论在线观看| 亚洲精品乱码久久久久久| 国产网站免费在线观看| 欧美一级做a| 亚洲精品456在线播放狼人| 亚洲无人区码一码二码三码的含义 | 蜜臀va亚洲va欧美va天堂| 亚洲精品免费一区二区三区| 亚洲色图 校园春色| 日韩一区日韩二区| 成人免费毛片网| 国产成人免费视频网站视频社区| 亚洲国产精品一区二区久| 国产调教在线观看| 亚洲精品孕妇| 91亚洲精品久久久| 欧美孕妇性xxxⅹ精品hd| 亚洲视频1区2区| 日韩精品无码一区二区三区免费| 日韩精品一区二区三区中文字幕 | 动漫性做爰视频| 久久精品首页| 国产九区一区在线| 韩国中文字幕在线| 欧美专区亚洲专区| 免费观看av网站| 亚州av乱码久久精品蜜桃| 欧美专区第一页| 俄罗斯嫩小性bbwbbw| 中文字幕日韩精品一区| 无码人妻丰满熟妇区毛片| 亚洲码欧美码一区二区三区| yellow中文字幕久久| 69视频免费看| 91视视频在线观看入口直接观看www| 午夜啪啪福利视频| 欧美成人福利| 色婷婷综合成人| 亚洲 日本 欧美 中文幕| 99久精品国产| 3d动漫一区二区三区| 999久久久精品一区二区| 久久亚洲精品国产亚洲老地址| 国产在线一级片| 久久精品一二三| 日本精品一区在线观看| 久久久久高潮毛片免费全部播放| 九九热精品视频国产| av网站免费大全| 中文字幕色av一区二区三区| 91最新在线观看| 激情五月色综合国产精品| 日韩av电影中文字幕| 青青青手机在线视频观看| 狠狠久久五月精品中文字幕| 中文字幕天堂av| 欧美午夜久久| 97视频资源在线观看| 超碰人人在线| 欧美一级视频精品观看| 欧美成人精品一区二区免费看片| 韩国av一区二区三区在线观看| 一本久久a久久精品vr综合 | 日本欧洲国产一区二区| 黑人巨大精品欧美一区二区桃花岛| 日韩精品免费在线视频观看| 五月激情六月丁香| 国产日本欧洲亚洲| www.国产视频.com| 亚洲欧洲中文字幕| av资源一区二区| f2c人成在线观看免费视频| 亚洲精品v天堂中文字幕 | 亚洲综合不卡| 欧美日韩亚洲在线| yy6080久久伦理一区二区| 日韩一区二区av| 国产黄色片av| 午夜视频在线观看一区| 国产手机在线观看| 全国精品久久少妇| 国产日韩欧美大片| 欧美人与动xxxxz0oz| 日产精品久久久一区二区福利| 最新国产在线观看| 日韩欧美国产一区二区三区 | 毛片基地黄久久久久久天堂| 视频一区二区视频| 狼人精品一区二区三区在线 | 成人综合视频在线| av亚洲免费| 99re视频| 亚洲成a人片| 久久夜色精品亚洲噜噜国产mv| 欧美一区二不卡视频| 欧美性大战久久久久久久蜜臀| 卡通动漫亚洲综合| 9久草视频在线视频精品| 五月婷婷丁香综合网| 精品动漫3d一区二区三区免费| 欧美福利一区二区三区| 久久影院一区二区三区| 2021久久精品国产99国产精品| 91大神在线网站| 亚洲第一福利网| 91成年人视频| 色综合久久中文字幕| 国产精品久久久精品四季影院| 91免费版在线| 真实乱偷全部视频| 日本不卡免费在线视频| 国产日韩av网站| 亚欧美无遮挡hd高清在线视频| 久久久久久国产精品免费免费| 99久热在线精品视频观看| 欧美在线观看网站| 国产三线在线| 日韩一区二区久久久| 欧美孕妇孕交xxⅹ孕妇交| 精品国产伦一区二区三区观看方式 | www在线观看免费视频| 成人深夜视频在线观看| 911av视频| 蜜臀av一区二区| av免费网站观看| 亚洲国产高清一区| 日韩视频一二三| 青青草国产免费一区二区下载| 国内精品视频免费| 91精品国产乱码久久久竹菊| 成人h片在线播放免费网站| 日韩pacopacomama| 26uuu久久噜噜噜噜| 91老司机福利在线| 欧美激情久久久| 18+激情视频在线| 久久精品这里热有精品| yw在线观看| 国产亚洲精品va在线观看| 婷婷国产在线| 亚洲精品久久久久久久久久久| 成人午夜免费福利| 日韩精品一区二区三区视频播放 | 99在线精品免费| 亚洲精品久久一区二区三区777 | 国语精品免费视频| 中文字幕一区日韩精品| 91日韩在线播放| 成人在线精品| 91精品在线观| www.成人| 91久久伊人青青碰碰婷婷| 午夜不卡一区| 成人激情视频网| 国产精品国产三级在线观看| 国产在线拍偷自揄拍精品| 亚洲精品aaa| 91精品免费视频| 精品午夜av| αv一区二区三区| 国产ts一区| 久久riav二区三区| 国产精品嫩模av在线| 日日骚一区二区网站| 日韩av自拍| 黑人巨大国产9丨视频| 一本一道久久a久久精品蜜桃| 日韩精品福利片午夜免费观看| 亚洲精品成人无限看| 欧洲精品在线播放| 国产精品社区| 爱情岛论坛vip永久入口| 美国十次了思思久久精品导航| 91看片破解版| 福利一区在线观看| 一本色道久久综合亚洲精品图片| 国产午夜精品一区二区三区视频| 国产精品av久久久久久无| 综合久久久久久久| 国产精品suv一区二区| 欧美性猛交99久久久久99按摩| 中文字幕欧美人妻精品一区蜜臀 | 国产精品亚洲网站| 99精品国产九九国产精品| 国产亚洲情侣一区二区无| 国产一区二区亚洲| 偷拍盗摄高潮叫床对白清晰| 激情婷婷久久| 欧美日韩在线成人| 国产一区久久久| 蜜臀av一区二区三区有限公司| 中文字幕第一页久久| 久久久久久天堂| 色综合天天综合网天天狠天天 | 国产精品4hu.www| 丁香婷婷久久久综合精品国产| 亚洲免费福利一区| 日本成人性视频| 亚洲综合社区| 色哟哟免费视频| 国产色91在线| 日本熟妇一区二区| 欧美日韩成人一区| 亚洲av成人无码网天堂| 日韩在线免费视频| 超碰一区二区| 97人摸人人澡人人人超一碰| 国产精品一区二区av日韩在线| 免费的av在线| 日韩高清不卡一区| 91精品人妻一区二区三区四区| 国产欧美精品一区二区色综合 | 日本欧美精品久久久| 国产精品草草| 五月激情婷婷在线| 久久久久久久久99精品| 欧美激情一区二区视频| 欧美三电影在线| 性xxxx视频| 欧美激情性做爰免费视频| 国产精品原创视频| 视频一区视频二区国产精品| 日本黄区免费视频观看| 欧美特黄一区| 天天干天天色天天干| 久久久噜噜噜久久中文字幕色伊伊| 日韩一区二区三区四区在线| 欧美日韩在线一区二区| 天天影院图片亚洲| 久久人人爽国产| 51vv免费精品视频一区二区| 亚洲欧美久久234| 秋霞国产午夜精品免费视频| 91av在线免费| 亚洲不卡av一区二区三区| 99热这里只有精品在线观看| 丝袜美腿精品国产二区| 精品视频一区二区三区四区五区| 久久伦理网站| 一本色道久久综合亚洲精品不| 久久久久国产免费| 亚洲激情综合网| 国产按摩一区二区三区| 久久久国产视频| 日日夜夜精品| 一区二区三区在线视频看| 日韩精品视频网站| 人人爽人人爽人人片| 欧洲一区在线观看| 岛国大片在线观看| 国产精品普通话| 日韩精品久久久久久久电影99爱| 欧美伦理视频在线观看| 久久精品夜夜夜夜久久| 正在播放亚洲精品| 深夜福利亚洲导航| 欧美电影院免费观看| 好吊色视频988gao在线观看| 国产一区二区在线观看免费| 日本福利片在线观看| 日韩女优av电影在线观看| 青青草原av在线| 国产在线一区二区三区欧美| 亚洲欧美不卡| 免费看的黄色网| 欧美伦理视频网站| 欧洲性视频在线播放| 国产精品久久久久久免费观看 | 久久亚洲私人国产精品va| 精品一区二区三区中文字幕在线 | 最新中文字幕在线播放| 日本10禁啪啪无遮挡免费一区二区| 日韩精品亚洲一区| 男的操女的网站| 亚洲成色777777女色窝| 韩国主播福利视频一区二区三区| 五月天婷亚洲天综合网鲁鲁鲁| 激情综合色播激情啊| 久久久综合久久| 亚洲日本aⅴ片在线观看香蕉| 欧美国产日韩电影| 欧美 国产 精品| av电影天堂一区二区在线观看| 天天干天天色综合| 久久精品国产免费观看| 国产精品极品| 免费黄色一级网站| 一区二区三区影院| 亚洲欧美色视频| 国产精品香蕉国产| 99日韩精品| 五月激情四射婷婷| 亚洲国产成人精品久久久国产成人一区 | 国产精品视频yy9299一区| 精品人妻一区二区三区蜜桃| 7m精品福利视频导航| 欧美hd在线| 波多野结衣影院| 欧美精品日韩综合在线| 国内激情视频在线观看| 超碰免费在线公开| 2014亚洲片线观看视频免费| 97精品人妻一区二区三区香蕉| 午夜精品理论片| 99久久精品网站| 伊人网伊人影院| 亚洲精品一区二区三区影院 | 日韩欧美成人激情|