我需要找到要执行的测试数量,这些测试已在testng.xml
中进行了配置。 XML结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="User Login">
<classes>
<class name="UserLogin" />
</classes>
</test>
<test name="Registration">
<classes>
<class name="Registration" />
</classes>
</test>
</suite>
我需要获得testng.xml
的实际执行开始之前的测试数量。任何帮助表示赞赏。
答案 0 :(得分:1)
无法在实际运行开始之前明确获取要运行的测试数量,因为您会注意到,当您使用Eclipse运行测试时,随着TestNG发现它们,方法的总数一直在增加。 / p>
我已经创建了一个新的类TestNGRunner,它是从TestNG派生的,您可以尝试以下代码
public class TestNGRunner extends TestNG {
public int getTestCount() {
int count = 0;
for(XmlSuite suite : m_suites) {
count += suite.getTests().size();
}
return count;
}
}
然后在我的框架中,我得到了以下
public void execute (boolean counting) {
TestNGRunner testng = new TestNGRunner();
//....addListeners
//....setTestSuites
if(counting) {
testng.initializeSuitesAndJarFile();
return testng.getTestCount();
}
testng.run();
return 0;
}
但这只会给您标签数量,而不是方法数量。
希望这会有所帮助!
答案 1 :(得分:1)
您必须像下面那样实现ISuiteLisnter:
public ISuiteListener implements ISuiteLisnter {
private long testCount = 0 ;
private List<ITestNGMethod> testMethods = null;
public void setTestCount(long testCount){
this.testCount = testCount;
}
public long getTestCount(){
return this.testCount;
}
@Override
public void onStart( ISuite suite){
testMethods = suite.getAllMethods();
this.testCount = testMethods.size();
}
@Override
public void onFinish( ISuite suite){
}
}
这将为您提供当前正在运行的套件中所有测试方法的计数,您可以查看ITestNGMethod中要处理的实用程序方法。
答案 2 :(得分:0)
您可以将XSL转换应用于XML描述。为此,您需要一个XSLT处理器(例如xsltproc
)。合适的XSLT如下所示。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/suite">
<xsl:value-of select="count(test)"/>
</xsl:template>
</xsl:stylesheet>
输出是标记<test>
出现的次数。如果需要,可以对XSLT稍加修改以计算其他标签,例如select="count(descendant::class)"
将计算嵌套标记<class>
的出现次数。
更简单的方法是为<test name=
进行grep并计算结果行数。例如
grep '<test name=' tests.xml | wc -l
答案 3 :(得分:0)
如果您只想在xml中获取测试标签的数量,则可以在@BeforeSuite中使用此代码:
@BeforeSuite
public void setUpConfiguration() {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
Document doc = null;
DocumentBuilder docBuilder;
try {
docBuilder = docFactory.newDocumentBuilder();
doc = docBuilder.parse("D:\\PLAYGROUND\\demo\\src\\main\\resources\\testSuites\\testng.xml"); // path to your testng.xml
NodeList parameterNodes = doc.getElementsByTagName("test");
System.out.println("Total Number of tests to be executed are : " + parameterNodes.getLength());
} catch (ParserConfigurationException |SAXException | IOException e) {
System.out.println("Exception while reading counting tests in testng.xml");
}
}
请介意我的问题是否对不起。
让我知道这是否是您想要的。
答案 4 :(得分:0)
您可以使用testNG提供的侦听器
请使用方法onStart()实现ISuiteListener接口
从传递的ISuite参数中,您可以使用getAllMethods()获得已执行测试方法的列表。希望对您有帮助
答案 5 :(得分:0)
如果需要计数,则可以修改@Karthikeyan R的方法,如下所示:
public int getTestCount() {
int count = 0;
for (XmlSuite suite : m_suites) {
List<XmlTest> xmlTests = suite.getTests();
for (XmlTest test : xmlTests) {
count += test.getClasses().size();
}
}
return count;
}