testng:如何设计为对来自另一个数据提供者的不同URL上的数据提供者的多个案例运行@test?

问题描述 投票:0回答:2

假设我有一组测试用例,首先打开一个URL,然后运行测试:

@BeforeMethod
    @Parameters("browser")
    public void start(String browser) throws Exception {
    driver = new FirefoxDriver();
    driver.get(url);

}
@Test(dataProvider = "TestA", dataProviderClass = xxx.class)
public void TestA(String VariableA1, String VariableA2..){

}

@Test(dataProvider = "TestB", dataProviderClass = xxx.class)
public void TestB(String VariableB1, String VariableB2..){

}

@Test(dataProvider = "TestC", dataProviderClass = xxx.class)
public void TestC(String VariableC1, String VariableC2..){

}

并且我想在不同的URL上运行相同的测试用例集,这些URL也存储在dataprovider的一个表中。我如何设计才能实现这种逻辑?:

  1. 从excel数据提供程序中的url表中获取url urlX。
  2. 运行测试:TestA,TestB,TestC。
  3. 然后从excel数据提供程序中的url表中获取url urlY。
  4. 运行测试:TestA,TestB,TestC ...
  5. 依此类推..

我该如何实现?

谢谢!

selenium testng testng-dataprovider
2个回答
1
投票

看看TestNG factories。例如

import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;

import java.util.Arrays;
import java.util.Iterator;

public class DemoTest {
    private final String url;

    @Factory(dataProvider = "urls", dataProviderClass = xxx.class)
    public DemoTest(String url) {
        this.url = url;
    }

    @Test(dataProvider = "someData", dataProviderClass = DemoTest.xxx.class)
    public void something(int a, int b) {
        System.out.println(String.format("%s, %d, %d", url, a, b));
    }

    @Test(dataProvider = "someOtherData", dataProviderClass = DemoTest.xxx.class)
    public void somethingElse(int a, int b) {
        System.out.println(String.format("%s, %d, %d", url, a, b));
    }

    public static class xxx {
        @DataProvider
        public static Iterator<Object[]> urls() {
            String[] urls = {
                    "https://www.google.com/",
                    "https://inbox.google.com/",
                    "https://calendar.google.com/",
                    "https://drive.google.com/"
            };
            return Arrays.stream(urls)
                    .map(s -> new Object[]{s})
                    .iterator();
        }

        @DataProvider
        public static Object[][] someData() {
            return new Object[][]{
                    {1, 2},
                    {3, 4}
            };
        }

        @DataProvider
        public static Object[][] someOtherData() {
            return new Object[][]{
                    {4, 3},
                    {2, 1}
            };
        }
    }
}

示例输出:

https://calendar.google.com/, 1, 2
https://calendar.google.com/, 3, 4
https://inbox.google.com/, 1, 2
https://inbox.google.com/, 3, 4
https://drive.google.com/, 1, 2
https://drive.google.com/, 3, 4
https://www.google.com/, 1, 2
https://www.google.com/, 3, 4
https://calendar.google.com/, 4, 3
https://calendar.google.com/, 2, 1
https://inbox.google.com/, 4, 3
https://inbox.google.com/, 2, 1
https://drive.google.com/, 4, 3
https://drive.google.com/, 2, 1
https://www.google.com/, 4, 3
https://www.google.com/, 2, 1

0
投票

我通过以下方式实现:

public class Test {
    WebDriver driver;
    private String hostName;
    private String url;


    @Factory(dataProvider = "xxxx global variables", dataProviderClass = globalxxx.class)
    public GetVariables(String hostName, String url, String GFlag) {
        this.hostName = hostName;
        this.url = url;

    }

    @BeforeMethod
    @Parameters("browser")
    public void start(String browser) throws Exception {

        driver = new FirefoxDriver();
        driver.get(url);
        Thread.sleep(1000);

    }

    @Test(priority = 10, dataProvider = "dataprovider Test A", dataProviderClass = xxxA.class)
    public void TestA(Variable1,
            Variable2,Variable3) throws Exception {
        some test here...

    }

    @Test(priority = 20, dataProvider = "dataprovider Test B", dataProviderClass = xxxB.class)
    public void TestB(Variable1,
            Variable2,Variable3)
            throws Exception {
        some test here...
    }

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

-1
投票

您能否提供完整的实现,因为当我尝试使用确切的代码时。但是我添加了@BeforeTest。仅最后一个URL打开@ mfulton26。我无法发表评论,所以我已将其发布为答案。

添加了这段代码


    @BeforeTest(alwaysRun=true)
     public void setUpTest() throws IOException{

            WebDriverManager.chromedriver().setup();
            ChromeDriver driver = new ChromeDriver();

            System.out.println("Inside setUptest : " + url);
            driver.get(url);

     }
© www.soinside.com 2019 - 2024. All rights reserved.