每个类具有3个或更多测试方法。
每种测试方法都可以通过或失败。
零,一种或多种方法可能会失败。
要求是遍历测试方法的结果,发现失败的方法(第一个匹配项)时,获取'message'的属性值并打印出来。
如果所有方法均未失败,则打印空白。
我该如何实现?
Input.xml
<testng-results>
<suite>
<test>
<class name="activities.ActivitiesListTest">
<test-method status="PASS" started-at="2019-02-07T18:24:47Z" name="initTest">
<reporter-output>
</reporter-output>
</test-method>
<test-method status="FAIL" started-at="2019-02-07T18:24:47Z" name="ActListsForContactShowsContactRelatedTasksTest">
<exception class="org.openqa.selenium.NoSuchElementException">
<message>
<![CDATA[Element with locator 123 not present']]>
</message>
</exception>
<reporter-output>
</reporter-output>
</test-method>
<test-method status="FAIL" started-at="2019-02-07T18:24:47Z" name="afterClass">
<exception class="org.openqa.selenium.NoSuchElementException">
<message>
<![CDATA[Message 3]]>
</message>
</exception>
<reporter-output>
</reporter-output>
</test-method>
</class>
</test>
</suite>
</testng-results>
预期结果:
<Suite>
<test failed_reason=" <![CDATA[Element with locator 123 not
present']]>"/>
</Suite>
尝试(XSL):
<Suite>
<xsl:for-each select="/class">
<test>
<xsl:attribute name="failed_reason">
<xsl:choose>
<xsl:when test="*[@status='FAIL']">test-method[position() = current()]/exception/@message</xsl:when>
</xsl:choose>
</xsl:attribute>
</test>
</xsl:for-each>
</Suite>
示例异常消息的绝对路径:
suite/test/class[@name='ActivitiesListForContactShowsContactRelatedTasksTest']/test-method[@name='ActListsTest']/exception/message
但是,没有用。
如何达到预期效果?
编辑: 尝试迈克尔的解决方案。
这是我的XSL当前的样子:
<xsl:template match="/">
<Suite>
<xsl:for-each select="testng-results/suite/test/class">
<test>
<xsl:attribute name="start-time">
<xsl:value-of select="test-method[1]/@started-at"/>
</xsl:attribute>
<xsl:attribute name="failed_reason">
{normalize-space(test-method[@status='FAIL'][1]/exception/message)}
</xsl:attribute>
</test>
</xsl:for-each>
</Suite>
</xsl:template>
答案 0 :(得分:1)
我猜(!)您想做类似的事情:
<xsl:template match="/*">
<Suite>
<xsl:for-each select="class">
<test failed_reason="{normalize-space(test-method[@status='FAIL'][1]/exception/message)}"/>
</xsl:for-each>
</Suite>
</xsl:template>
注意:
<xsl:for-each select="/class">
除非class
是根元素,否则将不会选择任何内容。但是,如果class
是根元素,则只有一个类-因此,使用xsl:for-each
毫无意义。