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

如何加速Selenium測試用例的執行

譯文 精選
開發 測試
本文將主要從速度和性能兩個方面,向您介紹Selenium Web測試各項優秀實踐,以便您能夠更好地加快測試并獲取測試結果。

?Selenium自動化測試的主要目的是為了取代和加快手動測試的進程。為了顯著提高測試執行的速度,我們可以選擇使用不同類型的等待、Web定位器(Locator)、瀏覽器偏好,來優化并提升Selenium測試的基礎設施。

下面,我們將主要從速度和性能兩個方面,向您介紹Selenium Web測試各項優秀實踐,以便您能夠更好地加快測試并獲取測試結果。

加速Selenium測試的優秀實踐

隨著軟件產品的持續更新,維護和升級Selenium測試的過程會變得越來越復雜。不過,無論被測場景如何不同,下面有關Selenium的基本測試步驟都是相似的:

  1. 使用本地或遠程的Selenium WebDriver去打開被測的URL。
  2. 使用諸如XPath、CssSelector、以及Linktext等恰當的WebSelenium定位器,來定位所需的各種WebElement。
  3. 對已定位的WebElement執行各項必要的操作,并測試頁面上的斷言。
  4. 釋放WebDriver所使用的資源。

盡管Selenium測試的效率在很大程度上,取決于測試的方法和內部結構,但是我們可以總結出如下加快執行Selenium測試用例的各種優秀實踐:

選擇合適的Web定位器

Selenium中的Web定位器往往被認為是任何測試場景的基本構建塊。為了自動化與任何Web元素的交互,我們首先應該選對可定位WebElement的Web定位器,然后再對相應的元素執行適當的操作。其中,XPath、CSS Selector、Name、LinkText、Partial LinkText、TagName、以及ClassName都是在Selenium中被廣泛使用的Web定位器。我們通常可以將其與find_element或find_elements方法一起使用。

那么,究竟哪一款Web定位器在Selenium中能夠最快地定位到元素呢?其實,ID才是最快的Web定位器,畢竟Selenium WebDriver中的ID定位器,對于頁面上的每個元素來說都是唯一的。ID定位器可以返回與指定值(或字符串)相匹配的WebElement。如果頁面上存在多個具有相同ID的元素,那么document.getElementById()將返回第一個匹配的元素。主流Web瀏覽器都優化了document.getElementById()方法,因此我們能夠以更快的速度,從DOM處提供WebElement。

如果WebElement并沒有ID屬性,那么請使用NAME屬性。而如果WebElement既沒有ID、又沒有NAME屬性,那就應該使用CSS選擇器(Selector)的Web定位器。CSS引擎在所有主流瀏覽器中都是一致的,并且能夠通過Selenium中的CSS選擇器,來調優它們的性能,以提供更快的元素識別和更少的測試執行時間。因此,您在使用此類特定的Web定位器時,也會鮮少遇到瀏覽器的兼容性問題。同時,CSS選擇器也能適應IE等老舊的瀏覽器。

此外,與XPath相比,CSS選擇器提供了更好的可讀性。我們甚至可以說,XPath是最慢的Web定位器,當您從一個瀏覽器移至另一個瀏覽器時,很可能會遇到XPath的一致性問題。因此,僅當您無法在Selenium WebDriver中選用其他可靠的Web定位器時,才建議使用XPath來定位Web元素。

小結一下,上述Web定位器按照執行速度從快到慢依次是:ID、NAME、CSS選擇器、以及XPath。

使用更少的Web定位器

既然您已經確定了最適合加速Selenium測試的Web定位器,下一步就應該將定位器的數量保持在最低限度了。

如前所述,我們每次需要使用find_element(By)或find_elements(By)方法,來定位所需的Web元素,以執行對DOM樹的訪問。那么對DOM樹的訪問次數越多,Selenium腳本的執行時間就會越長。因此,如果您以Selenium腳本的最佳執行速度為目標的話,有必要使用更少的Web定位器。這樣,我們不但能夠提高測試腳本的可讀性,還可以最大限度地減少維護腳本所需的時間。

盡量避免Thread.sleep()

現代網站與Web應用往往會?使用AJAX(異步的JavaScript和XML)在網頁上動態加載內容。因此,頁面上的WebElement可能會以不同的時間間隔被加載,這將對尚未處于DOM中的元素造成執行上的困難。

在此,我建議您通過監控document.readyState的狀態,來檢查DOM狀態。document.readyState的完成標志著頁面上的所有資源都已加載完畢,因此我們可以開始對頁面上存在的WebElement進行相關操作。

由于測試代碼中的幾秒鐘等待,都會增加頁面上資源加載所需的延遲,因此我們需要盡量避免使用Thread.sleep(sleep_in_miliseconds)。Selenium中的Thread.sleep()方法將會讓代碼的執行暫停指定的時間間隔。

/* Pauses test execution for specified time in milliseconds */
Thread.sleep(5000);

如上述代碼段所示,我們添加了5秒的等待時間。如果頁面元素在指定的持續時間之內(例如2秒鐘)就已完成了加載,那么剩下3秒的等待就不必要地增加了測試的執行時間。由于頁面的加載時間往往取決于諸如:服務器負載、頁面設計、緩存、以及網絡帶寬等各種外部參數,因此我們無法預測頁面的加載時間。可見,無論網頁的狀態如何,Thread.sleep()方法都會執行固定時間的休眠,因此為了加速Selenium測試,我們需要避免使用它。

重用現有的瀏覽器實例

目前,能夠與Selenium一起使用的所有自動化測試框架,都可以通過提供注釋,來加快測試的開發和執行。同時,注釋還有助于執行具有不同輸入值的測試。當然,只有根據測試的要求,使用正確的注釋集,才能加快Selenium測試。

以下是被各個主流自動化測試框架所廣泛使用的注釋列表:

自動化測試框架

注釋

JUnit [Selenium Java]

@BeforeClass, @Before, @Test, @After, @AfterClass, @Ignore

TestNG [Selenium Java]

@BeforeSuite, @BeforeTest, @BeforeClass, @BeforeMethod, @Test, @AfterMethod, @AfterClass, @AfterTest, etc.

NUnit [Selenium C#]

[SetUp], [TearDown], [Test], [TestCase], [OneTimeSetUp], [OneTimeTearDown], [Ignore], [Category], etc.

XUnit [Selenium C#]

[Theory], [InlineData], [Fact], etc.

有時候,您可能需要在相同的瀏覽器和操作系統類型的組合中,反復運行某個或某組測試。此時,如果您在每個測試的開始時,都創建一個新的Selenium WebDriver實例,顯然會增加測試執行的額外開銷。

Selenium的JUnit

下面是Selenium的JUnit中注解的執行順序:

在使用JUnit框架的Selenium自動化測試中,Selenium WebDriver實例是在@Before注釋下實現的SetUp方法中創建的。已創建的實例是在@After注解下實現的TearDown方法中被銷毀的。

Selenium的TestNG

下面是Selenium的TestNG中注解的執行順序:

同理,對于Selenium中的TestNG測試,SetUp方法是在@BeforeMethod注解下實現的,而TearDown方法是在@AfterMethod注解下實現的。

在瀏覽器和操作系統的組合上運行一系列測試

下面,我們來討論不同的框架在同一個瀏覽器和操作系統組合上執行三個測試的情況:

JUnit 框架

測試 - 1 @Before 注解下的 setUp() -> Test-1 -> @After 注解下的 tearDown()

測試 - 2 @Before 注解下的 setUp() -> Test-2 -> @After 注解下的 tearDown()

測試 - 3 @Before 注解下的 setUp() -> Test-3 -> @After 注解下的 tearDown()

TestNG 框架

測試 - 1 @BeforeMethod 注解下的 setUp() -> Test-1 -> @AfterMethod 注解下的 tearDown()

測試 - 2 @BeforeMethod 注解下的 setUp() -> Test-2 -> @AfterMethod 注解下的 tearDown()

測試 - 3 @BeforeMethod 注解下的 setUp() -> Test-3 -> @AfterMethod 注解下的 tearDown()

如上表所示,在每個測試場景都會在注釋之后創建和銷毀瀏覽器實例。

在JUnit和TestNG框架中重用瀏覽器實例

相反,我們可以使用適當的注釋在腳本之間共享相同的瀏覽器實例:

JUnit 框架

測試 - 1、測試 - 2 和測試 -3 @BeforeClass 注解下的 setUp() -> Test-1、Test-2 和 Test-3 -> @AfterClass 注解下的 tearDown()

TestNG 框架

測試 - 1、測試 - 2 和測試 -3 @BeforeTest(或@BeforeClass)注解下的setUp() -> Test-1、Test-2和Test-3 -> @AfterTest(或@AfterClass)注解下的tearDown()

在這種情況下,所有測試場景都會使用同一個瀏覽器實例,并且一旦所有測試執行完成后,該實例就會被銷毀。當然,如果測試必須在不同的瀏覽器和操作系統組合上運行時,則不能使用相同的技術,而必須在每個測試場景之后創建和銷毀測試組合。

使用Selenium進行自動化測試的顯式等待

Selenium中的隱式等待被應用于測試腳本中的所有Web元素。而隱式等待的主要缺點在于您無法在元素可見、可點擊、可選擇等條件下執行等待。與此同時,Selenium中的顯式等待則允許您對頁面上存在的WebElement執行有條件的等待。例如,如果某個被指定的WebElement在顯式等待所規定的持續時間內可見,那么就會觸發ElementNotVisibleException。如果已定位的元素是可點擊的,那么elementToBeClickable方法將返回一個WebElement。

WebDriverWait和ExpectedConditions類的組合可被用于在WebElements上執行顯式等待。顯式等待的好處在于它是在代碼層面,而非遠程Selenium部分上運行的。顯式等待無需等到設定時間的結束,而是在滿足指定條件時,便可立即退出等待。如果設定的條件一旦找到了WebElement,就會將該元素作為結果予以返回。如果WebElement在DOM中并不存在,即使條件中指定時間已過,它也會觸發TimeoutException。

在下面的代碼段中,我們對visibilityOfElementLocated條件執行了5秒鐘的顯式等待。如果ID = 'element'的WebElement在5秒內被找到,那么該顯式等待就會退出,并返回所需的WebElement。

Java
/* Trigger an explicit wait of 5 Seconds */
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("element"))

由于只要找到元素就可以訪問WebElement,因此實際的等待時間可能會少于設定的等待時間,那么顯式等待的測試腳本的性能會更好,也會使得Selenium測試運行得更快。

創建原子性和自主式測試腳本

無論測試場景有多么復雜,我們都需要將復雜的場景分解成為多個“獨立和原子性”的測試用例。

像TestNG之類的自動化測試框架能夠支持通過諸如dependsOnMethods(用于各種方法)和dependsOnGroups(用于各個組)等注釋,來聲明測試方法之間的顯式依賴關系。但是,只有當您希望在測試方法之間共享數據和狀態時,才應該在Selenium測試腳本中使用測試依賴項。

同時,由于原子性測試可被用于故障檢測,因此我們需要通過保持測試的簡短和原子態,來減少維護測試的工作量。可以說,有了原子性的保證,我們不但可以最大限度地減少測試的依賴性,而且有助于隔離測試中出現的問題,并加快Selenium測試的整體效率。

在Selenium自動化中利用并行測試

Selenium中的并行測試可以讓您在不同的測試環境中,同時運行相同的測試。如果您計劃使用內部Selenium Grid進行分布式測試,那么您可以利用Selenium Grid 4所提供的功能,來加速測試場景的執行。

根據所測場景的不同,您可以選擇“類”級別或“方法”級別中的任何一種開展并行化測試。而此類測試主要可以對如下三個方面予以增強:

  • 對測試場景分組
  • 測試場景的參數化
  • 選擇基于云的Selenium Grid

對測試場景分組

隨著更多的測試文件和測試方法被添加,測試套件的復雜性會成倍增加。為了最大限度地減少測試套件在實現和維護上的復雜性,我們需要根據被測的功能,對測試進行分組。

正如下面對TestNG測試用例進行分組所展示那樣,我們創建了兩個測試組(即Search和ToDo),并在“方法”級別并行執行。TestNG中的線程計數屬性允許您通過指定在測試執行期間要創建的最大線程數,來并行開展測試。

可見,分組測試場景降低了維護測試套件的復雜性,同時也加快了執行時間。當然,這些都取決于為實現并行化而選擇的方法。

使用Selenium 4(而不是Selenium 3)

Selenium 4是Selenium自動化框架中最受期待的版本之一。目前,Selenium 4的最新版本為??4.0.0-beta-1??。它在如下方面進行了顯著的改進和增強:

  • 改進和優化了Selenium Grid
  • 對Selenium WebDriver予以了W3C標準化
  • 增強了Selenium 4的IDE
  • 引入了Chrome DevTools
  • 引入了相對定位器(Relative Locators)

總地說來,Selenium 4中的增強功能可以在加速Selenium測試方面發揮重要的作用。

過去,Selenium 3使用JSON有線協議,在Web瀏覽器和測試代碼之間進行通信。這會導致使用W3C協議對API請求進行編、解碼而產生額外的開銷。而Selenium 4直接使用WebDriver W3C協議,從而加快了與Web瀏覽器的通信。這種架構更改不但加快了Selenium測試,而且提高了測試的穩定性。

下圖展示的是在Selenium 4中新引入的相對定位器。當它在訪問臨近的特定WebElement時,非常實用。

與頁面上的每個WebElement使用find_element()和find_elements()方法不同,相對定位器通過與TagName(在Selenium 4的Java中)結合使用,可以讓您以更快的速度訪問到相對WebElement。因此,在您必須訪問相對于DOM元素的WebElement場景時,相對定位器可以加速Selenium測試。

值得一提的是,從Selenium 3升級到Selenium 4是無縫的,您應當檢查版本,以確認是否真的能夠利用Selenium 4所提供的特性和功能,來加速Selenium測試。

使用基于云的Selenium Grid進行自動化測試

當涉及到網格的可擴展性和可靠性時,在本地Selenium Grid上并行運行測試,存在著一個嚴重的缺陷:它并不適用于在大量瀏覽器、操作系統和設備的組合上,并行地執行針對大型Web應用的多個測試套件。

所謂云端的Selenium測試,是指在可靠且可擴展的、基于云服務的Selenium Grid上并行開展測試,因此它有助于加快Selenium測試。由下面顯示的testng.xml文件示例可知,該并行是在“測試”級別上實現的。即:每個<test>標記都在單獨的線程中運行。

從下面的執行快照中可以看出,這兩個測試都是在基于云端的Selenium Grid上并行運行的。 

使用由基于云端的Selenium Grid所提供的功能,您可以并行運行“N”個測試(此處的“N”取決于您計劃支持的“最大并發會話數”),進而加快Selenium測試。 

通過禁用網頁上的圖像來實現更快的頁面加載

一旦創建了Selenium WebDriver實例,Selenium中的driver.get()方法將被用于打開被測頁面。網頁的加載速度往往取決于頁面的組成。如果頁面上有大量的圖像的話,那么頁面的加載時間就會增加。

因此,通過使用特定于瀏覽器的設置,您可以按需禁用在相應的Web瀏覽器中加載圖像,以加快網頁的加載速度。

運行Selenium腳本時,禁用Chrome中的圖像加載

如下代碼段展示了如何實現在Chrome中禁用圖像的加載,以加快Selenium測試:

Java
package com.disableimages;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;
import java.util.HashMap;

public class test_disable_image_demo
{
String test_url = "https://www.amazon.com";
WebDriver driver = null;

@Test(enabled=true, priority = 1)
public void test_disable_images_chrome() throws InterruptedException
{
ChromeOptions options =new ChromeOptions();
HashMap<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.managed_default_content_settings.images", 2);

options.setExperimentalOption("prefs", prefs);
driver = new ChromeDriver(options);

driver.get(test_url);
driver.manage().window().maximize();

Thread.sleep(5000);
}

@AfterTest
public void tearDown()
{
if (driver != null)
{
driver.quit();
}
}
}

在上述代碼實現中,我們通過將Firefox的首選項--permissions.default.image設置為2,以禁用從Amazon處加載圖像。該方法對于需要加載大量圖像的測試頁面的情況,非常有效。

使用數據驅動測試進行參數化

在某些情況下,您需要跨多個瀏覽器和操作系統的組合,或針對不同輸入的組合,運行特定的場景測試。眾所周知,對測試方法中的值進行硬編碼,并不是一個好的習慣。您應該使用參數化,來針對大量的數據集運行測試。目前,所有主流的自動化框架,包括:用于Selenium C#的MSTest、NUnit等,用于Selenium Java的JUnit、TestNG等,以及用于Selenium Python的PyTest等,都支持參數化測試。

針對那些必須在多個測試組合(或測試輸入)中運行相同測試的需求,您可以通過諸如TestNG之類的自動化測試框架,讓testng.xml來傳遞參數,進而在“測試”級別實現并行的參數化測試,以顯著地加快Selenium測試,并提高測試的覆蓋率。

按需使用無頭(Headless)瀏覽器和驅動程序

運行Selenium自動化測試的一個目的是,檢查并驗證底層UI元素的交互。對此,您需要通過在非無頭(non-headless)模式下調用瀏覽器驅動程序,來驗證交互。

同時,無頭瀏覽器允許您在沒有瀏覽器或任何其他GUI下,運行瀏覽器UI測試。目前,Chrome、Firefox等流行的瀏覽器都可以在無頭模式下運行。由于跨瀏覽器測試是在后端運行的,因此無頭測試提高了跨瀏覽器測試的整體性能。請參考如下代碼段: 

Java
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("build", "your build name");
capabilities.setCapability("name", "your test name");
capabilities.setCapability("platform", "Windows 10");
capabilities.setCapability("browserName", "Chrome");
capabilities.setCapability("version","89.0");
capabilities.setCapability("headless",true);

當您不打算檢查通過測試腳本、以及相應的瀏覽器驅動程序去實現的UI交互時,就可以使用無頭瀏覽器測試。可以說,沒有瀏覽器UI和無頭瀏覽器的各種UI,都可以起到加速Selenium測試的效果。

目前,此類主流無頭瀏覽器(或驅動程序)包括:HtmlUnit、Splash、PhantomJS、TrifleJS、ZombieJS、以及SimpleBrowser。其中,基于HtmlUnit的HtmlUnitDriver是Selenium WebDriver無頭瀏覽器的輕量級實現。HtmlUnitDriver是與Chrome和Firefox類似的瀏覽器驅動程序,不過它并不提供GUI。因此,您可以靈活地在主流瀏覽器的無頭版本、以及HtmlUnitDriver上,執行跨瀏覽器測試。

用Java編寫的HtmlUnit瀏覽器能夠支持AJAX和JavaScript的處理。同時,它也提供了部分渲染的功能。下面展示的是用于創建HtmlUnitDriver實例,并使用它在Selenium中執行瀏覽器測試的代碼片段:

JavaScript
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

/* Create a new instance of the HtmlUnitDriver */
WebDriver driver = new HtmlUnitDriver();

/* Perform necessary actions as per the desired test requirement */
................
................

/* Release the resources held by HtmlUnitDriver */
driver.quit();

而PhantomJS是另一種流行的、基于JavaScript API的無頭瀏覽器選擇項。它使用QtWebKit作為后端,并為流行的Web標準提供了諸如JSON、Canvas、SVG、以及DOM等原生的處理支持。PhantomJS 2.1是其最新的穩定版本,其中集成了GhostDriver。不過, PhantomJS項目(https://github.com/ariya/phantomjs)目前處于暫停狀態。

PhantomJS不但可以被用于Windows、Linux和macOS X等流行平臺,而且能夠被廣泛地用于諸如:無頭Web測試、頁面自動化、屏幕截圖、以及網絡監控等用例中。

下面顯示的是創建PhantomJS驅動程序實例,并使用它在Selenium中執行瀏覽器測試的代碼片段:

JavaScript
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

/* Create a new instance of the PhantomJS Driver*/
WebDriver driver = new PhantomJSDriver();
/* Perform necessary actions as per the desired test requirement */
................
................

/* Release the resources held by PhantomJS Driver */
driver.quit();

根據測試要求,我們在上述代碼中使用了無頭瀏覽器測試,來加速Selenium測試。當然,除了HtmlUnitDriver和PhantomJSDriver之外,Chrome和Firefox等無頭版本的瀏覽器,也可被用于在Selenium測試中加速,并獲取更高的準確性。

小結

在編寫Selenium測試時,影響性能的主要因素之一便是測試的運行速度。其中,基于云端的Selenium Grid和Selenium并行測試是加速該過程的兩種主要方法。同時,我們也介紹了如何通過采用不同的語言和自動化測試框架,來加速Selenium測試,提高測試性能與覆蓋率、以及交付出更好的產品質量。 

譯者介紹

陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。

原文標題:??How To Speed Up Selenium Test Cases Execution???,作者:Himanshu Sheth?

責任編輯:華軒 來源: 51CTO
相關推薦

2024-09-29 15:26:53

MySQLPython

2011-10-11 09:56:59

PhoneGapSelenium

2021-03-04 15:43:29

前端測試工具開發

2011-05-16 15:09:20

測試用例

2011-04-18 10:46:39

接口測試

2011-05-16 15:18:18

測試用例

2011-06-08 17:23:12

測試用例

2022-01-19 17:48:57

測試用例開發

2011-07-04 18:06:52

測試用例

2011-11-02 09:54:37

測試

2021-12-22 10:19:47

鴻蒙HarmonyOS應用

2022-05-10 14:54:13

驗收標準測試用例

2022-01-14 11:51:00

測試工具自動化

2011-05-16 14:54:12

測試用例

2020-08-25 08:03:59

測試Sharness結構

2023-06-09 15:24:50

UiTest接口鴻蒙

2011-12-23 17:03:29

性能測試用例設計

2011-06-03 16:58:03

測試用例

2011-09-01 10:05:24

PhoneGap應用程序測試

2011-06-14 14:04:11

測試用例
點贊
收藏

51CTO技術棧公眾號

国产视频第一页在线观看| 久久一二三四区| 国产成人77亚洲精品www| 中文av一区二区| 91丝袜脚交足在线播放| 97人人澡人人爽人人模亚洲 | 欧美唯美清纯偷拍| 蜜臀av.com| 四虎精品在永久在线观看| 久久久久网站| 九九热r在线视频精品| aa片在线观看视频在线播放| 激情欧美一区二区三区黑长吊| 一区二区视频在线| 日韩免费毛片| 免费观看成年人视频| 人人狠狠综合久久亚洲| 国模私拍视频一区| 99久久久免费精品| 国产成人一区二区三区影院| 欧美大黄免费观看| 日本超碰在线观看| 黄色亚洲网站| 天天综合色天天综合| 亚洲毛片aa| 国产中文字幕在线观看| 成人精品视频一区二区三区| 成人a在线视频| 69xxxx国产| 日韩亚洲国产精品| 欧美激情小视频| 黄色录像免费观看| 精品盗摄女厕tp美女嘘嘘| 亚洲第一福利网站| 少妇丰满尤物大尺度写真| 欧美电影在线观看网站| 色噜噜狠狠色综合中国| 欧美大片在线播放| 久久电影网站| 亚洲一区二区影院| 99亚洲国产精品| 黄视频网站在线| 国产精品视频第一区| 欧美三级电影在线播放| 日本福利午夜视频在线| 99视频在线观看一区三区| 国产91视觉| 亚洲精品国产av| 国产精品系列在线播放| 91久久国产婷婷一区二区| 在线观看国产小视频| 免费在线观看成人| 国产精品视频免费观看www| 国产精品777777| 亚洲一区不卡| 欧美综合在线第二页| 成人免费毛片男人用品| 美女视频一区免费观看| 国产成人精品视频| 中文字幕观看在线| 美女网站色91| 91在线免费观看网站| 99久久夜色精品国产亚洲| 国产乱淫av一区二区三区 | 国产又粗又猛又爽| 国产在线精品一区二区三区不卡| 亚洲资源在线看| 精品久久久久中文慕人妻| 国产99久久久国产精品潘金网站| 国产高清自拍一区| 天天摸天天干天天操| 久久色成人在线| 神马影院午夜我不卡| 日本中文字幕在线播放| 亚洲激情男女视频| 国产精品333| 欧美aaa视频| 欧美高清你懂得| 岛国精品一区二区三区| 亚洲男人都懂第一日本| 中文字幕亚洲色图| 免费一级片视频| 亚洲影音先锋| 成人妇女淫片aaaa视频| 亚洲精品18p| 久久精品日产第一区二区三区高清版| 亚洲国产精品一区二区第一页| 黄网站免费在线观看| 激情亚洲一区二区三区四区| 国产裸体免费无遮挡| 国产一区二区久久久久| 日韩电视剧免费观看网站| 美女av免费看| 精品福利电影| 国产伦精品免费视频| 可以免费看毛片的网站| 国产精品视频一二三区 | 久久aⅴ国产紧身牛仔裤| 国产精品一区二区三区在线播放| 性生活视频软件| 国产亚洲成aⅴ人片在线观看| 国产对白在线播放| 中国字幕a在线看韩国电影| 9191久久久久久久久久久| 日本黄色录像片| 香蕉av一区二区| 欧美专区中文字幕| 亚洲精品成av人片天堂无码| 国产午夜精品一区二区三区嫩草| 自拍偷拍亚洲色图欧美| 欧美巨大丰满猛性社交| 91麻豆精品91久久久久同性| 内射中出日韩无国产剧情| 重囗味另类老妇506070| 国产精品吹潮在线观看| 三级视频在线看| 亚洲老妇xxxxxx| 污污动漫在线观看| 西野翔中文久久精品国产| 欧美富婆性猛交| 国产一区二区波多野结衣| 久久免费视频色| 国产精品久久..4399| 欧美.com| 久久精品久久久久| 日本黄色中文字幕| 久久综合久久综合久久综合| 青青青在线视频播放| 精品久久亚洲| 日韩在线视频网| 中文字幕观看在线| 亚洲国产精品精华液2区45| 亚洲自偷自拍熟女另类| 精品午夜电影| 欧美精品久久久久| 亚洲第一免费视频| 亚洲精品成人精品456| 亚洲18在线看污www麻豆| 国产欧美一区二区精品久久久| 国模gogo一区二区大胆私拍| www男人的天堂| 亚洲欧美日韩成人高清在线一区| 色乱码一区二区三区在线| 国产欧美一区二区精品久久久| 欧美最猛性xxxxx(亚洲精品)| 高h放荡受浪受bl| 亚洲一区免费在线观看| 在线播放av网址| 亚洲国产美女| 国产伦精品一区二区三区视频黑人 | 91麻豆精品一二三区在线| 最近更新的2019中文字幕| 丰满人妻一区二区三区四区| 国产欧美日本一区二区三区| 北条麻妃视频在线| 成人在线亚洲| 成人做爽爽免费视频| 成人ww免费完整版在线观看| 欧美一区二区免费观在线| 中文字幕av免费在线观看| 国产成人av电影在线| 欧美视频免费看欧美视频| 亚瑟一区二区三区四区| 日韩女在线观看| 免费在线你懂的| 日韩欧美高清在线| 日本亚洲欧美在线| 国产亚洲精品中文字幕| av污在线观看| 欧美a级在线| 精品国产乱码久久久久久郑州公司| 多野结衣av一区| 国产一区二区精品丝袜| 11024精品一区二区三区日韩| 亚洲欧美日韩系列| 久久久无码人妻精品无码| 国产精品日本| 亚洲精品免费在线看| 午夜视频在线观看精品中文| 91成人福利在线| 福利在线午夜| 日韩欧美视频在线| 精品人妻一区二区三区免费看| 欧美激情中文字幕一区二区| 久久久九九九热| 亚洲在线成人| 中文字幕99| 日本天堂一区| 成人观看高清在线观看免费| 99热99re6国产在线播放| 亚洲视频自拍偷拍| www.国产欧美| 欧美在线视频日韩| 少妇久久久久久被弄高潮| 久久久www成人免费无遮挡大片 | 不卡的电视剧免费网站有什么| 日本精品久久久久中文字幕| 在线成人超碰| 日产国产精品精品a∨| 亚洲一区 二区| 国产精品wwww| 波多野一区二区| 久久久av亚洲男天堂| 青青久在线视频免费观看| 91麻豆精品国产91久久久使用方法 | 色狠狠av一区二区三区| 97成人资源站| 国产视频一区二区三区在线观看| 欧美日韩久久婷婷| 快she精品国产999| 人妻无码久久一区二区三区免费| 久久精品播放| 日本在线观看一区二区三区| 大奶在线精品| 亚洲free嫩bbb| 91精品国产66| 欧美在线一区二区三区四| 天堂av最新在线| www.亚洲成人| 国产毛片av在线| 日韩精品在线免费播放| 亚洲精品视频专区| 91精品国产综合久久久久| 中文字幕在线网站| 日本韩国精品一区二区在线观看| 日韩av综合在线| 亚洲一区二区三区四区在线免费观看 | 中文字幕777| 日本乱码高清不卡字幕| 国产又黄又爽又色| 午夜视频一区二区| 精品无码一区二区三区电影桃花| 亚洲人精品午夜| 裸体武打性艳史| 亚洲色大成网站www久久九九| 美国精品一区二区| 国产精品免费久久| 精品国产aaa| 国产欧美一区二区三区鸳鸯浴| 亚洲欧美色图视频| 久久综合精品国产一区二区三区| 女同性恋一区二区三区| 成人精品高清在线| 国产真实乱人偷精品| 白白色 亚洲乱淫| 国产激情视频网站| 91丨九色丨国产丨porny| 亚洲精品在线视频免费观看| 成人av一区二区三区| 免费的av网站| 26uuu国产电影一区二区| 亚欧洲乱码视频| 国产欧美一区二区精品婷婷| 一级特黄曰皮片视频| 国产精品天天看| 日本黄色片免费观看| 亚洲精品成人少妇| 日本三级免费看| 色综合久久久久网| 天天干天天操天天操| 欧美日韩一区不卡| 国产后入清纯学生妹| 欧美变态tickle挠乳网站| 天天操天天操天天操| 亚洲美女中文字幕| 成人福利在线| 伦理中文字幕亚洲| 成人一级福利| 国产精品久久久久久超碰 | 日韩av电影天堂| 国产免费中文字幕| 粉嫩在线一区二区三区视频| av无码av天天av天天爽| 国产午夜亚洲精品午夜鲁丝片| 一本一本久久a久久| 亚洲一区二区高清| 天天干天天色综合| 51精品视频一区二区三区| 亚洲高清视频网站| 亚洲一级黄色片| 91中文在线| 欧美资源在线观看| 国产精品一区二区美女视频免费看| 国产精品视频免费一区| 国产真实有声精品录音| 亚洲欧美日韩精品久久久 | 91久久国产| 日本福利视频一区| 美女www一区二区| 丝袜熟女一区二区三区| 国产精品色哟哟网站| 国产网友自拍视频| 欧美日韩一区二区三区四区五区| 精品毛片在线观看| 正在播放亚洲1区| av2020不卡| 成人免费网站在线| 综合亚洲自拍| 国产91porn| 日韩成人av影视| bl动漫在线观看| 亚洲摸摸操操av| 国产成人麻豆免费观看| 精品国产乱码久久久久久夜甘婷婷| 国产一区二区三区福利| 欧美激情久久久久久| 欧美男男gaygay1069| 久久精品午夜一区二区福利| 牛牛国产精品| 少妇一级淫免费播放| 久久久亚洲高清| 国产一二三四在线| 欧美日本一区二区| 国产日本在线观看| 欧美与黑人午夜性猛交久久久| 青草伊人久久| 伊人精品久久久久7777| 视频一区二区欧美| www.自拍偷拍| 精品magnet| 亚洲免费成人在线| 萌白酱国产一区二区| 欧美成人免费全部网站| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲少妇诱惑| 日本50路肥熟bbw| 一区二区三区精品视频在线| 国产又粗又猛又色又| www.亚洲人.com| 欧美亚洲黄色| 亚洲人成影视在线观看| 秋霞午夜鲁丝一区二区老狼| 国产成人无码一区二区在线观看| 亚洲一区二区欧美日韩| 精品久久国产视频| 九九热这里只有在线精品视| www.成人| 桥本有菜av在线| 狠狠色综合播放一区二区| 伊人久久久久久久久久久久久久| 欧美午夜在线观看| 午夜小视频在线| 91精品久久久久久久久| 久久久久美女| 青娱乐国产精品视频| 一区二区三区精品| 国模无码一区二区三区| 午夜精品久久久久久久99黑人| 国产精品久久久久久久久久白浆| av高清在线免费观看| av亚洲精华国产精华精华| 久久亚洲精品国产| 亚洲香蕉成视频在线观看 | 国产精品女主播一区二区三区| 国产精品边吃奶边做爽| 一本一道久久a久久精品| 高清在线观看av| 91日本在线视频| 狠狠入ady亚洲精品| 青青草成人免费视频| 色婷婷激情久久| 调教视频免费在线观看| 亚洲一区二区少妇| 黄色另类av| 成年人网站免费在线观看| 欧美色精品在线视频| www久久日com| 国产一区不卡在线观看| 视频精品一区二区| 成人高潮免费视频| 亚洲黄在线观看| 91精品影视| 今天免费高清在线观看国语| 成人aa视频在线观看| 中文字幕 人妻熟女| 久久影院模特热| 精品欧美午夜寂寞影院| 欧美在线观看视频网站| 亚洲色图制服丝袜| 污污网站免费在线观看| 国产精品wwwwww| 欧美成人综合| 亚洲区免费视频| 欧美一区二区视频在线观看2022| 男女免费观看在线爽爽爽视频| 欧美影视一区二区| 国产精品资源在线看| 丰满少妇xoxoxo视频| 久久精品99久久香蕉国产色戒| 国产毛片精品| 99草草国产熟女视频在线| 亚洲美女偷拍久久| 国产女人在线视频| 风间由美久久久| 美日韩一区二区三区| 国产精品99无码一区二区| 视频在线观看一区二区| 加勒比视频一区| 91精产国品一二三产区别沈先生| 亚洲成人免费在线|