2015-10-27 5 views
1

У меня есть этот код для тестирования сайта с селеном webdriver. Существует четыре метода @Test и @DataProvider с тремя значениями. Таким образом, в общей сложности двенадцать тестов запускаются.Повторите весь тестовый класс в TestNG с разными параметрами

public class SomeTest { 

    WebDriver driver; 

    @DataProvider(name = "URLs") 
    public Object[][] createData1() { 
    return new Object[][] { 
     {"url 1"}, 
     {"url 2"}, 
     {"url 3"}}; 
    } 

    @BeforeMethod 
    //right now I'm just setting up weddriver for chrome, but 
    //I'll need to run this test for firefox, chrome, and IE 
    public void setUpWebDriver(){ 
     driver = WebDrivers.getChromeDriver(); 
    } 

    @AfterMethod 
    public void closeWebDriver(){ 
     driver.quit(); 
    } 

    //test methods below 

    @Test(dataProvider = "URLs") 
    public void test1(String url){ 
     //test 1 with url 
    } 

    @Test(dataProvider = "URLs") 
    public void test2(String url){ 
     //test 2 with url 
    } 

    @Test(dataProvider = "URLs") 
    public void test3(String url){ 
     //test 3 with url 
    } 

    @Test(dataProvider = "URLs") 
    public void test4(String url){ 
     //test 4 with url 
    } 

} 

В настоящий момент эти тесты выполняются под Chrome. Но я также хочу повторить все эти тесты со всеми вариантами поставщика данных в Firefox и Internet Explorer. Как я могу повторить весь класс тестов для этих других веб-мастеров? Это похоже на то, что мне нужен @DataProvider для всего класса (для beforemethod).

+0

У меня была такая же проблема, когда я использовал Selenium + TestNG для моего проекта тестирования веб-приложений. Я попросил о помощи в списке рассылки TestNG и получил некоторые, но я никогда не нашел решение, которое мне действительно понравилось. – reinierpost

ответ

2

Надеюсь, вы используете тестовые примеры из файла TestNG.xml. Если да, вы можете использовать parameters, предоставленный TestNG, и настроить файл TestNG.xml для запуска тестовых примеров следующим образом.

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite1" verbose="1" > 
    <test name="Internet Explorer Test" > 
     <parameter name="browser" value="IE"> 
     <classes> 
      <class name="com.somePackage.SomeTest" /> 
     </classes> 
    </test> 

    <test name="Firefox Test" > 
     <parameter name="browser" value="FF"> 
     <classes> 
      <class name="com.somePackage.SomeTest" /> 
     </classes> 
    </test> 

    <test name="Chrome Test" > 
     <parameter name="browser" value="CH"> 
     <classes> 
      <class name="com.somePackage.SomeTest" /> 
     </classes> 
    </test> 
</suite> 

Некоторые изменения необходимы для @BeforeMethod, а также.

@BeforeMethod 
@Parameters{"browser"} 
public void setUpWebDriver(String browser){ 
    if (browser.equals("IE")) 
     driver = WebDrivers.getIEDriver(); 
    else if (browser.equals("FF")) 
     driver = WebDrivers.getFireFoxDriver(); 
    else if (browser.equals("CH")) 
     driver = WebDrivers.getChromeDriver(); 
} 
4

Вы должны использовать @Factory.

public class SomeTest { 

    @Factory 
    public Object[] createInstances() { 
     Object[] result = new Object[]{    
      new SomeTest(WebDrivers.getChromeDriver()) 
      // you can add other drivers here 
     }; 
     return result; 
    } 

    private final WebDriver driver; 

    public SomeTest(WebDriver driver) { 
     this.driver = driver 
    } 

    @DataProvider(name = "URLs") 
    public Object[][] createData1() { 
    return new Object[][] { 
     {"url 1"}, 
     {"url 2"}, 
     {"url 3"}}; 
    }  

    @AfterClass 
    public void closeWebDriver(){ 
     driver.quit(); 
    } 

    //test methods below 

    @Test(dataProvider = "URLs") 
    public void test1(String url){ 
     //test 1 with url 
    } 

    @Test(dataProvider = "URLs") 
    public void test2(String url){ 
     //test 2 with url 
    } 

    @Test(dataProvider = "URLs") 
    public void test3(String url){ 
     //test 3 with url 
    } 

    @Test(dataProvider = "URLs") 
    public void test4(String url){ 
     //test 4 with url 
    } 

} 
+0

Это то, что я искал, но если у меня есть конструктор тестов с параметром, я получаю 'java.lang.reflect.InvocationTargetException; Вложенное исключение - java.lang.reflect.InvocationTargetException: null'. – vimterd

+0

Вы должны предоставить полный стек. – juherr