Java TestNG不可能重复类吗?
我正在尝试构建一个以TestNG为主框架,以apachepoi为数据源(使用Java TestNG不可能重复类吗?,java,selenium,apache-poi,testng,Java,Selenium,Apache Poi,Testng,我正在尝试构建一个以TestNG为主框架,以apachepoi为数据源(使用.xlsx文件)的数据驱动自动化测试,我将把它用于selenium目的 以下是从excel文件中选择的场景示例: 它可以根据使用它的用户随机选择。模式可以是全部购买、全部消费或混合 期望值按照选择的顺序运行 到目前为止,这是我创建的代码: 硕士班 public class Master { public static void main(String args[]) throws IOException {
.xlsx
文件)的数据驱动自动化测试,我将把它用于selenium目的
以下是从excel文件中选择的场景示例:
它可以根据使用它的用户随机选择。模式可以是全部购买、全部消费或混合
期望值按照选择的顺序运行
到目前为止,这是我创建的代码:
硕士班
public class Master {
public static void main(String args[]) throws IOException {
List<XmlSuite> xmlSuites = new ArrayList<>();
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName("My Suite");
List<XmlTest> xmlTests = new ArrayList<>();
XmlTest xmlTest = new XmlTest(xmlSuite);
xmlTest.setName("My Test");
Datatable datatable = new Datatable();
String sourceData = "/path/myFile.xlsx";
int scenarioRowCount = datatable.getRowCount(sourceData, 0);
XmlClass xmlClass = null;
List<XmlClass> xmlClasses = new ArrayList<>();
for(int i=1; i<=scenarioRowCount; i++) {
String scenario = datatable.getCellDatatable(sourceData, 0, i, 0);
Map<String, String> classParam = new HashMap<String, String>();
classParam.put("scenario", scenario);
if(scenario.contains("purchase")) {
xmlClass = new XmlClass(Purchase.class);
xmlClass.setParameters(classParam);
}else if (scenario.contains("consume")) {
xmlClass = new XmlClass(Consume.class);
xmlClass.setParameters(classParam);
}
xmlClasses.add(xmlClass);
}
System.out.println("classes size : " +xmlClasses.size());
xmlTest.setClasses(xmlClasses);
xmlTests.add(xmlTest);
xmlSuite.setTests(xmlTests);
xmlSuites.add(xmlSuite);
TestNG testNG = new TestNG();
testNG.setXmlSuites(xmlSuites);
testNG.run();
}
}
public class Purchase {
@Test
@Parameters({"scenario"})
public void purchase(String scenario) {
System.out.println(scenario);
//selenium code perform here, purchase a package base on selected
....
....
}
}
public class Consume {
@Test
@Parameters({"scenario"})
public void consume(String scenario) {
System.out.println(scenario);
//selenium code perform here, consume the quota for a application base on selected
....
....
}
}
消费类
public class Master {
public static void main(String args[]) throws IOException {
List<XmlSuite> xmlSuites = new ArrayList<>();
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName("My Suite");
List<XmlTest> xmlTests = new ArrayList<>();
XmlTest xmlTest = new XmlTest(xmlSuite);
xmlTest.setName("My Test");
Datatable datatable = new Datatable();
String sourceData = "/path/myFile.xlsx";
int scenarioRowCount = datatable.getRowCount(sourceData, 0);
XmlClass xmlClass = null;
List<XmlClass> xmlClasses = new ArrayList<>();
for(int i=1; i<=scenarioRowCount; i++) {
String scenario = datatable.getCellDatatable(sourceData, 0, i, 0);
Map<String, String> classParam = new HashMap<String, String>();
classParam.put("scenario", scenario);
if(scenario.contains("purchase")) {
xmlClass = new XmlClass(Purchase.class);
xmlClass.setParameters(classParam);
}else if (scenario.contains("consume")) {
xmlClass = new XmlClass(Consume.class);
xmlClass.setParameters(classParam);
}
xmlClasses.add(xmlClass);
}
System.out.println("classes size : " +xmlClasses.size());
xmlTest.setClasses(xmlClasses);
xmlTests.add(xmlTest);
xmlSuite.setTests(xmlTests);
xmlSuites.add(xmlSuite);
TestNG testNG = new TestNG();
testNG.setXmlSuites(xmlSuites);
testNG.run();
}
}
public class Purchase {
@Test
@Parameters({"scenario"})
public void purchase(String scenario) {
System.out.println(scenario);
//selenium code perform here, purchase a package base on selected
....
....
}
}
public class Consume {
@Test
@Parameters({"scenario"})
public void consume(String scenario) {
System.out.println(scenario);
//selenium code perform here, consume the quota for a application base on selected
....
....
}
}
输出
classes size : 4
purchase quota / 20GB
consume quota / instagram
===============================================
My Suite
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================
我正在使用TestNG 7.0.0
即使有4个选定的数据,如上面的示例图像(由output>classes size:4确认),结果表明测试只运行2个,并运行最新的选项。它似乎表示忽略同一类
注意:在这个问题中只有两个类,实际上不止这些,只是我让它更简单
这个设计是否可以通过TestNG实现(与运行同一类的权限相关)
或者有没有使用其他java测试框架的建议?您可以为每个具有不同参数的类创建测试标记
public class Master {
public static void main(String args[]) throws IOException {
List<XmlSuite> xmlSuites = new ArrayList<>();
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName("My Suite");
List<XmlTest> xmlTests = new ArrayList<>();
// XmlTest xmlTest = new XmlTest(xmlSuite);
// xmlTest.setName("My Test");
Datatable datatable = new Datatable();
String sourceData = "/path/myFile.xlsx";
int scenarioRowCount = datatable.getRowCount(sourceData, 0);
// XmlClass xmlClass = null;
// List<XmlClass> xmlClasses = new ArrayList<>();
for(int i=1; i<=scenarioRowCount; i++) {
String scenario = datatable.getCellDatatable(sourceData, 0, i, 0);
XmlClass xmlClass = null;
List<XmlClass> xmlClasses = new ArrayList<>();
XmlTest xmlTest = new XmlTest(xmlSuite);
xmlTest.setName("My Test" + i);
Map<String, String> classParam = new HashMap<String, String>();
classParam.put("scenario", scenario);
if(scenario.contains("purchase")) {
xmlClass = new XmlClass(Purchase.class);
xmlClass.setParameters(classParam);
}else if (scenario.contains("consume")) {
xmlClass = new XmlClass(Consume.class);
xmlClass.setParameters(classParam);
}
xmlClasses.add(xmlClass);
xmlTest.setClasses(xmlClasses);
xmlTests.add(xmlTest);
}
// System.out.println("classes size : " +xmlClasses.size());
// xmlTest.setClasses(xmlClasses);
// xmlTests.add(xmlTest);
xmlSuite.setTests(xmlTests);
System.out.println(xmlSuite.toXml());
xmlSuites.add(xmlSuite);
TestNG testNG = new TestNG();
testNG.setXmlSuites(xmlSuites);
testNG.run();
}
}
公共类主控{
公共静态void main(字符串args[])引发IOException{
List xmlSuites=new ArrayList();
XmlSuite XmlSuite=新的XmlSuite();
setName(“我的套件”);
List xmlTests=new ArrayList();
//XmlTest XmlTest=新的XmlTest(xmlSuite);
//setName(“我的测试”);
Datatable=新的Datatable();
字符串sourceData=“/path/myFile.xlsx”;
int scenarioRowCount=datatable.getRowCount(sourceData,0);
//XmlClass XmlClass=null;
//List xmlClasses=new ArrayList();
对于(int i=1;i
TestOne购买/10
TestOne采购/20
TestOne消费/10
TestOne/40
===============================================
我的套房
运行的测试总数:4,通过率:4,失败率:0,跳过率:0
===============================================
您需要使用测试对象,并将其容器XmlSuite上的并行模式设置为“方法”:
谢谢您的回复。是的,这是我尝试过的方法,遗憾的是,测试看起来很慢,这是因为每个
都有10秒的延迟。如果您设计,请查看此线程:我确认此答案。
是XML的方式。否则,您可以尝试数据提供程序功能。对于缓慢的测试,您可以在n parallel.您检查过数据提供程序功能吗?@juherr我无法使用数据提供程序功能,我已检查过。感谢您的帮助和回复。