我通过Jenkins执行testNG脚本。我有大约75个测试类,但我只想运行特定的测试用例。为此,我需要将测试类名称传递给testNG.XML文件。显然,这可以通过反思来实现,但我不知道如何继续这样做。任何提示都将不胜感激。
答案 0 :(得分:0)
为了实现将测试类名传递给testNG.xml的目标,请考虑以编程方式创建testNG xml。 TestNG对象提供此功能。请参阅下面的示例代码。
public static void main(){
TestNG myTestNG = new TestNG();
XmlSuite mySuite = new XmlSuite();
mySuite.setName("AdviserWebTestSuite");
List<XmlTest> myTests = new ArrayList<XmlTest>();
XmlTest myTest = new XmlTest(mySuite);
myTest.setName("Created_testsuite_on_runtime");
myTest.setXmlClasses(Arrays.asList(new XmlClass("com.example.tests.class1Test")));
myTest.setXmlClasses(Arrays.asList(new XmlClass("com.example.tests.class2Test")));
myTest.setXmlClasses(Arrays.asList(new XmlClass("com.example.tests.class3Test")));
myTests.add(myTest);
mySuite.setTests(myTests);
List<XmlSuite> mySuites = new ArrayList<XmlSuite>();
mySuites.add(mySuite);
myTestNG.setXmlSuites(mySuites);
myTestNG.run();
}
答案 1 :(得分:0)
这样做你不需要反思。假设您有一个已有的TestNG xml文件,那么您所要做的就是将一个BeanShell部分添加到您的套件xml文件中,该文件可以检查传入的ITestNGMethod
对象的类名,并根据是否匹配,方法可以包括在内。
这是一个完整的工作示例。有关详细信息,请参阅我的博文here
头等舱
package com.rationaleemotions.stackoverflow.qn47563557;
import org.testng.annotations.Test;
public class FirstClass {
@Test
public void testMethod() {
System.err.println("FirstClass() says Hello");
}
}
第二课
package com.rationaleemotions.stackoverflow.qn47563557;
import org.testng.annotations.Test;
public class SecondClass {
@Test
public void testMethod() {
System.err.println("SecondClass() says Hello");
}
}
利用beanhell的TestNG套件xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="47563557_Suite" verbose="2" parallel="tests" thread-count="10">
<test name="47563557_Tests">
<method-selectors>
<method-selector>
<script language="beanshell">
<![CDATA[
whatClass = System.getProperty("classname", "com.rationaleemotions.stackoverflow.qn47563557.FirstClass");
currentClass = testngMethod.getTestClass().getName();
currentClass.equals(whatClass);
]]>
</script>
</method-selector>
</method-selectors>
<packages>
<package name="com.rationaleemotions.stackoverflow.qn47563557"/>
</packages>
</test>
</suite>
<强>输出强>
...
... TestNG 6.13.1 by Cédric Beust (cedric@beust.com)
...
FirstClass() says Hello
PASSED: testMethod
===============================================
47563557_Tests
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
47563557_Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
<强>解释强>
这里我们使用JVM参数classname
,通过它我们可以考虑完全限定的类名,以便TestNG可以在其中运行测试。我们还添加了一个默认值,以便某人不会传递任何我们仍然需要运行的东西。
您可以增强上面的beanshell以接受类名的csv(逗号分隔值),然后拆分csv,遍历其值以决定运行哪个类以及不运行哪个类。
但这应该让你开始。
答案 2 :(得分:0)