我正在創建一個應用程序以編程方式執行我們的java webdriver硒腳本。我們使用TestNG。如何從測試類獲得@Test方法,當以編程方式運行TestNG
我可以用虛擬XML文件啓動類。這作品:
XmlSuite suite = new XmlSuite();
suite.setName("TmpSuite");
XmlTest test = new XmlTest(suite);
test.setName("TmpTest");
List<XmlClass> classes = new ArrayList<XmlClass>();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("browser", "Firefox");
suite.setParameters(parameters);
classes.add(new XmlClass("package.classname"));
test.setXmlClasses(classes) ;
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
由於上述方法使用package.classname
執行類,我需要一種方式來獲得我們的所有課程;他們的包裹和他們的名字(我們有數百個包裹)。
我使用此代碼抓取所有package.classnames
。只需掃描項目的/ bin /目錄,將文件夾結構轉換爲包名稱,並從類文件中刪除.class擴展名。這工作,太:
//scans the /bin directory of project to grab all packages/classes
String binPath = "V:\\Selenium\\Scripts\\bin\\";
File dir = new File(binPath);
List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
List<String> classNames = new ArrayList<String>(300);
for (File f : files) {
//instead of "V:\Selenium\Scripts\bin\package\classname.class"
//I just end up with "package.classname"
classNames.add(extractClassNameFromPath(f.getPath()));
}
在這一點上
所以,我能得到我的所有類名的字符串列表,我可以把任何人進入classes.add(new XmlClass("package.classname"));
線,讓我運行任何我們的測試課程的編程。大!
綜上所述,這裏是我現在面臨的問題: 這些類有不同的@Test方法。通過啓動該類,將執行所有的@Test方法。我希望能夠在該類中提取可用的@Test方法,並將它們呈現給用戶,以便他們可以選擇他們想要的。
我不知道如何從我們的測試類中提取@Test方法。
您需要Java反射:http://tutorials.jenkov.com/java-reflection/祝你好運! – SiKing