Jmeter是压力测试、接口测试工具,Ant是基于Java的构建工具,具有跨平台的作用,jenkins是持续集成工具。将这三者结合起来可以搭建一套webservice接口测试的持续构建环境。
优势
通过Ant构建可以看到详细的执行结果,相比jmeter看结果直观一点,而且可以看到测试结果统计,可以做记录留备份,而单独使用jmeter只能去手动触发,而且记录不会保存,再次执行就找不到记录。通过预留备份还可以对比优化效率。最大的好处是可以异步去执行,如果通过jenkins集成,我们可以通过部署代码的时候去自动测试,自动生出测试结果。也可以通过写定时脚本,定时的去执行,比较适用于线上项目,可以定时到凌晨自动执行,早晨上班只需要看结果,去分析就可以了,也不需要测试人员专门去等。
目录
创建脚本:(可以使用jmeter录制一个脚本,需要jmx脚本文件)
安装工具以及环境配置
安装JDK
需要配置java环境变量,这里用的是 jdk1.8
window 10 安装教程:https://blog.csdn.net/qq_37138756/article/details/100511976
安装Jmeter
这里Jmeter用到的版本是 :jmeter4.0
链接:https://pan.baidu.com/s/1mDouaMBYvkW2NOCSWUfQVQ
提取码:ftyk
安装 ANT
这是ANT使用的版本: apache-ant-1.10.3
1 下载安装
下载地址 http://ant.apache.org/bindownload.cgi,下载后解压到指定位置即可,
比如:D:\apache-ant-1.10.3
2 配置环境变量(window中)
新增 ANT_HOME 变量添加:D:\apache-ant-1.10.3
Path 变量中添加:%ANT_HOME%\bin
classpath 变量中添加: %ANT_HOME%\bin
注意:变量之间用 ; 分割
3 安装验证
验证安装结果,命令行输入ant -v ,出现版本信息则安装成功
注意:环境配置中如果设置成:path:%ANT_HOME%\bin (为了方便在dos环境下操作),结果环境配置不成功,需要把地址换成为 D:\apache-ant-1.10.3\bin
Jmeter
创建脚本:(可以使用jmeter录制一个脚本,需要jmx脚本文件)
1 启动jmeter:通过jmeter安装目录,进入到bin目录,通过jmeter.bat(win端)启动jmeter
如果下载的是英文版的,通过以下操作设置成中文简体
2 创建一个线程组:设置10个线程,2秒时间执行完成,执行10次
3 设置一个http请求:
4 设置请求头信息:Content-Type:application/json
5 保存脚本到jmeter目录:Ctrl+s (我在jmeter目录下创建了一个文件名称为压力测试的文件夹,用来保存脚本)
Jmeter + ANT
ANT中配置Jmeter
1 将jmeter extras目录下的ant-jmeter-1.1.1.jar 文件拷贝到ant安装目录下的lib文件夹中
2 配置ANT与Jmeter的配置文件
2.1 配置ant 编译文件 build.xml
在保存脚本的目录下,拷贝下面的内容到新建的.txt文件中,并将此文件改名为: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="D:\jmeter\apache-jmeter-4.0\apache-jmeter-4.0" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\jmeter\apache-jmeter-4.0\apache-jmeter-4.0\ResultReport\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\jmeter\apache-jmeter-4.0\apache-jmeter-4.0\ResultReport\html" />
<!-- 生成的报告的前缀-->
<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}.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="D:\jmeter\apache-jmeter-4.0\apache-jmeter-4.0\backups" 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" />
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
2.2 按实际情况修改build.xml文件,如下:
如果bulid文件有问题,这是我使用的文件,目录替换掉就行了:
链接:https://pan.baidu.com/s/1wPr04eunQcTvHoR5njyieQ
提取码:lrnf
注意:
1 生成报告路径,ResultReport可以不用创建,如果创建了必须保证文件夹中为空
2 建议路径地址最好不要使用中文,避免使用的时候出现问题
3 如果避免文件覆盖,需要保留测试报告,可以修改文件成以下示例
2.3 配置jmeter.properties
配置jmeter报告输出格式为xml
在jmeter安装目录bin目录下jmeter.properties文件中修改jmeter.save.saveservice.output_format=csv 为
jmeter.save.saveservice.output_format=xml,并去掉前面的注释符号#
注意:编码格式 utf-8
验证配置,执行构建测试
1 进入到脚本保存目录
2 在地址栏输入cmd进入命令行,输入ant run ,执行测试
看到build successful 则说明构建测试成功:
3 进入保存报告的路径下查看测试结果报告:
按build.xml文件中设置的测试报告地址找到html版测试报告,在build.xml我们设置的路径是:ResultReport目录
打开看看:测试结果展现了用例数、成功率、用例执行时间等结果参数:
测试报告优化:更换模板
用jmeter自带的测试报告得到的测试报告信息并不是很全,这里参考网上的方法,做一个优化
1 下载优化模板 jmeter.results.shanhe.me.xsl,拷贝到jmeter的extras目录中,
如C:\apache-jmeter-2.12\extras
百度云下载地址:https://pan.baidu.com/s/1TPZFEJdtgAohDLZFg4TsiQ 密码:zwp3
CSDN 下载:https://download.csdn.net/download/qq_37138756/10493615
2 设置测试输出报告要输出的内容
同样在jmeter.properties中,设置需要输出的内容为true,并去掉前面的注释符号#,这里全部设置成true
3 设置build文件的报告模板为优化后的模板:jmeter.results.shanhe.me.xsl
4 按步骤6的方式再次用ant构建测试,查看优化后的测试报告
(注意: ResultReport 文件是生成报告文件夹。每次启动命令之前,为了避免模板信息,数据信息错误,文件夹内容必须清空)
Jmeter + ANT + Jenkins
以下示例是我在另一台电脑完成,服务路径稍有不同,请自行替换目录
Jenkins 安装
请参考我另一篇文章,来安装Jenkins和配置
Jenkins 安装与配置:https://blog.csdn.net/qq_37138756/article/details/103559827
Jenkins 配置环境变量
jmeter + ant + jenkins集成需要以下配置:
插件安装(已安装请忽略):
运行ant需要插件:Ant Plugin、Ant In Workspace
HTML测试报告展示的插件:HTML Publisher Plugin、Performance plugin
HTML Publisher Plugin下载(为了方便在jenkins中查看html测试报告):
Performance plugin下载(根据测试工具获取性能KPIs):
环境配置:
需要配置jdk,ant环境,配置完成后点"Save"
Jenkins创建项目(自动测试配置)
1 新建项目:
输入项目名称,选择"Freestyle project"项目,点击"OK"
2 设置丢弃旧的构建
Jenkins在每一次的执行构建后,都会对该构建的项目生成一个历史构建记录,测试的项目越来越多,长期的构建,历史版本同样也越来越多。每编译执行一次,就会生成一个构建记录,预留的磁盘越来越满,有可能面临崩溃的风险。
3 构建触发器
可以通过设置去指定什么时候去触发,也可以不设置,通过手动构建触发
Build periodically:Jenkins采用了著名的UNIX任务调度工具CRON所使用的配置方式。
用5个字段代表5个不同的时间单位(中间用空格隔开):分 时 日 月 星期几
例如:
Schedule :
0 * * * * 代表每小时0分的时候构建1次项目
*/10 * * * * 每隔10分钟一次
45 10 * * 1-5 每星期的星期一到星期五的10:45分执行
"0 15 10 * * ? 2019" 2019年的每天上午10:15触发
4 配置构建
注意:
构建需要指定构建项目,如果不指定项目,默认执行的是Jenkins中workspace下的脚本,如果workspace下没有脚本则构建会报错
5 设置构建后操作
设置HTML Publisher 配置信息,方便在jenkins中查看html测试报告
参数说明:
HTML directory to archive: 存放html报告的路径
Index page[s]: 因为我这边在build.xml文件中设置的生成报告名称是时间戳格式的,所以我这边设置了*.html,为了在jenkins中打开html报告
Report title: 默认,不可更改
设置Performance plugin配置信息,方便在jenkins中查看测试性能
测试集成
构建任务
点击任务进去以后,可以看到运行日志,当看到success字样的时候表示构建成功
查看html报告
可以点击进去看测试报告
查看新能KPIs
可以看到每次测试的性能报告
常见问题汇总(不定期更新)
根据网友真实遇到问题,进行整合
错误 1:前言中不允许有内容
在执行ant run的时候,构建出现前言中不允许有内容错误
排查问题:
1.1 保证build.xml和执行脚本在同一个目录下
1.2 保证 jmeter安装目录bin目录下jmeter.properties文件中修改jmeter.save.saveservice.output_format=csv 为jmeter.save.saveservice.output_format=xml,并去掉前面的注释符号#
1.3 编码,编码,编码,一定要注意编码问题(好几个网友碰到了编码问题),务必为UTF-8,可以使用Notepad++来查看下编码,一定要保证在Notepad中页面右下角,编码为以下图所示
问题 2: Unexpected text "? ?"
在执行ant run的时候,构建出现build.xml:X: Unexpected text "? ?" 错误
排查问题:
2.1 确定文件编码,务必为UTF-8,可以使用Notepad++来查看下编码,一定要保证在Notepad中页面右下角,编码为以下图所示
2.2 通过Notepad排查文档中特殊字符,保证文档中全部文字,包括空格都是utf-8格式
问题 3:构建完成查看测试报告,样式展示错误
原因: 样式加载错误
解决:在项目启动的时候添加执行脚本,来保证样式加载
3.1 下载 Startup Trigger 和 Groovy plugin插件
- Startup Trigger: 可实现在Jenkins节点(master/slave)启动时触发构建;
- Groovy plugin: 可实现直接执行Groovy代码。
3.2 在项目配置中添加启动执行脚本
- 在Build Triggers模块下,勾选Build when job nodes start;
- 在Build模块下,Add build step->Execute system Groovy script,在Groovy Script中输入配置命令
-
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
3.3 配置完成后,点击保存,重新构建即可解决问题