日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

TestNG中的参数化– DataProvider和TestNG XML(带有示例)

發(fā)布時間:2023/12/3 asp.net 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TestNG中的参数化– DataProvider和TestNG XML(带有示例) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

測試自動化,或所謂的自動化測試,并不像聽起來那樣容易。 必須考慮所有可能的用戶交互的所有排列和組合,并且在此基礎(chǔ)上,您將必須創(chuàng)建測試腳本以通過多種瀏覽器和OS組合來驗證Web應用程序。 這就是參數(shù)化在Selenium自動化測試中起關(guān)鍵作用的地方。 在本TestNG教程中,我將向您展示如何在TestNG中執(zhí)行參數(shù)化以進行Selenium自動化測試。

為什么我們要參數(shù)化?

在用于Web UI測試的現(xiàn)實世界中,我們希望我們的網(wǎng)站或Web應用程序可以在各種輸入下正常工作,并且實際上不可能僅憑一個數(shù)據(jù)集來驗證我們的方案。 因此,當暴露給瀏覽器和OS的不同數(shù)據(jù)集或不同組合時,我們確保應用程序能夠按預期運行。 多個測試組合意味著多個輸入值。

現(xiàn)在,您不能每次都在測試自動化腳本中對測試值進行硬編碼,否則,進行一項更改將需要您編輯許多測試自動化腳本。 這就是TestNG或其他任何參數(shù)中出現(xiàn)參數(shù)的地方,而我們參數(shù)化Selenium自動化測試腳本的原因是在運行時為Web應用程序提供了不同的數(shù)據(jù)集。

為什么要使用TestNG?

如果您的應用程序涉及輸入不同類型的用戶交互,則必須進行參數(shù)化。 我們可以根據(jù)所使用的框架對自動化腳本進行參數(shù)化,例如用于硒自動化測試的TestNG框架中的參數(shù)化。 我們可以考慮使用excel文件來獲取數(shù)據(jù)集,然后在自動化腳本中使用它,但是隨著我們增強自動化套件,有必要使用更強大的測試自動化框架(如TestNG)來以更強大的方式涵蓋廣泛的測試。 在本文中,我們將主要關(guān)注TestNG中的參數(shù)化,在TestNG中可以實現(xiàn)的方法以及如何在Selenium自動化測試腳本中編寫這些參數(shù)。 首先讓我們開始理解TestNG中不同類型的參數(shù)化,以及如何實現(xiàn)相同的功能。

TestNG中的參數(shù)化類型

因此,首先我們可以通過兩種方式在TestNG中實現(xiàn)參數(shù)化。

  • 使用“參數(shù)注釋”和TestNG XML文件。
  • 使用“ DataProvider批注”。
  • 使用@Parameters注釋和XML文件在TestNG中進行參數(shù)化

    首先讓我們看看在類中編寫參數(shù)注釋的簡單語法:
    @Parameter({“parameter name”})

    請注意,我們也可以在注釋中使用多個參數(shù),這些參數(shù)可以編寫如下: @Parameters({“param1”,”param2”,”param3”})

    到目前為止,參數(shù)已被限定為testng.xml文件中的Suite或Test標簽。 如果在Suite和Test中都傳遞了相同的參數(shù)值,則優(yōu)先級將賦予Test標記中傳遞的參數(shù)值。

    在繼續(xù)進行參數(shù)化示例之前,我們需要了解在TestNG中使用參數(shù)化對Selenium自動化測試活動有什么好處。 考慮一種在Google之類的搜索引擎中搜索某些關(guān)鍵字的方案。 我們將必須為每個關(guān)鍵字編寫相同的代碼行才能獲得不同的結(jié)果,但這不是可行的方法。 這就是TestNG或Selenium的任何其他測試自動化框架中的參數(shù)化出現(xiàn)的地方。 使用TestNG中的參數(shù)化,可以將這些關(guān)鍵字作為不同的參數(shù)傳遞到testng.xml中,并在Selenium自動化測試套件中添加@parameters批注。 讓我們以示例來看。

    場景:在瀏覽器中打開google.com并分別搜索3個關(guān)鍵字

    要完成此方案,以下是我們的腳本必須執(zhí)行的詳細步驟:

  • 啟動瀏覽器并打開www.google.com。
  • 在搜索框中添加第一個關(guān)鍵字作為輸入,然后點擊搜索。
  • 驗證UI上的輸入值是否與測試數(shù)據(jù)相同。
  • 對其他2個關(guān)鍵字重復上述兩個步驟。
  • 搜尋關(guān)鍵字

    QTP

    杰米特

    下面的代碼顯示了如何在TestNG中不進行參數(shù)化的情況下做到這一點。

    package parameterization; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class WithoutParameter {WebDriver driver;@Testpublic void noParam(){//Declaring our first keywordString keyWord="Selenium";//Initializing DriverSystem.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");driver = new FirefoxDriver();driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);//Opening search enginedriver.get("https://google.com");//Finding search text box WebElement searchBox = driver.findElement(By.name("q"));//Sending keyword valuesearchBox.sendKeys(keyWord);System.out.println("The search keyword entered is : " +keyWord); //Verifying the keyword on UIAssert.assertTrue(searchBox.getAttribute("value").equalsIgnoreCase(keyWord));driver.quit();} }

    為了傳遞其他2個關(guān)鍵字,我們將不得不再次為字符串' keyWord '用不同的關(guān)鍵字值編寫同一段代碼,這將導致冗長且重復的代碼。 而且,將來,如果您必須測試更多的關(guān)鍵字值,就必須編寫更多的測試。

    現(xiàn)在讓我們通過在testng.xml中繞過這些關(guān)鍵字作為參數(shù)并在測試中添加@parameters注釋來簡化問題。

    Java代碼:

    package parameterization; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Parameters; import org.testng.annotations.Test;public class ParameterizedClass { WebDriver driver; @Parameters("keyWord")@Testpublic void Parameterpassing(String keyWord){ //Initializing Driver //Mention the path to your local webdriverSystem.setProperty("webdriver.chrome.driver", "D:\\LocalDriver\\chromedriver.exe");driver = new ChromeDriver();driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);//Opening search enginedriver.get("https://google.com");//Finding search text box WebElement searchBox = driver.findElement(By.name("q"));//Sending keyword valuesearchBox.sendKeys(keyWord);System.out.println("The search keyword entered is : " +keyWord); //Verifying the keyword on UIAssert.assertTrue(searchBox.getAttribute("value").equalsIgnoreCase(keyWord));driver.quit();} }

    這是TestNG.xml,將用于在Selenium自動化測試的TestNG中執(zhí)行參數(shù)化。

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="3" parallel="tests" name="suite"><test name="demo1" ><parameter name="keyWord" value="Selenium" /><classes><class name="com.lambdatest.ParameterizedClass"/></classes></test> <!-- Test --><test name="demo2" ><parameter name="keyWord" value="LambdaTest" /><classes><class name="com.lambdatest.ParameterizedClass"/></classes></test> <!-- Test --><parameter name="keyWord" value="Browser Testing" /><test name="demo3" ><classes><class name="com.lambdatest.ParameterizedClass"/></classes></test> <!-- Test --> </suite> <!-- Suite -->

    現(xiàn)在,您可以運行此測試以檢查是否將我們的參數(shù)值傳遞給我們的測試方法,從而獲得了所需的結(jié)果。 您可以按照以下步驟運行:

    步驟1:在項目瀏覽器中的testng.xml文件上單擊鼠標右鍵,然后單擊“運行方式”:

    步驟2:選擇以TestNG Suite運行,您可以看到可通過電子郵件發(fā)送的報告或摘要以查看結(jié)果。

    因此,下一次我們必須針對不同的測試值運行相同的測試,而不是將同一段代碼復制復制到多個文件中,而只需編輯.xml文件,包括更多的值并運行套件。 而已。 這就是通過利用TestNG中的參數(shù)化來實現(xiàn)Selenium自動化測試的效率和節(jié)省時間的方式。

    TestNG中的參數(shù)設置是否可以幫助我們進行自動瀏覽器測試?

    到目前為止,在此用于參數(shù)化的TestNG教程中,您可能已經(jīng)通過上一節(jié)中說明的示例認識到了參數(shù)的重要性。 現(xiàn)在,您可能已經(jīng)在考慮將參數(shù)化合并到TestNG腳本中以進行自動瀏覽器測試的方法。 讓我?guī)椭鷱囊粋€非常普遍的場景開始,在這個場景中我們需要在多個瀏覽器上執(zhí)行測試,讓我們看看如何利用參數(shù)來執(zhí)行自動化的瀏覽器測試。

    場景:通過將瀏覽器名稱作為參數(shù)來打印特定的瀏覽器值。

    Java代碼:

    package parameterization;import org.testng.annotations.Test;import org.testng.annotations.Parameters;public class ParameterPass {@Parameters("browser")@Testpublic void test1(String browser) {if(browser.equalsIgnoreCase("FF")){System.out.println("The browser value is : " +browser);}else if(browser.equalsIgnoreCase("Chrome")){System.out.println("The browser value is : " +browser);}else if(browser.equalsIgnoreCase("IE")){System.out.println("The browser value is : " +browser);}else{System.out.println("Incorrect browser value passed.");} } }

    Testng.xml:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"><test name="Firefox Test"><parameter name="browser" value="FF"/><classes><class name="parameterization.ParameterPass"/></classes></test><test name="IE Test"><parameter name="browser" value="IE"/><classes><class name="parameterization.ParameterPass"/></classes></test><test name="Incorrect Browser"><parameter name="browser" value="XYZ"/><classes><class name="parameterization.ParameterPass"/></classes></test></suite>

    運行上述testng xml時,您將在控制臺中看到以下輸出:

    如果查看詳細的結(jié)果,您會發(fā)現(xiàn)在測試結(jié)果摘要中還打印了XML中傳遞的參數(shù)值:

    可通過電子郵件發(fā)送的報告顯示了傳遞給不同測試的不同參數(shù),因此可以更輕松地合并結(jié)果:

    現(xiàn)在讓我們嘗試將2個參數(shù)傳遞給我們的測試,以了解如何利用參數(shù)組合進行Selenium自動化測試。 請注意,無論傳遞給測試的參數(shù)數(shù)量是多少,都需要在測試方法中以正確的順序接受相同數(shù)量的參數(shù)。

    方案:通過傳遞瀏覽器名稱以及URL作為參數(shù)來打印特定的瀏覽器和URL值。

    package parameterization; import org.testng.annotations.Parameters; import org.testng.annotations.Test;public class ParameterPass_Multiple {@Parameters({"url","browser"})@Testpublic void test1(String url,String browser){if(browser.equalsIgnoreCase("FF")){System.out.println("The browser value is : " +browser);}else if(browser.equalsIgnoreCase("Chrome")){ System.out.println("The browser value is : " +browser); }else if(browser.equalsIgnoreCase("IE")){System.out.println("The browser value is : " +browser);}else{System.out.println("Incorrect browser value passed.");} } }<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"><test name="Firefox Test"><parameter name="url" value="http://www.google.com"/><parameter name="browser" value="FF"/><classes><class name="parameterization.ParameterPass_Multiple"/></classes></test><test name="Chrome Test"><parameter name="url" value="http://www.yahoo.com"/><parameter name="browser" value="Chrome"/><classes><class name="parameterization.ParameterPass_Multiple"/></classes></test> </suite>

    現(xiàn)在,在運行上述xml時,將生成以下輸出,其中將輸出已傳遞的兩個參數(shù):

    電子郵件報告:

    在線硒網(wǎng)格的TestNG中的參數(shù)化

    參數(shù)化是使用TestNG構(gòu)建簡潔的“測試驅(qū)動測試”框架的一種巧妙方法。 由您決定如何在TestNG中利用不同類型的參數(shù)化,或者在用例需要時同時利用兩者。

    下一個要回答的問題是,TestNG中的參數(shù)化是否可以與LambdaTest提供的包含2000多種實際瀏覽器的在線Selenium Grid一起使用?

    是的,它確實! 實際上,TestNG或任何其他框架中的參數(shù)化被認為是在多個不同的測試環(huán)境上并行運行測試的最佳方法之一,尤其是在必須定期更改要測試的測試環(huán)境的情況下。

    例如,讓我們假設您有一個要在多個測試環(huán)境上運行的測試,以確保該網(wǎng)頁與跨瀏覽器兼容。 這是自動跨瀏覽器測試的一個典型示例,現(xiàn)在幾乎是每個通過Web開展業(yè)務的組織的主要要求。

    要在LambdaTest Selenium Grid上運行測試,您需要定義所需的功能對象,該對象指示我們的在線Selenium Grid有關(guān)在哪些環(huán)境上運行測試的知識。 為此,您可以參數(shù)化所需功能對象的值。 例如,考慮以下代碼。 這是一個簡單的腳本,可打開待辦事項列表并執(zhí)行一些操作。 通過在XML文件中參數(shù)化所需功能環(huán)境值,可以在多個環(huán)境中運行同一腳本。

    package com.lambdatest;import java.net.MalformedURLException; import java.net.URL;import org.openqa.selenium.By; //import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; //import org.testng.annotations.AfterSuite; import org.testng.annotations.Parameters; import org.testng.annotations.AfterTest; //import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test;public class TestNGTodo4 {private RemoteWebDriver driver;private String Status="failed";@BeforeTest@Parameters({ "os", "browser", "version", "build" })public void setup( String os, String browser, String version, String build) throws MalformedURLException {String username = "mudits";String authkey = "kIVQzcwYkSMgZFWoSMxQjcR3ASJo2BIOUQ97GmTwdnPEOFEO2b";String hub = "@hub.lambdatest.com/wd/hub";DesiredCapabilities caps = new DesiredCapabilities();caps.setCapability("platform", os);caps.setCapability("browserName", browser);caps.setCapability("version", version);caps.setCapability("build", build);caps.setCapability("name", "TestNG-Todo-Script-4");caps.setCapability("network", true);caps.setCapability("visual", true);caps.setCapability("video", true);caps.setCapability("console", true);driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), caps);}@Testpublic void basicTest() throws InterruptedException {String spanText;System.out.println("Loading Url");driver.get("https://4dvanceboy.github.io/lambdatest/todo.html");System.out.println("Checking Box");driver.findElement(By.name("todo-1")).click();System.out.println("Checking Another Box");driver.findElement(By.name("todo-2")).click();System.out.println("Checking Box");driver.findElement(By.name("todo-3")).click();System.out.println("Checking Another Box");driver.findElement(By.name("todo-4")).click();driver.findElement(By.id("todotext")).sendKeys(" List Item 6");driver.findElement(By.id("addbutton")).click();driver.findElement(By.id("todotext")).sendKeys(" List Item 7");driver.findElement(By.id("addbutton")).click();driver.findElement(By.id("todotext")).sendKeys(" List Item 8");driver.findElement(By.id("addbutton")).click();System.out.println("Entering Text");driver.findElement(By.id("todotext")).sendKeys("Get Taste of Lambda and Stick to It");driver.findElement(By.id("addbutton")).click();System.out.println("Checking Another Box");driver.findElement(By.name("todo-9")).click();// Let's also assert that the todo we added is present in the list.spanText = driver.findElementByXPath("/html/body/div/div/div/ul/li[9]/span").getText();Assert.assertEquals("Get Taste of Lambda and Stick to It", spanText);Status="passed";//Thread.sleep(150);System.out.println("TestFinished");}@AfterTestpublic void tearDown() {driver.executeScript("lambda-status=" + Status);System.out.println(this.getClass().getName());driver.quit();}}Here’s the Corresponding XML file <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="3" parallel="tests" name="suite"><parameter name="build" value="Demo-TestNG" /><test name="demo1" ><parameter name="os" value="windows 10" /><parameter name="browser" value="chrome" /><parameter name="version" value="73" /><classes><class name="com.lambdatest.TestNGTodo4"/></classes></test> <!-- Test --><test name="demo2" ><parameter name="os" value="windows 8.1" /><parameter name="browser" value="firefox" /><parameter name="version" value="59" /><classes><class name="com.lambdatest.TestNGTodo5"/></classes></test> <!-- Test --><parameter name="os" value="macOS Mojave" /><parameter name="browser" value="safari" /><parameter name="version" value="12" /><test name="demo3" ><classes><class name="com.lambdatest.TestNGTodo6"/></classes></test> <!-- Test --> </suite> <!-- Suite -->

    您是否注意到我如何將Suite標記中的線程數(shù)和并行值用于Selenium自動化測試?

    上面的腳本將在3個不同的環(huán)境中運行相同的測試類,而最好的部分是它們將并行運行。 這意味著所有三個測試將同時執(zhí)行,從而將您的測試執(zhí)行時間縮短了很多倍。 感謝Selenium Grid允許我們利用Selenium進行并行測試 。

    要考慮的事情

    在參加完此TestNG教程之后,到目前為止,您必須對在下一個項目中使用參數(shù)進行Selenium自動化測試感到信心滿滿,也許有些激動,但要花一會兒時間。 在使用@Parameters批注時,必須注意幾點。

    ?如果嘗試將testng.xml中的參數(shù)值類型轉(zhuǎn)換為相應的測試方法參數(shù),則將引發(fā)錯誤。 例如,如果您將method參數(shù)指定為integer ,但是在TestNG.xml中傳遞了String值,則會出現(xiàn)如下異常:

    Testng.xml:

    Optional 使用@Optional批注

    如果我們在方法中定義的參數(shù)未出現(xiàn)在testng.xml中,則將出現(xiàn)testNG異常,并且測試將跳過。 為了克服這種情況,我們可以使用@Optional注釋。 首先讓我們看看它的語法:

    @Parameter(“browser”) @Test public void paramCheck(@Optional(“OptionalParameter”) String val)?? { …. }

    讓我們通過此TestNG教程中的示例深入了解這一點。

    Java代碼:

    package parameterization; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; import org.testng.annotations.Test;public class optionalParameter { @Parameters("Param One")@Testpublic void testOptionOne(String firstParam){System.out.println("The first parameter is : " +firstParam);}@Parameters("Param Two")@Testpublic void testOptionTwo(@Optional("OptionalParameter")String secondParam){System.out.println("The second parameter is : " +secondParam);} }<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <parameter name="Param One" value="My First Parameter"/> <parameter name="Param Two" value="My Second Parameter"/><test name="Test"><classes><class name="parameterization.optionalParameter"/></classes></test> </suite>

    運行上述testng.xml時,我們將獲得簡單的結(jié)果,其中將顯示第一個和第二個參數(shù),因為這兩個參數(shù)均已在XML中明確聲明。 下面的輸出圖像中也顯示了相同的內(nèi)容。

    現(xiàn)在讓我們對xml中的第二個參數(shù)進行注釋,并查看@Optional注釋的工作方式:

    新的testng.xml:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <parameter name="Param One" value="My First Parameter"/> <!-- <parameter name="Param Two" value="My Second Parameter"/> --><test name="Test"><classes><class name="parameterization.optionalParameter"/></classes></test> </suite>

    在運行此新XML時,我們看到TestNG中的Optional參數(shù)已在現(xiàn)在正在打印的測試方法中聲明,并且在任何地方都沒有拋出異常:

    may在某些情況下,您需要使用testng.xml測試參數(shù)的多個值。 @Parameters注釋不能達到目的。 我們可以有很多參數(shù),但是每個參數(shù)都可以有一個值,從而使我們的代碼可重用。 它更像我們項目的配置文件。 您可以使用多個值作為參數(shù)來使用數(shù)據(jù)提供程序。

    該TestNG教程的下一部分將詳細討論數(shù)據(jù)提供程序及其在Selenium自動化測試中的用法。

    使用數(shù)據(jù)提供程序在TestNG中進行參數(shù)化

    在上面的部分中,我們看到了如何在框架中使用@Parameters批注來獲得各種結(jié)果。 現(xiàn)在,在繼續(xù)進行過程中,我們將遇到不得不對多組數(shù)據(jù)使用測試腳本的情況。 我們可能需要在一次執(zhí)行中使用龐大的數(shù)據(jù)集。 這種類型的測試也稱為數(shù)據(jù)驅(qū)動測試,可以通過我們的TestNG框架中的@DataProvider注釋方便地實現(xiàn)。

    現(xiàn)在讓我們首先查看@DataProvider批注的語法。

    @DataProvider(name=”testData”) public Object[ ][ ] TestDataFeed(){

    在開始使用它在TestNG中進行參數(shù)化之前,需要注意兩點,首先,@DataProvider僅具有一個屬性“ name ”。 其次,它是可選的,如果您未指定它,則名稱將與相應的方法名稱相同。
    此數(shù)據(jù)提供程序返回二維數(shù)組對象。

    讓我們嘗試通過一個簡單的示例來理解這一點,在該示例中,我們嘗試使用數(shù)據(jù)提供程序傳遞紀念碑和城市名稱。 您可以進一步將此示例用作使用其他電子郵件ID和密碼登錄Gmail或Facebook的基礎(chǔ)。

    場景:在瀏覽器中打開google.com并分別搜索3個關(guān)鍵字組合。

    以下是執(zhí)行此操作的步驟:

  • 啟動瀏覽器以打開www.google.com。
  • 搜索第一個關(guān)鍵字組合。
  • 獲取頁面標題。
  • 重復上述步驟,即對其他2個關(guān)鍵字組合使用2和3。
  • 紀念碑


    印度門

    新德里

    泰姬陵

    阿格拉

    查爾·邁納爾

    海得拉巴

    Java代碼:

    package dataProvider;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.DataProvider; import org.testng.annotations.Test;public class Data_Provider {WebDriver driver;@Test(dataProvider="searchText") public void paramByDataProvider(String monument,String city) throws InterruptedException {//Initializing DriverSystem.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");driver = new FirefoxDriver();//Opening search enginedriver.get("https://google.com");WebElement searchBox=driver.findElement(By.name("q"));searchBox.sendKeys(monument +" "+city);System.out.println("You are trying to search " +monument+ " which is in " +city);WebElement srchBtn = driver.findElement(By.name("btnK"));srchBtn.submit();Thread.sleep(3000);System.out.println("The page title is: " +driver.getTitle());driver.quit();}/*Data Provider which returns Object[][] wherein* first column has 'monument' and the second one has 'city'**/@DataProvider(name="searchText")public Object[][] getDataProviderData(){Object[][] searchWords=new Object[3][2];//Enter data into Object ArraysearchWords[0][0]="India Gate";searchWords[0][1]="Delhi";searchWords[1][0]="Taj Mahal";searchWords[1][1]="Agra";searchWords[2][0]="Char Minar";searchWords[2][1]="Hyderabad";return searchWords;} }

    要運行上面的代碼,我們在TestNG.xml下面使用并像在上面的示例中一樣進行測試:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"><test name="Firefox Test"><classes><class name="parameterization.Data_provider"/></classes></test></suite> <!-- Suite -->

    我們將收到以下輸出,其中總結(jié)了傳遞的數(shù)據(jù)提供者和相應的結(jié)果:

    可通過電子郵件發(fā)送的報告:

    在上面的示例中,我們嘗試了從同一類調(diào)用數(shù)據(jù)提供程序。 您還可以通過簡單地使數(shù)據(jù)提供者方法靜態(tài)化并在測試方法注釋中提供數(shù)據(jù)提供者類來從另一個類調(diào)用數(shù)據(jù)提供者。 讓我們?yōu)閿?shù)據(jù)提供者創(chuàng)建一個不同的類,看看同一示例。

    數(shù)據(jù)提供程序類的Java代碼:

    package dataProvider; import org.testng.annotations.DataProvider;public class DataProviderClass {@DataProvider(name="searchText")public static Object[][] getDataProviderData(){Object[][] searchWords=new Object[3][2];//Enter data into Object ArraysearchWords[0][0]="India Gate";searchWords[0][1]="Delhi";searchWords[1][0]="Taj Mahal";searchWords[1][1]="Agra";searchWords[2][0]="Char Minar";searchWords[2][1]="Hyderabad";return searchWords;} }

    調(diào)用數(shù)據(jù)提供程序的類的Java代碼:

    package dataProvider; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test;public class ClassLevelDataProvider {WebDriver driver;@Test(dataProvider="searchText",dataProviderClass=DataProviderClass.class) public void paramByDataProvider(String monument,String city) throws InterruptedException {//Initializing DriverSystem.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");driver = new FirefoxDriver();//Opening search enginedriver.get("https://google.com");WebElement searchBox=driver.findElement(By.name("q"));searchBox.sendKeys(monument +" "+city);System.out.println("You are trying to search " +monument+ " which is in " +city);WebElement srchBtn = driver.findElement(By.name("btnK"));srchBtn.submit();Thread.sleep(3000);System.out.println("The page title is: " +driver.getTitle());driver.quit(); } }

    TestNG.xml運行上面的代碼:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"><test name="Firefox Test"><classes><class name="parameterization.ClassLevelDataProvider"/></classes></test></suite> <!-- Suite -->

    在跑步時,您可以親自看到我們收到的結(jié)果與以前相同。 為了更多地了解我們在自動化中可能遇到的各種情況,重要的是要理解更多一些使用帶有參數(shù)viz MethodITestContext的Data Provider注釋的示例

    示例1 –在TestNG中使用方法參數(shù)

    如果我們希望同一個數(shù)據(jù)提供者為不同的方法工作而不同,例如在為不同的測試方法測試不同的數(shù)據(jù)集的情況下,我們將在TestNG中使用方法參數(shù)。 讓我們看一個遵循以下步驟的示例:

    • 檢查方法名稱是否為國內(nèi)
    • 如果是,則返回一組值
    • 如果不是,那么另一套價值

    Java代碼:

    package dataProvider; import java.lang.reflect.Method; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class dataProviders {WebDriver driver;@BeforeMethodpublic void setUp(){//Initializing DriverSystem.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");driver = new FirefoxDriver();//Opening search enginedriver.get("https://google.com");}@AfterMethodpublic void tearDown(){driver.quit();}@Test(dataProvider="destinations")public void domesticMonuments(String monument,String city) throws InterruptedException{WebElement searchBox=driver.findElement(By.name("q"));searchBox.sendKeys(monument +" "+city);System.out.println("You are trying to search " +monument+ " which is in " +city); WebElement srchBtn = driver.findElement(By.name("btnK"));srchBtn.submit();Thread.sleep(3000);System.out.println("The page title is: " +driver.getTitle());}@Test(dataProvider="destinations")public void intlDestinations(String location) throws InterruptedException{WebElement searchBox=driver.findElement(By.name("q"));searchBox.sendKeys(location);System.out.println("You are trying to search : " +location);WebElement srchBtn = driver.findElement(By.name("btnK"));srchBtn.submit();Thread.sleep(3000);System.out.println("The page title is: " +driver.getTitle()); }@DataProvider(name="destinations")public Object[][] getDataProviderData(Method m){if(m.getName().equalsIgnoreCase("domesticMonuments")){return new Object[][]{{ "India Gate", "Delhi" },{ "Taj Mahal", "Agra" },{ "Char Minar", "Hyderabad" }};}else{return new Object[][]{{"Paris"},{"Cairo"},{"Washington"}};} } }

    Testng.XML運行上面的代碼:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite" ><test name="Firefox Test"><classes><class name="parameterization.dataProviders"/></classes></test></suite>

    運行xml的結(jié)果如下所示,您將能夠看到所使用的數(shù)據(jù)提供者的詳細信息。

    示例2 –在TestNG中使用ITestContext參數(shù)

    假設我的測試方法分配給不同的組,并且我需要對不同的組使用不同的測試數(shù)據(jù)。 在這種情況下,我們可以將ITestContext參數(shù)與數(shù)據(jù)提供程序注釋一起使用。 讓我們看一個相同的例子。

    Java代碼:

    package dataProvider; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.ITestContext; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test;public class ITestContext_DP {WebDriver driver;@BeforeMethod(groups={"One","Two"})public void setUp(){//Initializing DriverSystem.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");driver = new FirefoxDriver();//Opening search enginedriver.get("https://google.com");}@AfterMethod(groups={"One","Two"})public void tearDown(){driver.quit();}@Test(dataProvider="searchKey" , groups="One")public void testMethodOne(String monument,String city) throws InterruptedException{WebElement searchBox=driver.findElement(By.name("q"));searchBox.sendKeys(monument +" "+city);System.out.println("You are trying to search " +monument+ " which is in " +city);WebElement srchBtn = driver.findElement(By.name("btnK"));srchBtn.submit();Thread.sleep(3000);System.out.println("The page title is: " +driver.getTitle());} @Test(dataProvider="searchKey" , groups="Two")public void testMethodTwo(String location) throws InterruptedException{WebElement searchBox=driver.findElement(By.name("q"));searchBox.sendKeys(location);System.out.println("You are trying to search : " +location);WebElement srchBtn = driver.findElement(By.name("btnK"));srchBtn.submit();Thread.sleep(3000);System.out.println("The page title is: " +driver.getTitle()); }@DataProvider(name="searchKey")public Object[][] getDataProviderData(ITestContext c){Object[][] grpArr = null;for (String grp : c.getIncludedGroups()){if(grp.equalsIgnoreCase("One")){grpArr = new Object[][]{{ "India Gate", "Delhi" },{ "Taj Mahal", "Agra" },{ "Char Minar", "Hyderabad" }};break;}else if(grp.equalsIgnoreCase("Two")){grpArr = new Object[][]{{"Paris"},{"Cairo"},{"Washington"}};}} return grpArr; } }

    要調(diào)用這個testNG類,可以在xml下面使用,它將基于不同的組運行兩個測試集。

    Testng.xml:

    <?xml version="1.0" encoding="UTF-8"?> <suite name="Suite" ><test name="First DP Run"><groups><run><include name = "One" /></run></groups><classes><class name="dataProvider.ITestContext_DP"/></classes></test><test name="Second DP Run"><groups><run><include name = "Two" /></run></groups><classes><class name="dataProvider.ITestContext_DP"/></classes></test> </suite>

    運行上面的xml將產(chǎn)生如下結(jié)果:

    結(jié)論

    TestNG中的參數(shù)化允許您以更有效的方式執(zhí)行數(shù)據(jù)驅(qū)動的測試。 通過聲明參數(shù),您不必為單個測試套件的不同測試輸入編寫多個測試自動化腳本,從而使維護維護自動化代碼更容易。 我希望這個TestNG教程能夠幫助您利用Selenium自動化測試腳本。 可以使用DataProvider或帶有TestNG.xml的Parameter批注來完成Selenium自動化測試腳本的TestNG中的參數(shù)化。 我們通過示例詳細討論了兩種方式的參數(shù)化。 我們意識到DataProvider進一步提供了兩個參數(shù),即MethodITestContext 。 現(xiàn)在,您可以使用TestNG中的參數(shù)化為下一個項目啟動測試自動化腳本。 在下面的評論部分中,讓我知道您對此TestNG教程的想法。 如果您有任何疑問或疑問,請隨時發(fā)布。 祝您測試愉快!

    翻譯自: https://www.javacodegeeks.com/2019/12/parameterization-in-testng-dataprovider-and-testng-xml-with-examples.html

    總結(jié)

    以上是生活随笔為你收集整理的TestNG中的参数化– DataProvider和TestNG XML(带有示例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    久久精品综合 | 丁五月婷婷 | 在线亚洲高清视频 | 亚洲黄色小说网址 | www.久久免费 | 天天夜操| 日韩亚洲在线观看 | 在线日韩亚洲 | 国产精品久久久久久影院 | 欧美日韩在线观看一区 | 五月天亚洲综合 | 国产 日韩 欧美 中文 在线播放 | 中文字幕在线观看视频免费 | 亚洲精品视频网站在线观看 | 天天躁日日躁狠狠 | 国产精品久久久久久久久久久杏吧 | 在线播放国产一区二区三区 | 国产视频精品网 | 91精品久久久久久综合乱菊 | 日韩免费一区二区三区 | 精品美女久久久久 | 天天综合网 天天 | av高清在线观看 | 中文av影院| 国产精品日韩久久久久 | 日韩电影在线观看一区二区 | 91亚色视频 | 日韩电影中文,亚洲精品乱码 | 国产97碰免费视频 | 在线视频欧美精品 | 久久激情日本aⅴ | 视频在线一区二区三区 | 亚洲精选国产 | 婷婷色婷婷 | 国产精品18久久久久久久久久久久 | 亚洲3级 | 欧洲一区二区在线观看 | 精品国产自 | 久久高清精品 | 亚洲精品激情 | 在线视频免费观看 | 亚洲午夜久久久久久久久久久 | 丁香在线 | 国产另类xxxxhd高清 | 日韩国产欧美在线播放 | 久草免费新视频 | 中文字幕4| 国产 视频 久久 | 欧美成人按摩 | 黄色av一区二区三区 | 天天操天天摸天天射 | 麻豆 free xxxx movies hd | 嫩草av在线 | 国产福利91精品一区 | 91精品国产99久久久久久久 | 狠狠的干狠狠的操 | 国产精品视频永久免费播放 | 精品视频免费看 | 色偷偷88888欧美精品久久 | 亚洲国产97在线精品一区 | 欧美激情第八页 | 久久综合久久综合这里只有精品 | 操夜夜操 | 五月婷婷六月丁香 | 91cn国产在线 | 日韩在线视频网址 | 亚洲天堂在线观看完整版 | 综合激情久久 | 亚洲精品美女视频 | 成人久久亚洲 | 欧美激情第一区 | 亚洲午夜激情网 | 午夜精品久久久久久久99水蜜桃 | 四虎国产精品成人免费4hu | 中文字幕免费高清 | 日韩电影在线看 | 成人毛片网 | 综合久久影院 | 天天操天天爱天天爽 | 久久综合狠狠狠色97 | 人人干在线观看 | 国产精品每日更新 | 亚洲精品黄 | 国产喷水在线 | 亚洲精品久久久久999中文字幕 | 日韩.com| 中文字幕一区二区三区四区视频 | 亚洲在线网址 | 精品久久久一区二区 | 国产精品一区在线观看你懂的 | 日本久久成人中文字幕电影 | 久久论理 | 伊人成人久久 | 欧美福利久久 | 香蕉视频一级 | 99精品免费久久久久久久久 | 91喷水| 亚洲综合日韩在线 | 91精品视频在线观看免费 | 亚州精品天堂中文字幕 | 就要干b | avav片 | 久久免费a | 久久久久久久久亚洲精品 | 日韩一区二区三区不卡 | 夜夜天天干 | 国产在线观看91 | 国产视频不卡 | 米奇影视7777| 在线观看91视频 | 黄污网站在线 | 日韩黄色av网站 | 91超在线 | 久久理论影院 | 91入口在线观看 | 91在线最新 | 久久久久久久毛片 | 日韩电影在线看 | 国产午夜精品免费一区二区三区视频 | 欧美日比视频 | 久草免费在线观看视频 | 中文字幕国产视频 | 久草免费手机视频 | 国产免费观看久久 | 亚洲天天在线日亚洲洲精 | 中文av在线天堂 | 天天干天天操天天 | 婷婷网址 | 97色婷婷人人爽人人 | 狠狠色噜噜狠狠 | 国产精品一区二区久久精品爱微奶 | 麻豆91精品视频 | 丁香五香天综合情 | 二区在线播放 | 西西444www大胆高清视频 | 久久免费国产电影 | www.少妇| 99色人| 色偷偷97| 国产91对白在线播 | 国产精品欧美日韩在线观看 | 成人黄色毛片 | 久久99精品视频 | 亚洲精品ww| 91天堂在线观看 | 欧美精品久久久久久久亚洲调教 | 久久精品中文 | 久久精品电影院 | 999视频网站 | 天天亚洲 | 国产在线观看高清视频 | 国产精品九色 | 美女天天操 | 91精品国产乱码在线观看 | 精品久久久影院 | 天天天天天操 | 亚洲 欧洲 国产 日本 综合 | 久久伦理电影网 | 欧美日韩精品久久久 | 综合伊人av| 中文字幕视频网 | 最新日韩精品 | 久久国产露脸精品国产 | 国产伦精品一区二区三区在线 | 日韩视频在线观看免费 | 一级久久精品 | 国产精品99免费看 | 天堂网一区 | av黄色影院| 激情影音先锋 | www.午夜| 一区二区三区四区在线免费观看 | 91av小视频 | 亚洲在线不卡 | 精品久久1| 五月婷婷丁香网 | 国产97在线观看 | 色婷婷欧美 | 夜添久久精品亚洲国产精品 | 久久这里只有精品首页 | 色五月色开心色婷婷色丁香 | 日韩欧美99 | 美女久久一区 | 麻豆91在线看| 亚洲影院一区 | 男女激情网址 | 久久天天躁狠狠躁亚洲综合公司 | 黄色电影在线免费观看 | 国产又粗又猛又爽 | 欧美了一区在线观看 | 一区二区视频在线观看免费 | 国产精品久久久久久久久久直播 | 99视频免费 | 日韩免费观看视频 | 综合天天久久 | 亚洲一区免费在线 | 99久久精品国产毛片 | 日韩黄色软件 | 黄色高清视频在线观看 | 成 人 免费 黄 色 视频 | 国内精品久久久久久久久久久久 | 色综合久久88色综合天天 | 91av视频在线免费观看 | 国产一区二区久久久久 | 天天躁天天狠天天透 | 中文字幕国产精品一区二区 | 丁香资源影视免费观看 | 精品国产区在线 | 久久久久国产成人免费精品免费 | 欧美视频网址 | 五月天综合网 | 久久久久久久久久影视 | 五月天激情综合 | 久久激情久久 | 国产精品女主播一区二区三区 | 一区二区三区手机在线观看 | 91爱看片| 99热这里只有精品国产首页 | 国产高清不卡在线 | 日韩高清一 | 国产免费久久久久 | 国产99久久精品一区二区300 | 五月亚洲综合 | 欧美超碰在线 | 国产精品刺激对白麻豆99 | 国产黄色精品在线观看 | av亚洲产国偷v产偷v自拍小说 | 国产成人亚洲精品自产在线 | 国产在线观看污片 | 成人免费观看网站 | 色94色欧美 | 久久精国产 | 亚洲精品国产成人av在线 | 天天爱天天色 | 亚洲成a人片77777kkkk1在线观看 | 久久爱影视i | 午夜精品久久久久久久99 | 激情综合中文娱乐网 | www.五月激情.com | 国产最新在线观看 | 国产成人免费观看久久久 | 午夜资源站 | 超碰人在线 | 久久久久久久av | 久久99精品国产99久久 | 国内偷拍精品视频 | 国产视频一区精品 | 在线性视频日韩欧美 | 在线观看的av网站 | 麻豆视频一区 | 国产女人18毛片水真多18精品 | 亚洲国产精品va在线看 | 国产高清av | 国产成人精品午夜在线播放 | 在线亚洲日本 | 国产精品永久免费观看 | 国产成人在线免费观看 | 午夜久久久精品 | 中文亚洲欧美日韩 | 一区二区成人国产精品 | av在线播放中文字幕 | 亚洲精品视频在线 | 国产精品久99 | 国产明星视频三级a三级点| 在线观看中文字幕网站 | 色九九视频 | av网站免费看 | 视频在线观看国产 | 91系列在线观看 | 欧美一区二区三区激情视频 | 狠狠色丁香婷婷综合橹88 | 国产婷婷久久 | 日韩大片在线播放 | 韩国三级在线一区 | 天天综合网久久 | 91视频免费看 | 色婷婷狠狠干 | 色com | 久久久午夜视频 | 色综合久久中文字幕综合网 | 日本在线观看视频一区 | 成人h视频在线 | 精品国产一区二区三区免费 | 国产视频1| 日韩精品中文字幕av | 国产精品免费不卡 | 精品国产一区二区三区男人吃奶 | 国色天香在线观看 | 久久综合婷婷国产二区高清 | 国产精品伦一区二区三区视频 | 婷婷丁香九月 | 狠狠色网| 欧美一级大片在线观看 | 最新的av网站| 欧美另类高清 videos | 国产激情电影综合在线看 | 欧美精品第一 | 18av在线视频 | 97在线观看视频 | 日韩一区二区免费视频 | 区一区二区三区中文字幕 | 欧美一级艳片视频免费观看 | 一级精品视频在线观看宜春院 | 九九涩涩av台湾日本热热 | 亚洲午夜久久久久久久久电影网 | 黄色免费高清视频 | 欧美色操 | 欧美电影黄色 | 99久久婷婷国产精品综合 | 欧美精品在线观看免费 | 亚洲午夜大片 | 欧美日韩有码 | 麻豆国产精品一区二区三区 | 免费a级大片 | 91视频中文字幕 | 五月婷婷国产 | 日本精品一区二区三区在线播放视频 | 日日夜夜骑 | 国产免费亚洲 | 久久天天躁狠狠躁亚洲综合公司 | 婷婷 中文字幕 | 婷婷在线播放 | 婷婷激情欧美 | 天天操网址 | 国产在线观看a | 天天插天天干 | 91中文字幕在线观看 | 国产精品 日韩精品 | 日韩三级成人 | 久久精品牌麻豆国产大山 | 天天干天天做天天操 | 在线观看黄色免费视频 | 欧美精品日韩 | 久久久久欧美精品999 | 天天干天天弄 | 日本中文字幕在线观看 | 四虎成人精品永久免费av | 日韩av一区二区在线播放 | 久久成视频 | 久久精品久久精品久久 | 成人午夜网址 | 91久久精品日日躁夜夜躁国产 | 精品一区二区在线免费观看 | 成人羞羞视频在线观看免费 | 亚洲成av人影院 | 欧美精品久久久久久久久老牛影院 | 在线观看亚洲免费视频 | 欧美午夜性 | 9免费视频 | 亚洲精品综合一二三区在线观看 | 欧美大片www | 亚洲成人一区 | 久久国产精品视频观看 | 很黄很色很污的网站 | 伊人色综合久久天天 | 国产精品字幕 | 最新国产精品久久精品 | 激情久久综合 | 天堂中文在线播放 | 激情综合五月天 | 欧美另类高清 videos | 国产视频一区二区三区在线 | 黄色av在| 人人澡人人爽欧一区 | 日韩欧美电影在线 | 国产福利不卡视频 | 2021国产精品视频 | 国产一区二区在线视频观看 | 亚洲国产成人高清精品 | 日韩在线观看你懂的 | www免费网站在线观看 | 欧美亚洲精品在线观看 | 国产日韩欧美在线看 | 日韩三级视频在线观看 | 中文字幕国产精品 | 亚洲欧美成人 | 久草视频在线新免费 | 久久综合免费视频影院 | 久久国产成人午夜av影院宅 | 天天色天天搞 | 99久久婷婷国产综合亚洲 | 国产精品完整版 | 国产又粗又猛又黄又爽视频 | 91精彩视频在线观看 | 91成人网页版 | 蜜臀久久99精品久久久无需会员 | av网站免费在线 | 欧美视屏一区二区 | 中文字幕乱码在线播放 | www天天干 | 18做爰免费视频网站 | 欧美91精品久久久久国产性生爱 | 欧美国产91 | 国产成人精品一区在线 | 欧美在线aaa| 国产午夜精品免费一区二区三区视频 | 国产成人久 | 人人干网站| 国产成人亚洲精品自产在线 | 五月婷婷,六月丁香 | 中文有码在线视频 | 亚洲天堂视频在线 | 黄色免费电影网站 | 国产一级二级三级视频 | 国产成人一级 | 夜夜爽88888免费视频4848 | 香蕉视频久久久 | 欧美乱码精品一区二区 | 成人污视频在线观看 | 国产一区二区三区免费在线观看 | 国产呻吟在线 | 成人小视频在线播放 | 在线成人短视频 | 日韩午夜小视频 | 91精品国产乱码 | 久久久精品99 | 日韩在线视频精品 | 天天做天天爽 | 成人av一区二区兰花在线播放 | 婷婷六月综合亚洲 | 免费毛片aaaaaa | 欧美日韩国产一二三区 | 日韩福利在线观看 | 激情婷婷亚洲 | 日韩在线不卡av | 成人av免费网站 | 久久精品中文字幕一区二区三区 | 欧美最爽乱淫视频播放 | 黄色av一区二区 | 伊人亚洲综合网 | 久久精品日产第一区二区三区乱码 | 91福利视频网站 | 免费观看完整版无人区 | www狠狠 | 97视频网址 | 91在线色 | 一区二区三区在线观看中文字幕 | 婷色在线 | 精品国产免费看 | 免费在线黄网 | 国产剧情一区二区在线观看 | 久久精品综合网 | 奇米7777狠狠狠琪琪视频 | 欧美一区二区三区免费观看 | 中文字幕乱码亚洲精品一区 | 999久久久欧美日韩黑人 | 色视频在线观看 | 中文字幕成人网 | 亚洲精品国产品国语在线 | 免费成人看片 | 国模精品一区二区三区 | 日本中文字幕电影在线免费观看 | 久久综合九色99 | 欧美精品乱码久久久久久按摩 | 欧美激情视频一区 | 黄色在线免费观看网站 | 国产在线国偷精品产拍免费yy | 精品自拍sae8—视频 | 国产电影一区二区三区四区 | 亚洲一级黄色大片 | 91大神dom调教在线观看 | 亚洲一区视频在线播放 | 色婷婷99 | 国产日产精品一区二区三区四区的观看方式 | 日韩三级在线观看 | 国产一区二区在线免费观看 | 国产专区在线 | 国产自偷自拍 | 日韩精品黄 | 天天综合中文 | 亚洲高清激情 | 国产a免费 | 四虎永久视频 | 国产97超碰 | 亚洲国产中文字幕在线观看 | 亚洲人成免费网站 | 99精品福利 | 在线韩国电影免费观影完整版 | 一区二区 不卡 | 精品视频久久久久久 | 亚洲综合网站在线观看 | 欧美色888| 国产精品久久 | 狠狠干五月天 | 在线观看日本高清mv视频 | 色射色| 国产日韩欧美精品在线观看 | 久久99九九99精品 | 精品在线观看一区二区 | 中文字幕专区高清在线观看 | 99久久综合国产精品二区 | 日韩精品一区二区不卡 | 免费特级黄色片 | 五月激情视频 | 久久免费a | av在线播放免费 | 亚洲国产精品第一区二区 | 亚洲 欧洲av | 久久经典国产 | 三级动图 | 一区视频在线 | 午夜精品福利在线 | 日日夜夜爱 | 美女免费网站 | 精品亚洲成人 | 国产亚洲小视频 | 99精品在线视频观看 | 欧美性高跟鞋xxxxhd | 91爱爱中文字幕 | .国产精品成人自产拍在线观看6 | 天天综合导航 | 深爱开心激情网 | 国产 日韩 欧美 在线 | 中文字幕乱码在线播放 | 五月天综合激情网 | 一级黄色片在线免费看 | 日本久久电影网 | 91大片网站| 91日韩精品 | 91欧美日韩国产 | 中文字幕日韩精品有码视频 | 亚洲一级影院 | 一区二精品 | 天天干天天摸天天操 | 婷婷免费视频 | 中文字幕欧美日韩va免费视频 | 最近日本韩国中文字幕 | 天天干夜夜想 | 日韩手机视频 | 黄色成人小视频 | 午夜婷婷在线观看 | 怡春院av| 精品播放 | 日韩免费在线一区 | 午夜精品一区二区三区四区 | 黄色毛片一级片 | 波多野结衣一区二区三区中文字幕 | 午夜精品一二三区 | av中文资源在线 | 亚洲一区二区天堂 | 成人在线视频一区 | 精品嫩模福利一区二区蜜臀 | 日韩毛片久久久 | 91中文字幕在线观看 | 91丨九色丨高潮丰满 | 中文字幕最新精品 | 欧美精品v国产精品 | 午夜一级免费电影 | 2020天天干天天操 | 午夜视频在线观看一区二区 | 在线观看视频黄色 | 日韩欧美国产精品 | 黄色小说在线免费观看 | 狠狠色丁香婷婷综合视频 | 米奇四色影视 | 99免费看片| 国产高清成人 | 婷婷中文字幕综合 | 国产精品久久久久久久久大全 | 天天色播 | 精品国产伦一区二区三区 | 在线观看日本韩国电影 | 亚洲精品美女久久久久 | 狠狠色丁香婷婷综合久久片 | 精品视频免费 | 99视频在线播放 | 九九免费在线观看 | 久99视频| 在线免费高清视频 | 一本到在线 | 天天干天天在线 | 国产特级毛片aaaaaaa高清 | 亚洲免费成人av电影 | 最新国产中文字幕 | 欧美不卡在线 | 欧美成人在线免费观看 | 99综合影院在线 | 国产免费一区二区三区最新 | 久久er99热精品一区二区 | 日日夜夜操操操操 | 伊甸园av在线 | 成人小视频在线 | 麻豆传媒一区二区 | 精品久久一二三区 | 日韩二区在线观看 | www.99在线观看 | 视频在线观看日韩 | 国产视频欧美视频 | 天堂av在线中文在线 | 91精品国自产在线观看欧美 | www日韩欧美| 国产视频亚洲视频 | 黄色免费在线视频 | 国产精品白浆视频 | 成人久久久精品国产乱码一区二区 | 日韩系列在线观看 | 欧美一级性视频 | 日韩精品一区二 | 国产小视频精品 | 日韩精品在线看 | 国产精品99久久久久的智能播放 | 国产一级性生活视频 | 国产99中文字幕 | 国产69久久| 久久久精品国产一区二区电影四季 | 在线一区观看 | 日本中文字幕网址 | 日韩视频一区二区在线 | 国产亚洲无 | 婷婷激情站 | 免费69视频| 国产免费一区二区三区最新6 | 成人性生交大片免费看中文网站 | 又黄又刺激又爽的视频 | 97日日| 久久一视频 | 亚洲精品99久久久久中文字幕 | 激情小说网站亚洲综合网 | 亚洲视频免费在线观看 | 成人精品一区二区三区电影免费 | 亚洲伊人色 | 中文字幕国产精品一区二区 | 久久国产精品免费观看 | 久久久久99999 | 在线观看一二三区 | 91大神电影 | 丁香5月婷婷久久 | 二区三区在线观看 | 久久久精品国产一区二区 | 狠狠久久综合 | 久久天| av在线免费观看不卡 | 色播99| 精品999 | 国产一级片在线播放 | 中文字幕在线观看1 | 亚洲粉嫩av | 美女福利视频一区二区 | www.黄色在线 | 日本特黄一级 | 久久手机看片 | 99综合影院在线 | 国产免费人人看 | 91麻豆精品 | 天天操天天谢 | 四虎伊人 | 欧美一区二区在线刺激视频 | 久久久久成人免费 | 亚洲一区二区三区毛片 | 久久99国产精品自在自在app | 亚洲精品播放 | 国产91全国探花系列在线播放 | 国产中文字幕在线视频 | 色999在线| 日韩一级电影网站 | 激情偷乱人伦小说视频在线观看 | 91桃色在线免费观看 | 国产一区二区在线视频观看 | 亚洲久草网 | 中文字幕在线观看的网站 | 最近日本中文字幕a | 中文字幕在线观看完整 | 久久精品视频免费 | 国产一区在线观看免费 | 黄色激情网址 | 国内精品久久天天躁人人爽 | zzijzzij亚洲成熟少妇 | 成年人在线免费看 | 日韩最新在线 | 久久无码av一区二区三区电影网 | 久久久久这里只有精品 | 久久久久久久久久久福利 | 色综合婷婷 | 久久久久久视频 | 日韩免费观看一区二区 | 久久久美女 | 亚洲成av人片在线观看www | 欧美精品亚州精品 | 久久看片| 久久丁香网 | 青青河边草免费视频 | 久久综合九色综合网站 | 中文在线中文a | 九九久久精品 | 日韩av高清在线观看 | 黄色看片 | 成人久久久久久久久久 | 婷婷社区五月天 | 91福利区一区二区三区 | 亚洲精品在线电影 | 夜夜操夜夜干 | 精品国产网址 | 天天拍天天操 | 久久国产精品一二三区 | 成人试看120秒 | 欧美一区二区日韩一区二区 | 国产婷婷视频在线 | 国产精品嫩草影视久久久 | 免费午夜视频在线观看 | 国产精品99久久久久久大便 | 97在线观视频免费观看 | 午夜精品一区二区三区在线 | 香蕉视频18 | 久热超碰 | 亚洲 综合 国产 精品 | 99国产情侣在线播放 | 在线观看国产区 | 欧美日韩久久一区 | 在线免费观看成人 | 国产成人精品综合久久久久99 | 国产剧情一区二区 | 色婷婷激婷婷情综天天 | 久久久一本精品99久久精品 | 久久激情网站 | 91在线公开视频 | 免费看的黄色的网站 | av综合站| 国产看片网站 | 人人插超碰 | 伊人网综合在线观看 | 天天在线免费视频 | www.com久久久 | 色综合久久网 | 国产96在线 | 国产69精品久久99不卡的观看体验 | 99热最新地址 | 在线va视频| 国产精品二区在线观看 | av片一区| 久久久影院官网 | 久草视频中文在线 | 在线观看av不卡 | 韩日精品中文字幕 | 国产精品密入口果冻 | 日韩欧美在线第一页 | 免费黄色特级片 | aaa黄色毛片| 欧美日韩中文国产一区发布 | 日韩综合一区二区三区 | 2021国产精品视频 | 久久综合久久鬼 | 黄色大片网 | 欧美激情xxxx | 日日夜夜免费精品视频 | 97免费公开视频 | 精品久久久久久国产91 | 国产免费区 | 91最新国产 | 人人干天天干 | 天天天在线综合网 | 久久久99精品免费观看app | 中文字幕日韩电影 | 四虎成人精品永久免费av九九 | 综合网婷婷| 亚洲自拍偷拍色图 | 日日夜夜中文字幕 | 久久精品国产久精国产 | 国产精品网址在线观看 | 免费黄a大片 | 国产一区麻豆 | 97超碰资源网| 玖玖在线视频观看 | 中文字幕 在线 一 二 | 久久精品国产免费看久久精品 | 天天干天天摸天天操 | 99久久精品午夜一区二区小说 | 91久久丝袜国产露脸动漫 | 色福利网站 | 亚洲综合激情小说 | 日韩草比| 九九久久精品视频 | 97精品国产97久久久久久免费 | 最新日韩中文字幕 | 最近中文字幕mv | 免费高清av在线看 | 少妇精品久久久一区二区免费 | 亚洲免费专区 | 精品视频在线免费观看 | 九九免费在线看完整版 | 五月婷婷中文 | 精品一区 在线 | 色老板在线视频 | 日韩激情片在线观看 | 很黄很色很污的网站 | 你操综合 | 成人资源网 | 久黄色 | 欧美 激情 国产 91 在线 | 国产高清在线免费 | 国产永久免费 | 黄污污网站 | 成人午夜影院在线观看 | 97视频免费播放 | 免费a网址 | 久久综合中文字幕 | 高清精品视频 | 天天综合网天天 | 98超碰在线观看 | 色婷婷 亚洲 | 亚洲 欧美 国产 va在线影院 | 日韩欧美精品在线观看视频 | 97高清视频 | 亚州精品在线视频 | 亚洲精品视频免费观看 | 日本精品一区二区三区在线观看 | 9999激情 | 日韩激情视频在线观看 | 999日韩 | 在线导航av | 国产精品午夜av | 婷婷电影在线观看 | 久久99深爱久久99精品 | 337p日本欧洲亚洲大胆裸体艺术 | 国产精品99爱| 色视频在线看 | 国产黑丝袜在线 | 国产91精品久久久久久 | 99免费看片 | 成人黄色av免费在线观看 | 亚洲视屏在线播放 | 免费色av| 亚洲成人av在线播放 | 综合亚洲视频 | 久久久久久免费毛片精品 | 欧美中文字幕久久 | 午夜影视一区 | 久久电影网站中文字幕 | 国产盗摄精品一区二区 | 国产麻豆电影 | 国产99免费视频 | www.97色.com | 国产精品永久 | 最新国产中文字幕 | 丁香花中文字幕 | 99色精品视频 | 国产黄色片网站 | 亚洲自拍av在线 | 九九综合九九 | 欧洲精品久久久久毛片完整版 | 欧美日韩不卡一区二区三区 | av一区二区三区在线 | 欧美91精品久久久久国产性生爱 | 久久丁香 | 娇妻呻吟一区二区三区 | 人人干干人人 | 人人干狠狠操 | 色婷婷久久一区二区 | 久草网在线 | 国产精品久久久久久久久软件 | 免费看片网址 | 日韩另类在线 | 人人狠狠综合久久亚洲婷 | 亚洲有 在线 | 久久综合五月天婷婷伊人 | 久草在线视频首页 | 在线 国产 日韩 | 97天堂 | 综合网色| 毛片99| 国产精品一区二区在线免费观看 | 精品久久久久久亚洲综合网 | 国产精品美女久久久久久网站 | 欧美在线free | 丝袜足交在线 | 久草视频免费在线播放 | 欧美日韩一区久久 | 久久综合免费视频 | 中文字幕在线观看视频一区二区三区 | 欧美一区二区精品在线 | 久久久久久国产精品999 | 久草免费色站 | 久久久久成人精品免费播放动漫 | 精品国产一区二区三区久久影院 | 91视频专区| 成人av一区二区兰花在线播放 | 色吊丝在线永久观看最新版本 | www黄色com | 久久精品一区八戒影视 | 免费亚洲成人 | 欧美一级久久 | 日本黄色免费在线观看 | 操少妇视频 | 色天天综合网 | 亚洲精品视频在线播放 | 中文av日韩| 黄色片免费看 | 欧美不卡在线 | 国产精品毛片完整版 | 91成人网在线 | 国产免费人成xvideos视频 | 超碰资源在线 | 免费无遮挡动漫网站 | 亚洲国产剧情av | 91在线区 | 欧美日韩二区三区 | 97人人添人澡人人爽超碰动图 | 天堂av在线| 黄色三级网站在线观看 | 色婷婷综合久久久 | 国产精品一区二区三区在线免费观看 | 久久久久久免费 | 在线国产专区 | 国产精品美女在线观看 | 色大片免费看 | 亚洲免费在线视频 | 成人一区二区三区中文字幕 | 久久久久久视频 | 久久 亚洲视频 | 国产福利久久 | 狠狠激情中文字幕 | 二区三区毛片 | 国内精品久久久久久久影视简单 | 日本丶国产丶欧美色综合 | 456免费视频 | 久久免费一 | 国产亚洲情侣一区二区无 | 色视频 在线 | 波多野结衣在线播放一区 | 日韩大片在线播放 | 欧美一级淫片videoshd | 五月婷香蕉久色在线看 | 国产精品s色 | 97视频在线免费 | 免费观看性生交 | 成人97视频一区二区 | 狠狠色丁香婷婷综合视频 | 天天干天天射天天插 | 国产精品成人久久久久久久 | www.午夜色.com| 国产视频中文字幕在线观看 | 久久精品屋 | 黄色毛片一级片 | 欧美最新大片在线看 | 热九九精品 | 丁香婷婷基地 | 天天操天天操 | 国产精品一区二区三区四 | 欧洲精品码一区二区三区免费看 | 最近免费中文字幕mv在线视频3 | 在线观看免费一级片 | 狠狠狠综合 | 韩国一区二区在线观看 | 欧美精品天堂 | 狠狠色丁香婷婷 | 久久久黄色av | 国产成人精品一区二区三区免费 | 久久久国产网站 | 一级黄色毛片 | 精品久久久久久久 | 夜夜视频欧洲 | 很黄很污的视频网站 | av最新资源 | 中文字幕在线观看免费 | 免费网站色 | 狠狠五月天 | 成人黄色免费在线观看 | 色噜噜噜噜| 成年人在线免费视频观看 | 特级毛片aaa| 成人免费精品 | 国产最顶级的黄色片在线免费观看 | 丝袜精品视频 | 久久99精品国产91久久来源 | 不卡的av电影在线观看 | 99久久久国产精品 | 激情在线免费视频 | av在线收看| 久久久www成人免费精品张筱雨 | 中文字幕人成不卡一区 | 午夜婷婷在线观看 | 婷婷免费在线视频 | 黄色成人av在线 | 欧美性生活久久 | 久久不卡国产精品一区二区 | 欧美激情第一区 | 国产一级做a | avav片| 欧美日韩精品免费观看视频 | 久久久视屏 | 一级黄色片在线播放 | 91在线小视频 | 九色精品 | 日本激情动作片免费看 | 啪啪免费观看网站 | 国产精品久久久久久久久久久久 | 国产精品久久久久久久久久久久午夜片 | 国产91av视频在线观看 | 91亚洲网站| 亚洲无线视频 | 香蕉视频在线播放 | 日本性xxx | 日韩在线一区二区免费 | 岛国一区在线 | 天天干天天干天天操 | 一本一本久久aa综合精品 | 91av色 | 99热在线国产精品 | 91av九色 |