我在TestNG上编写了一个测试套件。但是我想只运行那些指定如下的测试类:
excel文件的内容如下:
S.No Test Class RunFlag
1 SampleOne Y
2 SampleTwo N
3 SampleThree Y
我想只运行那些有' Y'指明他们。
以下是我的方法 - 这是我的跑步者类:
TestNG testNG = new TestNG();
List<Class> listnerClasses = new ArrayList<Class>();
Class[] classList = new Class[]{
SampleTestOne.class,
SampleTestTwo.class};
listnerClasses.add(SampleListener.class);
testNG.setDefaultSuiteName("suite");
testNG.setListenerClasses(listnerClasses);
testNG.setTestClasses(RunnerMethods.createClassList(classList));
testNG.run();
上面的类调用方法createClassList()并将Class类型的数组作为参数传递。此方法在RunnerMethods类中显示如下:
static Class[] createClassList(Class[] classList) {
Class[] finalClassList = new Class[1];
int counter = 0;
for (Class cls : classList){
String flag = readRunFlag(cls.getSimpleName());
if(flag == "Y"){
finalClassList[counter] = cls;
counter++;
}
else
continue;
}
return finalClassList;
}
private static String readRunFlag(String className){
String runFlag = null;
try(FileInputStream fis = new FileInputStream(new File("C:\\Users\\Q2435\\Desktop\\RunControl.xlsx"))){
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheet("Sheet1");
int rowNumber = findRow(sheet, className);
Row row = sheet.getRow(rowNumber);
Cell cell = row.getCell(1);
runFlag = cell.toString();
workbook.close();
}
catch (Exception e) {
e.printStackTrace();
}
return runFlag;
}
private static int findRow(XSSFSheet sheet, String cellContent) {
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
if (cell.getRichStringCellValue().getString().trim().equals(cellContent)) {
return row.getRowNum();
}
}
}
}
return 0;
}
被调用的方法返回NullPointerException。请帮我解决一下。