如何合理隔离CI-CD管道的回归测试套件区域

时间:2019-07-20 12:04:47

标签: maven selenium jenkins selenium-webdriver testng

我已经使用Selenium Webdriver / TestNG / Maven开发了一个回归套件。我使用了数据提供程序注释,并使其成为Excel驱动。 excel包含5-7个主题领域,表中包含相应的测试用例。通过在指标列中指定Y,可以在任何选项卡中启用测试用例。 我在这里面临的问题是我想将该套件集成到管道中。但是我想为输入提供要运行的区域或测试用例,只有那一部分将作为管道的一部分运行。

我尝试使用testng组,但是由于dataprovider而失败。

1 个答案:

答案 0 :(得分:0)

由于测试用例是由数据驱动的,并且决定是否执行它们是通过excel电子表格中的列来进行的,因此可以通过在数据提供者方法中添加过滤机制来轻松实现此目的。这是步骤集,也是详细说明用例的示例。

  1. 定义一个JVM参数,您可以使用该参数获取类别。
  2. 让您的数据提供者读取JVM参数值,并根据参数值过滤出数据集并使用它。

这是一个示例,展示了这一点。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestClassSample {

  @Test(dataProvider = "dp")
  public void testMethod(String area, String category) {
    System.err.println("Area = " + area + ", Category = " + category);
  }

  @DataProvider(name = "dp")
  public Iterator<Object[]> getData(ITestContext ctx) {
    //Read the JVM argument. If no value is found we default to "all" categories.
    String categories = System.getProperty("category", "all");
    List<Object[]> data =
        new ArrayList<>(
            Arrays.asList(
                new Object[] {"Bangalore", "all"},
                new Object[] {"Chennai", "smoke"},
                new Object[] {"Mysore", "all"}));
    if (categories == null || categories.trim().isEmpty() || "all".equalsIgnoreCase(categories)) {
      return data.iterator();
    }
    data.removeIf(each -> !categories.equalsIgnoreCase(each[1].toString()));
    return data.iterator();
  }
}