解决jmeter测试报告不显示后面的断言错误失败信息

一、问题描述

使用jmeter进行自动测试了两个接口,该接口测试有4个断言,其中有3个断言是失败的,并且有相应的断言错误信息:

  1. 请求失败11111111111111
  2. 请求失败222222222222
  3. 请求失败333333333333

 通过jmeter命令行ant生成的测试报告如下:

【jmeter通过ant自动生成测试报告参见:https://www.cnblogs.com/liyuanhong/articles/9208276.html

可以看到falture Message并没有将错误信息展示出来。

由于无法看到后面报错的结果,所以非常的老火,解决方法如下(通过分析ant编译的源代码)

二、解决思路

1、在jmeter的extras找到jmeter build.xml文件,找到这里,该段代码主要定义了jmeter是如何生成html报告的:

<target name="xslt-report" depends="_message_xalan">
        <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
        <xslt
            classpathref="xslt.classpath"
            force="true"
            in="${testpath}/${test}.jtl"
            out="${testpath}/${test}.html"
            style="${basedir}/jmeter-results-detail-report${style_version}.xsl">
            <param name="showData" expression="${show-data}"/>
            <param name="titleReport" expression="${report.title}"/>
            <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>
    </target>

在这里简单说一下jmeter生成html测试报告的原理:jmter通过ant 的build.xml文件,首先执行 xxx.jmx文件生成一个xxx.jtl的测试报告,然后再通过java的xalan库将xxx.jtl文件转换为一个xxx.html的可视化测试报告;而转换的规则,则定义在以上style指定的模板文件里面。

这里可以查看我们生成的xxx.jtl文件:

找到生成的报告内容:

通过以上的xxx.jtl测试报告,我们可以看到,三个断言的信息都在报告里面并没有漏掉,而可视化的html文件中没有显示,说明,在xxx.jtl文件转换为xxx.html文件的过程中出现了问题。

查看style="${basedir}/jmeter-results-detail-report${style_version}.xsl">这个定义的模板文件:

打开该文件,找到:

<xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s='false']">
	<tr>
		<td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td>
		<td><xsl:value-of select="assertionResult/failureMessage" /></td>
		<xsl:if test="$showData = 'y'">
			<td><xsl:value-of select="./binary" /></td>
		</xsl:if>
	</tr>
</xsl:for-each>

从以上代码我们可以看到,在生成断言错误信息的时候并没有使用fgor-each来进行遍历,所以,如果第一个断言没有任何信息,他将不会展示任何的断言结果,所以我们将以上代码修改如下:

<xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s='false']">
	<tr>
		<td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td>
		<td>
			<xsl:for-each select="assertionResult">
				<p>
					<xsl:value-of select="failureMessage" />
				</p>
			</xsl:for-each>
		</td>
		<xsl:if test="$showData = 'y'">
			<td><xsl:value-of select="./binary" /></td>
		</xsl:if>
	</tr>
</xsl:for-each>

翟上面的代码中,我们加了一个for-each来遍历断言信息,并将断言信息放到<p>元素里面,最后,我们再执行,生成的html测试报告就可以正常显示所有的的断言错误信息了:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值