Java 如何使用xslt将XML中的值附加到TestNG可通过电子邮件发送的HTML报告
我只是有一些动态XML文件,其值如下:Java 如何使用xslt将XML中的值附加到TestNG可通过电子邮件发送的HTML报告,java,xslt,testng,Java,Xslt,Testng,我只是有一些动态XML文件,其值如下: <testCaseId>CSPDDataObject [testCaseId=US_KINDLE_22, description=RISK with AUTH-fulfillment phase]</testCaseId> <message>Some logger details</message> <exception>java.lang.AssertionError: expected
<testCaseId>CSPDDataObject [testCaseId=US_KINDLE_22, description=RISK with AUTH-fulfillment phase]</testCaseId>
<message>Some logger details</message>
<exception>java.lang.AssertionError: expected [true] but found [false]</exception>
CSPDDataObject[testCaseId=US\u KINDLE\u 22,description=AUTH实现阶段的风险]
一些日志详细信息
java.lang.AssertionError:应为[true],但找到[false]
完整的XML结构:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<FailedDetails>
<FailedMessage>
<testCaseId>US_KINDLE_TC1</testCaseId>
<message> some logger</message>
<exception>java.lang.AssertionError: expected [true] but found [false]
</exception>
</FailedMessage>
<FailedMessage>
<testCaseId>US_KINDLE_TC2</testCaseId>
<message> some logger</message>
<exception>java.lang.AssertionError: expected [true] but found [false]
</exception>
</FailedMessage>
......(n) (It repeats 'n' times)
</FailedDetails>
美国KINDLE\u TC1
一些伐木工人
java.lang.AssertionError:应为[true],但找到[false]
美国KINDLE\u TC2
一些伐木工人
java.lang.AssertionError:应为[true],但找到[false]
……(n)(重复“n”次)
我只想将此值附加到以下标记中的现有testNG emailable report中:
<h3> </h3><table> <tr> <td> need to append the above one with respective tag value</td></tr></table>
需要在上面的标签后面附加相应的标签值
截图:
这是现有html视图的示例快照。我只想在这个标记旁边添加xml值
可通过电子邮件发送的报告示例:
TestNG报告表{margin-bottom:10px;border-collage:collapse;空单元格:show}th,td{border:1px-solid}009;padding:25em.5em}th{vertical-align:bottom}td{vertical-align:top}表a{font-weight:bold}条带td{background color:#E6EBF9}.num text-align:right}.passedodd}背景色:{3F3}.passedeven背景色:{.skippededd td{背景色:#DDD}.skippedeventd{背景色:#CCC}.failededd td.attn{背景色:#F33}.failedeventd.stripe.attn{背景色:#D00}.stacktrace{空白:pre;字体系列:monospace}.totop{字体大小:85%;文本对齐:居中;边框底部:2px实心#000#测试#通过#测试#包括的组包括组TRANSFERMONY-SUITE4107103161540002521总计L410710318675分类方法开始时间(毫秒)转账资金SUITEKINDLEADERTEST&8212;failedcom.amazon.e2e.device.os221540236982369116625KindleReaderTest—;passedcom.amazon.e2e.device.os221540241421467218092KindleReaderTestcom.amazon.e2e.device.os22#KindleReaderTestParameter#1cspdataobject[testCaseId=US_kindle22,description=RISK with AUTH fulfillment phase]消息{
这里有一些信息
}Exceptionjava.lang.AssertionError:应为[true],但找到[false]
套件设置和拆卸
此xslt将读取html文件并将xml节点附加到表[@class='result']之后。在对html进行排序时,doctype将导致错误。因此,在运行xlst之前,请删除html中的第一行
XLS文件
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xpath-default-namespace="http://www.w3.org/1999/xhtml">
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />
<xsl:param name="failedxml.outputDir" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="doc" select="document($failedxml.outputDir)" />
<xsl:template match="body/table[@class='result']">
<xsl:copy-of select="."/>
<xsl:for-each select="$doc/node()/child::element()">
<table class="result">
<tr class="param">
<th>Parameter #1</th>
</tr>
<tr class="param stripe">
<td> <xsl:value-of select ="child::element()[1]"/></td>
</tr>
<tr>
<th>Messages</th>
</tr>
<tr>
<td>
<div class="messages"><xsl:value-of select ="child::element()[2]"/></div>
</td>
</tr>
<tr>
<th>Exception</th>
</tr>
<tr>
<td>
<div class="stacktrace"><xsl:value-of select ="child::element()[3]"/></div>
</td>
</tr>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
参数#1
信息
例外情况
我用gradle跑步的样子
configurations{ xslt }
dependencies {
xslt 'net.sf.saxon:saxon:8.7'
}
task generateReport << {
File reportDir=new File("${projectDir}/HTML_Reports")
if(reportDir.exists()){
reportDir.deleteDir()
}
reportDir.mkdir()
File emailreport=new File("${projectDir}/emailable-report.html")
// Write some script to remove DOCTYPE from html file before running xslt.
ant.xslt(in: "${testReportDir.absolutePath}/emailable-report.html",
style: "${projectDir.absolutePath}/merge_html.xsl",
out: "${reportDir.absolutePath}/index.html",
classpath: configurations.xslt.asPath) {
param(name: 'failedxml.outputDir', expression: "${projectDir.absolutePath}/failedtest.xml")
}
配置{xslt}
依赖关系{
xslt'net.sf.saxon:saxon:8.7'
}
任务生成器报告你能从xml中添加你想要的确切的html吗?你只想把输入xml放入td,或者你想把它们作为每个不同的列作为单独的td?它只是简单的可通过电子邮件发送的报告html标记。我只想将整个xml追加到。我需要插入XML中的每个标记。就像第一个testcaseId第二个一样,还需要一个细节,如何重复?你能用两个testcase值和parent标记更新这个问题吗?因此,我们可以使用tr tag为重复行生成xsl更新详细信息。让我附上电子邮件报告我已经更新了xsl。请编写scipt从可发送电子邮件的html中删除doctype以忽略dtd reolver错误。非常感谢您的回复。让我看看这个。是否可以运行MAVEN而不是Gradle?是的,请使用此插件。在运行xslt之前,您应该用upvote:)写一些脚本从可编辑的html文件中删除DOCTYPE。