带有@Before testng的dataProvider

时间:2016-03-09 13:43:16

标签: selenium testing jenkins testng

我正在使用SauceLab和Jenkins的一个TestNG脚本。我遇到了一个问题。当我从Jenkins运行我的项目时,我会从那里选择浏览器,所以我可以将它与“dataProvider”一起使用,但dataProvider只能使用@Test注释,我想在@before中使用dataProvider。

步骤:

  1. @Before将初始化驱动程序(Webdriver)对象。
  2. @Test执行带驱动程序对象的第一个测试用例。
  3. @Test(2nd),执行第二个具有相同驱动程序对象的测试用例。
  4. public class test
    {
        Webdriver driver;
    
        // Over here I want to use @Before
        @Test(dataProvider = "dynamicParameters", priority = 0, alwaysRun = true)
        public void init(String browser, String version, String os, Method method) throws Exception
        {
            System.out.println("Init Method");
            String BASE_URL = System.getProperty("baseUrl");
            PCRUtils pcrUtils = new PCRUtils();
            driver = pcrUtils.createDriver(browser, version, os, method.getName());
    
            driver.get(BASE_URL);
            driver.manage().window().maximize();
            Thread.sleep(50000);
         }
    
         @Test(priority = 1)
         public void verifyTitle() throws InterruptedException
         {
            AccountPage accountPage = new AccountPage();
            accountPage.verifyTitle(driver);
         }
    }
    

1 个答案:

答案 0 :(得分:1)

TestNG" @ before"方法不能直接用于@DataProvider

@BeforeMethod可以访问参数列表(TestNG - 5.18.1 - Native dependency injection):

  

任何@BeforeMethod都可以声明Object[]类型的参数。此参数将接收即将提供给即将到来的测试方法的参数列表,这些参数可以由TestNG注入,例如java.lang.reflect.Method或来自@DataProvider

但是@BeforeMethod"将在每种测试方法之前运行"你想要的是更像@BeforeClass的东西,它将在调用当前类中的第一个测试方法之前运行"" (TestNG - 2 - Annotations)。遗憾的是@BeforeClass无法通过TestNG的本地依赖注入访问参数列表,如@BeforeMethod可以。

然而,@Factory可用于使用@DataProvider完成初始的数据驱动设置。 e.g:

public class test
{
    WebDriver driver;

    @Factory(dataProvider = "dynamicParameters")
    public test(String browser, String version, String os, Method method) throws Exception
    {
        System.out.println("Init Method");
        String BASE_URL = System.getProperty("baseUrl");
        PCRUtils pcrUtils = new PCRUtils();
        driver = pcrUtils.createDriver(browser, version, os, method.getName());

        driver.get(BASE_URL);
        driver.manage().window().maximize();
        Thread.sleep(50000);
    }

    @Test(priority = 1)
    public void verifyTitle() throws InterruptedException
    {
        AccountPage accountPage = new AccountPage();
        accountPage.verifyTitle(driver);
    }

    @Test(priority = 2)
    public void verifySomethingElse() throws InterruptedException
    {
        // execute second test case with same driver object.
    }
}

有关详细信息,请参阅TestNG - 5.8 - Factories

相关问题