接口测试 Jmeter+ant+Jenkins 接口自动化框架完整版

grizz · 2018年05月09日 · 最后由 ta非ta 回复于 2021年06月16日 · 18180 次阅读

一、背景

上一篇讲了Jmeter 接口自动化 - 脚本数据分离实例,我们知道怎么利用 Jmeter 去编写接口自动化脚本,但是接口自动化测试单有脚本是不够的,我们还需要批量跑指定接口,生成接口运行报告,定位报错接口,接口定时任务,邮件通知等功能。
批量跑指定接口:我们可以利用 ant 批量跑指定目录下的 Jmeter 脚本
生成接口运行报告:使用 Jmeter(extras 目录下) 自带的jmeter-results-detail-report_21.xsl样式文件
定位报错接口:使用扩展的jmeter-results-shanhe-me.xsl(可自行下载,我 git 地址也放了) 样式文件,输出的信息比自带的jmeter-results-detail-report_21.xsl
接口定时任务:使用 Jenkins 的 build periodically 完成
邮件通知:使用 Jenkins 的 Extended E-mail Notification 插件

顺序从 Jmeter-》Jmeter+ant-》Jmeter+ant+Jenkins 穿插原理,逐渐过渡,二中讲的是基础 (可跳过),三讲的是实践,遇到的问题以及扩展。

二、Jmeter+ant+Jenkins 接口自动化框架搭建

1 Jmeter

1、E:\sample 下有 sample.jmx 的脚本文件
2、追加 E:\apache-jmeter-2.13\bin 到 path 环境变量后
环境变量配置成功验证-》dos 中输入 jmeter,windows 会直接打开 jmeter
3、Dos 命令:
cd /d e:
cd sample
jmeter -n -t sample.jmx -l log.jtl

-n 这是指定 JMeter 在非用户界面模式运行
-t 包含测试计划的 JMX 文件的名字
-l 记录取样结果的 JTL 文件的名字

这里要讲两句,我们做接口自动化还好,要是用 Jmeter 做负载测试时,建议写好性能脚本后,用 NON GUI 模式进行负载测试,即非图形化界面,也就是建议使用命令行运行!因为图形化界面会消耗资源,导致负载测试结果不精确,特别是用图形化界面时还把查看结果树给打开,查看结果树输出的结果很多,所以,写完负载测试脚本后尽量把查看结果树等调试插件给禁掉
我们启动 Jmeter3.0 以上版本,也有建议不要使用图形化界面进行负载测试的提示:
翻译:不要使用 GUI 模式进行负载测试,只用于测试创建和测试调试!

2 Jmeter+ant

1、下载 ant 后在 window 中设置 ant 环境变量:
ANT_HOME 新建:E:\Program Files\apache-ant-1.7.1
path 追加:%ANT_HOME%\bin
环境变量配置成功验证-》dos 中输入 ant,提示:Buildfile: build.xml does not exist!

2、将 JMeter 所在目录下 extras 子目录里的 ant-JMeter-1.1.1.jar 复制到 Ant 所在目录 lib 子目录之下,这样 Ant 运行时才能找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发 JMeter 脚本

3、jmeter 默认保存的是.csv 格式的文件,所以我们先要设置一下 bin/jmeter.properties 文件内容,保存
jmeter.save.saveservice.output_format=xml
4、主要逻辑思路:
E:\jmeter\build 下有 build_smoke_report.xml 文件
运行 E:\jmeter\script_smoke 下面的.jmx 脚本,生成.jtl 文件放入 E:\jmeter\report_smoke 文件中
然后 ant 再利用指定的.xsl 文件 (build_smoke_report.xml 定义) 去解析.jtl 文件,生成对应的 html 文件放入 E:\jmeter\report_smoke 中。
简写就是:跑完结果后,.xsl 文件把.jtl 文件转化成直观的 html 报告。

PS:XSL 是什么
XSL 是可扩展样式表语言(eXtensible Stylesheet Language)的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言。
易懂一点的说法:XSL 可描述如何来显示 XML 文档,XSL 之于 XML,就像 CSS 之于 HTML。

build_smoke_report.xml 文件中的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
      <tstamp>
        <format property="time" pattern="_yyyy_MMdd_HHmmss" />
    </tstamp>
    <!-- 需要改成自己本地的 Jmeter 目录-->  
    <property name="jmeter.home" value="E:\apache-jmeter-2.13" />
    <property name="report.title" value="接口测试"/>
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="E:\jmeter\report_smoke" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="E:\jmeter\report_smoke" />
    <property name="detail" value="_detail" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="SmokeReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />

    <target name="run">
        <antcall target="test" />
        <antcall target="report" />
    </target>

    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="E:\jmeter\script_smoke" includes="*.jmx" />

            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>

    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>


    <target name="report">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
        <xslt 
              classpathref="xslt.classpath"
              force="true"
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.htmlName}"
              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
              <param name="dateReport" expression="${report.datestamp}"/>
       </xslt>
                <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>

</project>

Dos 切换到 E:\jmeter\build 目录下运行:ant –f build_smoke_report.xml
提示:BUILD SUCCESSFUL 代表 build_smoke_report.xml 文件运行成功
E:\jmeter\script_smoke 目录下会生成.jtl 和.html 文件

3 Jmeter+ant+Jenkins

1、 命令行切换到 jenkins.war 的根目录,输入 java -jar jenkins.war
2、 浏览器输入地址http://localhost:8080显示界面,安装成功

3、新建一个构建自由风格的软件项目并配置

4、设置定时任务,这里是设置每周一到周五的 8 点 30 分运行次 JOB。
定时构建语法:

  • * * * * *(五颗星,中间用空格隔开)

第一颗*表示分钟,取值 0~59
第二颗*表示小时,取值 0~23
第三颗*表示一个月的第几天,取值 1~31
第四颗*表示第几月,取值 1~12
第五颗*表示一周中的第几天,取值 0~7,其中 0 和 7 代表的都是周日

4、构建->增加构建步骤->Invoke Ant->高级 (需要去 Jenkins 的系统配置->Global Tool Configuration 配置 ant 的地址),Build File 中输入 E:\jmeter\build\build_smoke_report.xml,保存

5、立即构建,运行成功,查看 console output 控制台输入的日志
出现 BUILD SUCCESSFUL 表示编译成功,跟 dos 运行 ant –f build_smoke_report.xml 效果一样

三、扩展的分割线

1·执行多个目录的 jmx 脚本


<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
    <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
    <testplans dir="E:\jmeter\script_smoke" includes="*.jmx" />

    <property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>

改成


<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
    <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
    <testplans dir="E:\jmeter\script_smoke" includes="*.jmx" />
    <testplans dir="E:\jmeter\script_smoke_two" includes="*.jmx" />

    <property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>

2.生成多个 html 报告

我这里是生成两个,一个简单的汇总报告,一个详细的报告 (用于定位接口报错)
build_smoke_report.xml 文件只利用 jmeter-results-detail-report_21.xsl 生成了一个 html 报告,想利用 jmeter-results-shanhe-me.xsl 生成第二个
添加属性值


<property name="detail" value="_detail" />
<property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />

并且将


<target name="report">
    <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
   <xslt 
          classpathref="xslt.classpath"
          force="true"
          in="${jmeter.result.jtlNamedetail}"
          out="${jmeter.result.htmlNamedetail}"
          style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl">
          <param name="dateReport" expression="${report.datestamp}"/>
   </xslt>

改为


<target name="report">
    <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
    <xslt 
          classpathref="xslt.classpath"
          force="true"
          in="${jmeter.result.jtlName}"
          out="${jmeter.result.htmlName}"
          style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
          <param name="dateReport" expression="${report.datestamp}"/>
   </xslt>
   <xslt 
          classpathref="xslt.classpath"
          force="true"
          in="${jmeter.result.jtlNamedetail}"
          out="${jmeter.result.htmlNamedetail}"
          style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl">
          <param name="dateReport" expression="${report.datestamp}"/>
   </xslt>

如果知道 XML 的一些语法,应该一下就能看明白,我们只是加了一个标签,然后把里面用到的属性值定义好。好吧,不懂 XML 语法也能看懂,哈哈。

PS:
使用 jmeter-results-shanhe-me.xsl 的一些前置操作
1、下载 style 文件:jmeter.results.shanhe.me.xsl
2、把下载的文件放到 jmeter 的 extras 目录下。
3、修改 jmeter.properties 文件如下部分,我这里都修改成 true,这样执行完脚本后就会保存这些结果到.jtl 文件里面,重启 jmeter 生效:

jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=false
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=false
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true

3.XSL 文件的定制

其实 XSL 语法跟 XML 挺像的,多看看我们可以进行定制,如定义接口排序,扩展性能指标,那样我们性能测试也能利用这个生成报告,响应时间超过 3 秒的接口标黄显示,直观显示接口响应的性能状态,主要还是看公司的业务需求。

我会把扩展后的 XSL 也放到 git 地址,有需要的可以参考。

4.与 Jenkins 的集成

我们会用到两个插件,可到 Jenkins 的系统管理-》管理插件-》可选插件中搜索安装

4.1 HTML Publisher plugin

安装好 HTML Publisher plugin 之后,会在新建或者编辑项目时,在【增加构建后操作步骤】出现【Publish HTML reports】的选项

这样我们就可以在 Jenkins 中进行接口自动化测试报告的查看

4.2 Performance plugin

安装好 Performance plugin 之后,会在新建或者编辑项目时,在【增加构建后操作步骤】出现【Publish Performance test result report】的选项


仔细的朋友可以发现,我们使用 HTML Publisher plugin 用到了 html 文件,并且目录是指定的,难道每次每次生成的接口测试结果都要被覆盖?不存在的,当一个接口变动时,可通过接口历史响应,判断接口性能变化。使用 HTML Publisher plugin 用到了 jtl 文件名字是指定的,难道也要覆盖?也不存在的,这里放一下我的解决方案。

timestamp=`date +%Y%m%d%H%M%S`
pwd
rm -f ./*.html
mkdir  /jmeter/report/$timestamp
cp /jmeter/report/*.jtl /jmeter/report/$timestamp/
cp /jmeter/report/*.html /jmeter/report/$timestamp/

cp /jmeter/report/R*.html ./
rm -f /jmeter/report/latest/*.jtl
rm -f /jmeter/report/latest/*.html
cp /jmeter/report/*.jtl /jmeter/report/latest/
cd /jmeter/report/latest
mv -f *.jtl latest.jtl
rm -f /jmeter/report/*.jtl
mv -f /jmeter/report/*.html /jmeter/report/latest

思路:每次生成的两个 html 文件和 jtl 文件都放到类似 20170831102019(时间戳) 的目录下,保证每次的接口测试结果都能保存。
结果保存了,但是每次的 jtl 文件名字是不一样的,就算把 jtl 文件名字改成一致的,目录也是不同的,于是我们新建了一个 latest 目录,每次执行接口测试都保证 latest 目录的 html 和 jtl 文件是最新的,并且把 jtl 文件的名字改成 latest.jtl,完美达到我们的要求。只要思想不滑坡,办法总比困难多😋

4.3 Jenkins 不显示 html 的 CSS 样式

说到这里,会有一个问题,就是 Jenkins 默认不显示 html 的 CSS 样式,所以界面很丑,如图:


网上一致的解决方法:jenkins->系统管理->脚本命令行,执行命令:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","sandbox allow-scripts; default-src 'none';script-src 'unsafe-inline' http://code.jquery.com/jquery-2.1.0.min.js; img-src dohko.hpeswlab.net 'self' data: ; style-src 'unsafe-inline' 'self';");
或  System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

重新运行下 job 生成 html,就会正常显示。

但是,每次重启 Jenkins,都需要再运行一次,咋搞,不太智能。
我们理解一下网上解决方法的原理,就是执行一段 Groovy script,并且要在 JOB 开始前执行,然后我们知道有个 Groovy plugin,可以执行 Groovy 脚本,那么,我们,就。。。搞起来

html 报告显示正常的结果:

4.4 jenkins 配置自动发送邮件

1.开通 163 的 SMTP 服务,需要发一条短信,163 会给让你设置一个密码(不是你的 163 邮箱密码哦)
2.安装 Email Extension Plugin 插件
3.进入系统管理 -- 系统设置
注意自带邮箱插件->邮件通知 对应插件 E-mail Notification 的配置
扩展插件->Extended E-mail Notification 对应插件 Editable Email Notification 的配置
系统设置中邮件通知和 Extended E-mail Notification(配置项多一些) 的配置基本一致


JOB 页面使用 Extended E-mail Notification 插件的配置图:

按需整理好后会把用到的 build.xml,扩展的 xsl 和 Jenkins 中 JOB 的 config.xml 放到 git 地址
https://github.com/grizz/jmeter-master

欢迎交流指正,感谢阅读。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 31 条回复 时间 点赞
grizz Jmeter 接口自动化 - 脚本数据分离实例 中提及了此贴 05月09日 12:34

楼主去看看生成的 jtl 文件,使用 jmeter 聚合报告查看下,是不是和你的 xsl 定制生成的 HTML 报告数据不一样,这个 xsl 文件网上计算的逻辑是有问题的;你这个我已经实现了,就是没写过文档,唯一我发现有问题的地方就是 xsl 逻辑有问题,你自己看吧

grizz #37 · 2018年05月10日 Author

首先感谢仔细阅读

jtl 文件在 jmeter 的聚合报告中打开,跟我的报告对比图如下:

看得出 QPS 的值跟 jmeter 的是一致的,其中 90%Line 我的为 22ms,jmeter 为 94ms,95%Line 都为 94ms
这里面一个 12 个接口,响应时间从小到大最后 3 个是 22ms,94ms,192ms(这个从报告看得出,因为是按照时间倒序排的)
计算 90%line 是用 12*90%=10.8,我是向下取整得到 10,所以取的是 22ms。
计算 95%line 是用 12*95%=11.4,我是向下取整得到 11,所以取的是 94ms。
但 jmeter 都是 94ms,可能是对 10.8 和 11.4 四舍五入,都得到 11,所以取的都是 94ms。

我的关键逻辑是这样的,根据网上的修改后的:
当只有一个数据,向上取整,当有多个数据时向下取整,报告会好看一点,但数据量大的时候,跟 jmeter 应该无差别,或者用 round 函数对数据四舍五入也可以,问题是自己知道怎么算的就好。

<!-- -95% line time -->
<xsl:template name="lineTime95">
    <xsl:param name="nodes" select="/.." />
    <xsl:choose>
        <xsl:when test="not($nodes)">NaN</xsl:when>
        <xsl:otherwise>
            <xsl:for-each select="$nodes">
                <xsl:sort data-type="number" />
                <!-- last() 返回当前上下文中的最后一个节点位置数 -->
                <!-- ceiling(number) 返回大于number的最小整数 -->
                <!-- floor(number) 返回不大于number的最大整数 -->                               
                <xsl:choose>
                    <!-- 当只有一个节点时,向上取整 -->
                    <xsl:when test="last() = 1">
                        <xsl:if test="position() = ceiling(last()*0.95)">
                            <xsl:value-of select="number(.)" />
                        </xsl:if>
                    </xsl:when>
                    <xsl:otherwise>
                    <!-- 当有多个节点时,向下取整 -->
                        <xsl:if test="position() = floor(last()*0.95)">
                            <xsl:value-of select="number(.)" />
                        </xsl:if>
                      </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

网上的模板前面数据都没有错,只是 QPS 这项最重要的算错了,我也看了你的【21.xsl】,QPS 的算法是错的,你把取样取数设置为 2,试试就知道了;QPS=当前样本的请求总数/(当前样本的第一个请求的结束时间 - 当前样本最后一个请求的结束时间 + 最后一个请求的响应时间),你截图中的全局 QPS 就是错的,你把取样数设置多一些,再试试看

grizz #35 · 2018年05月11日 Author
阿宽 回复

单个是没错的,总体的我就是把单个相加除以个数,所以得到 27.842/s,但是 jmeter 的值 6.7/s 差别真的有点大,肯定不是取的平均值吧,因为没有几个比 6.7/s 小的,我是按照自己的理解算的,你是怎么理解 jmeter 中 Throughout 这个值的

可以看下官方文档:http://jmeter.apache.org/usermanual/glossary.html#Throughput

另外我把我的理解说下:
Throughput = (number of requests) / (total time)
total time = 测试结束时间 - 测试开始时间
测试结束时间 = 最后一个请求的开始时间 + 最后一个请求响应时间 # 最后一个请求开始时间=max(当前样本的最大时间戳)
测试开始时间 = 第一个请求的开始时间 # 第一个请求开始时间=min(当前样本的最小时间戳)
也即 QPS=当前样本的请求总数/(当前样本最后一个请求的开始时间 + 最后一个请求的响应时间 - 当前样本的第一个请求的开始时间)
而你的 xsl 中,忽略了响应时间。
这个公式中,如果最后一个请求响应时间较短,则近乎等于按你的公式来算,影响较小;如果响应时间比较大,则和 jmeter 数据差距就比较大了。验证这个结果,你可以试试用公网 IP,这样响应时间就比较长了,试试是不是这样的。

这个公式适用于计算单个用例组和全局的 QPS。

大神,我有个问题,比如你 resource 目录下有 a,b,c 三个 jmeter 工程,你想过怎么控制哪个要执行哪个先执行?还有就是如果你在 jmeter 中使用 mysql 进行参数化,你的 jdbc 的 jar 路径是绝对路径,当你把 jmeter 和 jenkins 结合,这 jdbc 的路径就又需要修改。还有就是在 jenkins 中用命令行执行三个工程,内存消耗大。越来越觉得,jmter 不适合和 jenkins 整合

cooling 回复

1·resource 目录下有 a,b,c 三个 jmeter 工程,你想过怎么控制哪个要执行哪个先执行
由 Ant 所在目录 lib 子目录下 ant-jmeter-1.1.1.jar 的"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类控制

你也可以从 ant 的 运行日志中查看 a,b,c 的执行顺序,优先级应该是 a>b>c,想自己控制可以改 jar 包代码
2·在 jmeter 中使用 mysql 进行参数化,你的 jdbc 的 jar 路径是绝对路径
可以在你本机 jmeter 和 jenkins 使用的 jmeter 中分别将 jdbc 的 jar 包路径设置成全局变量在jmeter.properties中,取的话都用${mysqlJar}
如本机 jmeter 的jmeter.properties新增行mysqlJar=D:/benji/mysql.jar,jenkins 使用的 jmeter 的 jmeter.properties 新增行mysqlJar=D:/jenkins/mysql.jar
3·jenkins 中用命令行执行三个工程,内存消耗大
jmeter 的 PerfMon Metrics Collector 插件可以监控 jmeter 运行时本机的 CPU 内存等性能指标,内存消耗大可以考虑用 jenkins 远程运行 jmeter 脚本,别用搭建 jenkins 的机器运行

看了一下楼主的 git 目录,jmeter-results-detail-report_21.xsl 这个样式文件还是旧的呢,能不能给个新的参考一下,感谢

大神求回复,邮件自动发送后报错:ERROR: File './${mail_content}' does not exist
百思不得其解……

另外,下面这个代码怎么实现啊?放在哪里实现?

timestamp=date +%Y%m%d%H%M%S
pwd
rm -f ./.html
mkdir /jmeter/report/$timestamp
cp /jmeter/report/
.jtl /jmeter/report/$timestamp/
cp /jmeter/report/*.html /jmeter/report/$timestamp/

cp /jmeter/report/R*.html ./
rm -f /jmeter/report/latest/.jtl
rm -f /jmeter/report/latest/
.html
cp /jmeter/report/.jtl /jmeter/report/latest/
cd /jmeter/report/latest
mv -f *.jtl latest.jtl
rm -f /jmeter/report/
.jtl
mv -f /jmeter/report/*.html /jmeter/report/latest

grizz #28 · 2018年12月12日 Author
drppsy 回复

增加构建步骤中选择执行 shell
填入这段 shell 命令,可能要根据你的目录进行相应修改

grizz #27 · 2018年12月12日 Author
drppsy 回复

Editable Email Notification 中的配置

${FILE,path="./${mail_content}"}这段的作用是把 HTML 报告当成邮件正文发送,mail_content 就是 HTML 报告的文件名,我定义了全局变量所以能取到,你取不到的话应该是没有定义,所以报错找不到那个文件

大神,问下,加了插件,但是 Performance Trend 里没有曲线显示是怎么回事呢?

楼主,我想问下。jmeter 脚本有错误时,Jenkins 运行时不会进行提醒。需要查看测试报告才能发现错误。要怎么样才能比较直观的发现脚本运行错误呢

grizz #24 · 2019年02月14日 Author
Emulator 回复

运行成功了很多次都没有曲线显示吗

grizz 回复

是的,

控制台出现这样的,

是不是这里的配置不对

grizz #22 · 2019年02月19日 Author
Emulator 回复

Publish Performance test result report插件只有Source data files (autodetects format):需要配置,其他默认就好了
Jenkins 日志如下:

可能是你的 jtl 有问题,jenkins 插件解析不了 jtl,你可以尝试在 jmeter 里面打开 jtl 试试:

写的不错,收藏一下!

grizz 请教一个 Jenkins 发送邮件带附件的问题 中提及了此贴 04月22日 15:36

grizz,您好。请问【响应时间超过 3 秒的接口标黄显示】在哪份 xsl 文件和具体的位置呢?我从 git 上下载的文件,没有看到定制的效果。我想实现的效果是:平均响应时间超过 1s 的接口标黄显示;接口 Size in bytes 接口返回结果超过 10kb 标橙色显示。

grizz #17 · 2019年08月13日 Author
shenyuexiu 回复

我看下,没有我再传一下

老哥可以加你个微信吗?

grizz #15 · 2019年08月29日 Author
Jacksonluang 回复

有什么疑问吗

grizz 回复


这个怎么解决吗?

13楼 已删除
12楼 已删除
grizz #11 · 2019年09月02日 Author
Jacksonluang 回复

执行 shell 命令报错了,你可以先在本地执行一下,看可不可以通过,如果是 Windows 的话是要执行批处理命令的

10楼 已删除
Emulator 回复

你好,请问这个不展示性能趋势曲线的问题你是怎么解决的?

如何增加 tps 呢 目前报告中的 qps 和 jtl 中的 tps 不一致


在 jenkins 中浏览 html 测试报告,显示不全只显示到 Max Time 后面 就没有了,并且详情按钮图片显示不出来,实际是存在图片的在 html 存放目录,右击查看元素,可以在新的标签正常打开图片,请帮忙看看

大海 学习笔记:Jmeter+ant+Jenkins 持续集成平台 (下) 中提及了此贴 03月27日 17:27
大海 专栏文章:学习笔记:Jmeter+ant+Jenkins 持续集成平台 (下) 中提及了此贴 04月24日 14:08

麻烦大神说下 ${FILE,path="./${mail_content}"} 中 mail_content 的全局变量在哪里定义的?我写的是绝对路径 也是报文件不存在。可点击 url 后是可以打开文件的。 我写的:

哈哈哈 ${FILE ,path="http://ip:/result/html/ShangHuTongTestReport.html"端口号}
我是测试报告指定输出到 tomcat 下了。我写错了吗?
grizz 回复

mail_content 这个全局变量应该怎么加啊?

ant 编译后出现的 report.html 看不到 requestbody 和 responsebody,这个怎么解决

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册