0

假设我有一组测试用例,我首先打开一个 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 上运行相同的一组测试用例,这些用例也存储在 dataprovider 的一个表中。我该如何设计来实现这个逻辑?:

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

我怎样才能做到这一点?

谢谢!

4

2 回答 2

1

看看TestNG 工厂。例如

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
于 2015-12-09T16:52:02.677 回答
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();
    }
于 2015-12-21T20:24:04.003 回答