JMeter+Ant实现接口测试自动化

一、环境搭建

Java的的安装并配置环境变量;

JMeter的的的安装并配置环境变量;

蚂蚁安装并配置环境变量;

检验是否配置成功:

cmd进入命令行,输入:java -version

cmd进入命令行,输入:jmeter -v

cmd进入命令行输入:ant -version

二、构建步骤

1,测试准备
  (1)的的JMeter的脚本按测试计划选中进行保存,如果按线程进行保存,构建时会报错,后面问题汇总模块会提到,例如保存为TestPlan.jmx。
  (2)新增构建文件的文件夹,例如在d盘根目录下新增文件夹“JMeterTest”,里面再新增以下文件夹
  (3)修改配置文件:jmeter.properties
  文件路径:%JMETER_HOME%\ BIN \ jmeter.properties
  将jmeter.save.saveservice.output_format = CSV改为jmeter.save.saveservice.output_format = XML,去掉前面备注的#号。
   2,蚂蚁构建
  构建文件的默认地址为%JMETER_HOME%\演员\ build.xml文件,但是为了构建方便,我们将XML文件放在我们自己目录下,并且根据自己的需要自定义构建内容。
  (1)在新增目录d:\ JMeterTest \ XML下新增的build.xml,蚂蚁来定义测试活动,具体的内容都在的build.xml中进行配置。
  (2)build.xml中构建活动定义完成后,cmd进入命令行,进入build.xml的目录下输入ant,回车执行,如下图提示BUILD SUCCESSFUL即可成功。
  (3)本地目录下D:\ JMeterTest \ HTML,可查看到测试报告;查收邮件,附件也收到了HTML测试报告,如下截图:
  (4)本地目录下D:\ JMeterTest \ JTL,可看的生成的测试结果文件,可用Jmeter聚合报告的预览进行查看,见截图:
  截止目前,我们已经基本实现了接口测试自动化,如果要实现性能测试自动化,还要对生成测试报告模板的代码进行优化。

三,报告优化

1,报告增加性能指标
  的JMeter的性能测试中,我们主要会关注聚合报告中平均时间,吞吐量,90%线等指标,因此我们在测试报告中增加TPS(吞吐量)和90%的线等指标,
  (1)在build.xml的代码中可以看出测试报告调用的模板是%JMETER_HOME%\ extras路径下的jmeter-results-detail-report_21文件,
  (2)因此我们在JMeter的 - 结果的细节report_21文件中进行修改,小编自己修改了很久,但是TPS得值总是不显示,最后参考了其他博客文章得以解决。
  (3)由于该模板的代码非常多,优化后的模板代码可以在我的CSDN上进行下载;下载地址:HTTP://download.csdn.net/download/okkczf/10233753
   2,加接口详情的报告
  该报告的原始模板也可以在网上进行下载,下载地址:HTTP://blog.csdn.net/luozhuwang/article/details/51889159(感谢作者的分享)
  (1)将该模板jmeter.results.detail.me.xls放在%JMETER_HOME%\ extras路径下;
  (2)要想调用该模板输出测试报告需要在的的的build.xml文件中增加以下代码,我用reportdetail定义该测试活动;
  (3)CMD进入命令行,进入的的build.xml中的目录下输入蚂蚁,回车执行后,邮件即可收到两个HTML附件,第一个附件为测试报告,第二个附件即为增加的接口测试详情;
  接口测试详情如下截图:
   3,代码展示
  以下是的的build.xml文件构建代码:

 <?xml version =“1.0”encoding =“utf8”?>
<project name =“TestPlan”default =“all”basedir =“。”>
<tstamp>
<format property =“time”pattern =“yyyyMMddhhmm”/>
</ tstamp>
<! - 需要改变自己本地的Jmeter目录 - >
<property name =“jmeter.home”value =“Jmeter目录”/>
<! - jmeter生成jtl格式的结果报告的路径 - - >
< property name =“jmeter.result.jtl.dir”value =“D:\ JMeterTest \ JTL”/>
<! - jmeter生成html格式的结果报告的路径 - >
<property name =“jmeter。result.html.dir “value =”D:\ JMeterTest \ HTML“/>
<! - 生成的报告的前缀 - >
<property name =”ReportName“value =”TestReport“/>
<property name =”jmeter.result.jtlName“value = “$ {jm​​ eter.result.jtl。dir} / $ {ReportName}
$ {time} .jtl“/>
<property name =“jmeter.result.htmlName”value =“$ {jm​​ eter.result.html.dir}
/ $ {ReportName} $ {time} .html”/>
<property name =“jmeter.resultdetail。 htmlName“value =”$ {jm​​ eter.result.html.dir}
/Interface-detail.html“/>
<target name =”all“>
<antcall target =”test“/>
<antcall target =”report “/>
<antcall target =”reportdetail“/>
<antcall target =”sendmail“/>
</ target>
<target name =”test“>
<taskdef name =”jmeter“classname =”
org.programmerplanet.ant.taskdefs .jmeter.JMeterTask“/>
<jmeter jmeterhome =”$ {jm​​ eter.home}“resultlog =”$ jmeter.result.jtlName}“>
<! - 声明要运行的脚本。“*。jmx”指包含此目录下的所有jmeter脚本 - >
<testplans dir =“D:\ JMeterTest \ JMX”包括=“*。jmx”/>
<property name =“jmeter.save.saveservice.output_format”value =“xml”/>
</ jmeter>
</ target>
< path id =“xslt.classpath”>
<fileset dir =“$ {jm​​ eter.home} / lib”includes =“xalan * .jar”/>
<fileset dir =“$ {jm​​ eter.home} / lib“includes =”serializer * .jar“/>
</ path>
<target name =”report“>
<xslt
classpathref =”xslt.classpath“
force =”true“
in =”$ {jm​​ eter.result .jtlName}“
out =”$ {jm​​ eter.result.htmlName}“
style =”$ {jm​​ eter.home} / extras / jmeter-results-detail-report_21.xsl“>
<param name =” dateReport“表达式=”$ {time}“/>
</ xslt>
<! - 因为上面生成报告时,不会将相关的图片也一起拷贝至目标目录,需要手动拷贝 - >
<copy todir =“$ {jm​​ eter.result.html.dir}”>
<fileset dir =“$ {jm​​ eter.home} / extras”>
<include name =“collapse.png”/>
<include name =“expand.png”/>
</ fileset>
</ copy>
</ target>
< target name =“reportdetail”>
<xslt
in =“$ {jm​​ eter .result.jtlName}”
out =“$ {jm​​ eter.resultdetail.htmlName}”
style =“$ {jm​​ eter.home } /extras/jmeter.results.detail.me.xsl“/>
</ target>
<! - 发送邮件 - >
<target name =”sendmail“>
<mail mailhost =”mail.star-net。cn“
user =”*** @ ***。com“
password =”***“
subject =”接口测试报告“
from =”*** @ ***。com“>
<to address =“*** @ ***。com”/>
<message>详细报告请查看附件,请用浏览器打开查看!</ message>
<attachments>
<fileset dir =“$ {jm eter.result.html.dir}“>
<include name =”$ {ReportName} $ {time} html的“/>
</ fileset>
<fileset dir =”$ {jm​​ eter.result.html.dir} “>
<include name =”Interface-detail.html“/>
</ fileset>
</ attachments>
</ mail>
</ target>
</ project>

  四,遇到问题

  本文为JMeter的的的+蚂蚁实现性能测试自动化过程所有遇到的问题的整理汇总
  (1)蚂蚁构建遇到问题:1字节的UTF-8序列的字节1无效;
   解决方法: build.xml中UTF-8改为UTF8;
  (2)蚂蚁构建遇到问题:运行蚂蚁报错找不到测试计划中类!
   解决办法:  运行的JMeter用户的脚本TestPlan.jmx要测试计划层做保存,而不是在线程层做保存。
  (3)蚂蚁构建时遇到如下报错:
   解决办法: 下载mail-1.4.7.jar,放在D:\ apache-ant-1.9.9 \ lib目录下
  (4)生成报告存在的问题:
  生成的报告中最短时间和最长时间的时间显示为NaN的时,日期报告:日期未定义,如下截图:
   解决办法:
  (1)将Apache的JMeter的-3.2 \ lib中中的串行 - 2.7.2.jar,Xalan-2.7.2.jar复制到Apache的蚂蚁1.9.9 \ lib中中即可解决问题(1) );
  (2)的的的build.xml代码中增加以下内容
  注意:变量$ {time}在代码中的定义,如果两处名称不一致则构建失败;
<TSTAMP>
<format property =“time”pattern =“yyyyMMddhhmm”/>
</ TSTAMP>
  截止目前,的JMeter +蚂蚁的性能自动化框架已经搭建完成,如果需要你也可以使用詹金斯集成,本文中暂不介绍詹金斯的配置。