Java 当以编程方式运行TestNG时,如何从测试类中获取@Test方法
我正在创建一个应用程序,以编程方式执行java webdriver selenium脚本。我们使用TestNG 我能够使用虚拟XML文件启动这些类。此有效:Java 当以编程方式运行TestNG时,如何从测试类中获取@Test方法,java,selenium,webdriver,testng,Java,Selenium,Webdriver,Testng,我正在创建一个应用程序,以编程方式执行java webdriver selenium脚本。我们使用TestNG 我能够使用虚拟XML文件启动这些类。此有效: XmlSuite suite = new XmlSuite(); suite.setName("TmpSuite"); XmlTest test = new XmlTest(suite); test.setName("TmpTest"); List<XmlClass> classes =
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();
所以在这一点上,我能够得到我所有类名的字符串列表,并且我可以将它们中的任何一个放入classes.add(newxmlclass(“package.classname”)代码>行,允许我以编程方式运行任何测试类。太好了
综上所述,我现在面临的问题是:
这些类有不同的@Test方法。通过只启动该类,所有@Test方法都将被执行。我希望能够提取该类中可用的@Test方法,并将它们呈现给用户,以便他们可以选择想要的方法
我不知道如何从我们的测试类中提取@Test方法。您可以使用及其方法注释扫描程序:
Reflections reflections = new Reflections("my.package");
Set<Method> resources =
reflections.getMethodsAnnotatedWith(org.testng.Test.class);
Reflections=newreflections(“my.package”);
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.Test.class);
您可以使用及其方法AnnotationsCanner:
Reflections reflections = new Reflections("my.package");
Set<Method> resources =
reflections.getMethodsAnnotatedWith(org.testng.Test.class);
Reflections=newreflections(“my.package”);
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.Test.class);
您需要Java反射:祝您好运!您需要Java反射:祝您好运!谢谢,但是有没有办法从一个类中获得@test方法?(而不是整个程序包)是,使用类作为参数。看,我用“package.name”和类都试过了,但是它似乎从来没有返回任何东西。无论我尝试getMethodsgetMethodsAnnotatedWith(org.testng.annotations.Test.class)
还是只尝试getMethodsReturn(String.class)
(作为测试,我仍然只需要带注释的方法),结果总是一个空集。(这可能与此无关,但在添加javaassist
库之前,我一直收到一个NoClassDefFoundError
错误)。我会尝试在我这方面进行测试,但您可能应该根据反思库问一个新问题谢谢,这就是我要做的。我发现这个构造函数可以工作,但是它返回项目中每个类的带注释的方法(不仅仅是指定的包)Reflections Reflections=new Reflections(new ConfigurationBuilder().setURL(ClasspathHelper.forPackage(“abercrombie.desktop.abercrombie”)。setScanners(new methodAnnotationsCanner());
谢谢,但是有没有办法从一个类中获取@test方法?(而不是整个包)是的,以类作为参数。请参阅。我用“package.name”尝试了这两种方法还有一个类
,但是它似乎永远不会返回任何东西。无论我尝试使用getMethodsgetMethodsAnnotatedWith(org.testng.annotations.Test.class)
还是只使用getMethodsReturn(String.class)
(作为测试,我仍然只需要带注释的方法),结果总是一个空集。(这可能不相关,但在添加javaassist
库之前,我得到了一个NoClassDefFoundError
错误)。我将尝试在我这方面进行测试,但您可能应该基于反射库问一个新问题谢谢,这就是我要做的。我发现这个构造函数可以工作,但是它返回项目中每个类(而不仅仅是指定的包)的带注释的方法。reflections=new reflections(新建ConfigurationBuilder().setURL(ClasspathHelper.forPackage(“abercrombie.desktop.abercrombie”)).setScanners(新建方法AnnotationsCanner());