0. 环境准备

安装如下工具:
1、Jmeter:编写测试脚本,相关的安装、配置、编写可以参考:​​​快速掌握jmeter的基本操作和使⽤​

2、ant:执行测试脚本,并生成测试报告,相关的安装以及build.xml的编写语法可以参考:​​Apache-ant 工具的介绍、安装及build.xml文件的解析​

3、Jenkins:持续集成平台可以实现脚本的定时运行、邮件发送、测试报告展示等

1. ANT-执行测试脚本并生成测试报告

测试脚本运行后生成的是JTL(xml)格式的文件,这些文件不具备可读性,因此我们要把他转化为可以阅读的html格式报告。

转化步骤如下:

下载ant安装包并将jmeter所在extras目录下的ant-jmeter-1.1.1.jar文件copy到ant所在的lib目录下

Jmeter配置文件修改

1)修改原因:
a) jmeter执行结果文件默认保存的不是xml格式,无法转化成html格式
b) jmeter执行结果文件默认有很多执行数据是不保存的,而测试报告需要这些数据

2)配置路径:
${jmeterhome}/bin/jmeter.profile

3) 修改内容:
a) 修改jtl文件格式:

jmeter.save.saveservice.output_format=xml (去掉注释(#),修改csv 为 xml)

b) 添加jtl文件结果参数如下:

#
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=false
# 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
# Only available with HttpClient4
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=false
jmeter.save.saveservice.responseHeaders=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.encoding=false
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=false
jmeter.save.saveservice.hostname=false
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=false
jmeter.save.saveservice.idle_time=true

编写ant的build.xml文件

<?xml version="1.0" encoding="utf-8"?>  
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<!-- 可以自定义日期格式 -->
<format property="time" pattern="yyyyMMddhhmm"/>
</tstamp>
<!-- 配置jmeter目录 -->
<property name="jmeter.home" value="/Users/leiyuxing/apache-jmeter-5.0"/>
<!-- jmeter生成jtl格式的结果报告的路径 -->
<property name="jmeter.result.jtl.dir" value="/Users/leiyuxing/apache-jmeter-5.0/AntReport"/>
<!-- jmeter生成html格式的结果报告的路径 -->
<property name="jmeter.result.html.dir" value="/Users/leiyuxing/apache-jmeter-5.0/AntReport"/>
<!-- 生成报告的前缀 -->
<property name="ReportName" value="TestReport"/>
<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="init"/> <!-- 调用其他的目标 -->
<antcall target="testOneLogin"/>
<antcall target="test2NumByTypeAndSample"/>
<antcall target="logout"/>
<antcall target="report"/>
</target>

<!-- 定义一个目标,任务名称为ini——将需要的外部文件删除将需要的外部文件删除 -->
<target name="init">
<!-- 每次运行前删除之前产生的报告文件 -->
<delete >
<fileset dir="/Users/leiyuxing/apache-jmeter-5.0/AntReport" includes="*.doc,*.html,*.jtl,*.xls"/>
</delete>
</target>


<target name="testOneLogin">
<!-- 定义一个任务,任务名称为jmeterA -->
<taskdef name="jmeterA" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<jmeterA jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本 -->
<testplans dir="/Users/leiyuxing/apache-jmeter-5.0/AntReport" includes="一次登录-suadmin.jmx"/>
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeterA>
</target>


<target name="test2NumByTypeAndSample">
<delete file="/Users/leiyuxing/apache-jmeter-5.0/AntReport/submitInfo.txt"/>
<!-- 定义一个任务,任务名称为jmeterA -->
<taskdef name="jmeterA" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<jmeterA jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 测试脚本 -->
<testplans dir="/Users/leiyuxing/apache-jmeter-5.0/AntReport" includes="CoinCola_3.4.5Test.jmx"/>
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeterA>
</target>

<target name="logout">
<!-- 定义一个任务,任务名称为jmeterA -->
<taskdef name="jmeterA" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<jmeterA jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本 -->
<testplans dir="/Users/leiyuxing/apache-jmeter-5.0/AntReport/" includes="CoinCola_3.4.5Test.jmx"/>
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeterA>
</target>


<!-- 自定义的path路径,该路径下包含下面匹配的jar包,下面会用到 -->
<path id="xsltA.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar,serializer*.jar"/>
</path>
<target name="report">
<!-- 这里用到了上面定义的path路径 -->
<xslt classpathref="xsltA.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="deateReport" expression="${time}"/> <!-- 有没有这句没有什么影响 -->
</xslt>

<!-- 复制两个图片过来,已经有的就可以不用复制了 -->
<!--
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png"/>
<include name="expand.png"/>
</fileset>
</copy>
-->
</target>
</project>

注:我目前只放了一个测试用例,当然可以放多个文件,在build.xml中添加指定的任务代码即可。

cmd下运行ant命令,生成html文件

$ ant

Buildfile: /Users/leiyuxing/apache-jmeter-5.0/extras/build.xml

run:

init:

testOneLogin:

test2NumByTypeAndSample:
[jmeterA] Executing test plan: /Users/leiyuxing/apache-jmeter-5.0/AntReport/CoinCola_3.4.5Test.jmx ==> /Users/leiyuxing/apache-jmeter-5.0/AntReport/TestReport201811301031.jtl
[jmeterA] Creating summariser <summary>
[jmeterA] Created the tree successfully using /Users/leiyuxing/apache-jmeter-5.0/AntReport/CoinCola_3.4.5Test.jmx
[jmeterA] Starting the test @ Fri Nov 30 10:31:48 CST 2018 (1543545108243)
[jmeterA] Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
[jmeterA] summary = 6 in 00:00:02 = 3.9/s Avg: 176 Min: 0 Max: 685 Err: 1 (16.67%)
[jmeterA] Tidying up ... @ Fri Nov 30 10:31:50 CST 2018 (1543545110071)
[jmeterA] ... end of run

logout:
[jmeterA] Executing test plan: /Users/leiyuxing/apache-jmeter-5.0/AntReport/CoinCola_3.4.5Test.jmx ==> /Users/leiyuxing/apache-jmeter-5.0/AntReport/TestReport201811301031.jtl
[jmeterA] Creating summariser <summary>
[jmeterA] Created the tree successfully using /Users/leiyuxing/apache-jmeter-5.0/AntReport/CoinCola_3.4.5Test.jmx
[jmeterA] Starting the test @ Fri Nov 30 10:31:52 CST 2018 (1543545112819)
[jmeterA] Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
[jmeterA] summary = 6 in 00:00:02 = 3.4/s Avg: 214 Min: 1 Max: 659 Err: 1 (16.67%)
[jmeterA] Tidying up ... @ Fri Nov 30 10:31:54 CST 2018 (1543545114883)
[jmeterA] ... end of run

report:
[xslt] Processing /Users/leiyuxing/apache-jmeter-5.0/AntReport/TestReport201811301031.jtl to /Users/leiyuxing/apache-jmeter-5.0/AntReport/TestReport201811301031.html
[xslt] Loading stylesheet /Users/leiyuxing/apache-jmeter-5.0/extras/jmeter-results-detail-report_21.xsl

BUILD SUCCESSFUL
Total time: 10 seconds

最终你会发现此时你的目标文件夹中会多两个文件:

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml

其中:TestReport201811301031.jtl文件可以通过jmeter打开查看结果报告

 

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_html_02


而/TestReport201811301031.html文件则支持直接打开,可以通过邮件形式发送给他人

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_html_03

 

2. Jenkins - 持续集成平台

注:部署到持续集成平台可以实现脚本的定时运行,这是接口、性能测试的核心。

具体步骤如下:

新建一个job

 

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml_04

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_html_05


jenkin相关插件介绍与配置

提前下载好插件

系统管理-管理插件-可选插件
下载所需要的插件,例如:Performance plugin、HTML Publisher plugin、 Ant Plugin等

1)配置中添加Jmeter插件:Performance plugin、HTML Publisher plugin

功能:用来展示jmeter执行结果

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_apache_06

 

 

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml_07

Report file:配置jtl文件路径,相对路径与绝对路径均可

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml_08

HTML directory to archive:生成的html文件路径

注:修改build.xml文件生成jtl和html文件的目录到jenkins的工作目录下!!!

查看Jekins 工作目录:系统管理-系统设置 - 高级

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml_09

 

修改如下

<!-- jmeter生成jtl格式的结果报告的路径 -->
<property name="jmeter.result.jtl.dir" value="/Users/leiyuxing/apache-jmeter-5.0/AntReport"/>
<!-- jmeter生成html格式的结果报告的路径 -->
<property name="jmeter.result.html.dir" value="/Users/leiyuxing/apache-jmeter-5.0/AntReport"/>

2)配置中添加Ant插件:Ant Plugin

功能:用来执行Ant,以下路径全改为你电脑build.xml文件所在路径

 

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml_10

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_xml_11

Build File:build.xml文件路径
后面可根据所需配置邮件、定时任务等

3)构建脚本

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_apache_12

 

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_html_13

4)查看报告

利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台_apache_14