【发布时间】:2021-01-07 11:06:51
【问题描述】:
我正在尝试构建一个以 TestNG 作为主要框架并以 apache-poi 作为数据源(使用.xlsx 文件)的数据驱动自动化测试,我' ll 将其用于硒目的。
这是从 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
....
....
}
}
输出
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 个选定的数据(通过输出确认> classes size : 4),但事实证明,测试只运行了 2 个,并运行了最新的选择。这似乎表明忽略了同一个类。
注意:本题只有2个类,其实不止这些,只是我把它简化了。
这个设计用TestNG可以实现吗(与同一个类的运行权限有关)?
或者有什么建议使用另一个java测试框架?
【问题讨论】:
-
@juherr 我无法使用数据提供者功能实现,我已经检查过了。感谢您迄今为止的帮助和回复。
标签: java selenium apache-poi testng