Ant+jmeter 实现自动化性能测试

时间:2022-10-15 09:03:44
   一、前言
 性能测试首选的工具是 JMeter,在此不多做介绍,但是不得不说JMeter也是一款非常好的接口测试工具。性能测试过程中手工重复的活动非常多,为了给客户提供一个性能测试报告,我用了一周时间进行并发测试、数据整理、数据分析、最后生成测试报告,真的是手工重复到怀疑人生;于是萌生了实现性能测试自动化的想法。之前用Robot framework框架做过WEB自动化、安卓端自动化、接口自动化,但是始终未正真明白自动化的意义或是价值,现在突然顿悟,测试工作中最大的痛点就是重复,减少工作中的痛点才是自动化最大的价值。所以自动化的第一步不是选用什么语言或是框架,而是能真正分析出自己工作中的痛点。
二、框架介绍
  JMeter+Ant是比较常见的 自动化测试框架,因为JMeter、Ant都是由 java开发的,所以此性能测试框架具有良好的跨平台性;下图是按自己的理解绘制的自动化框架图:
Ant+jmeter 实现自动化性能测试
  大体逻辑如下:
  (1)Ant通过XML文件进行构建,所有的构建信息配置在build.xml文件中,通过调用target树来执行各种任务;如执行测试脚本(jmx文件),输出测试结果(jtl文件);
  (2)Ant通过测试结果(jtl文件)构建生成html测试报告,输出在制定路径下;
  (3)根据build.xml文件中配置的邮件信息,将html测试报告自动发送到制定的邮箱;
三、环境搭建
   Java安装
  1、Java下载地址:https://www.java.com/zh_CN/
  2、Java 环境变量配置
  (1)设置路径:我的电脑->属性->高级->环境变量;
  (2)在【系统变量】新增JAVA_HOME,变量为JDK的路径;
    Ant+jmeter 实现自动化性能测试
  (3)在【系统变量】新增CLASSPATH,变量为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
    Ant+jmeter 实现自动化性能测试
  (3)PATH中添加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
    Ant+jmeter 实现自动化性能测试
  3、检验是否配置成功
  (1)cmd进入命令行,输入:java -version,显示出java 的版本信息即配置成功;
    Ant+jmeter 实现自动化性能测试
   JMeter安装
  1、JMeter下载地址:http://jmeter.apache.org/download_jmeter.cgi
  2、JMeter 环境变量配置
  (1)设置路径:我的电脑->属性->高级->环境变量:
  (2)在【系统变量】新增JMETER_HOME,变量为jmeter的路径
     Ant+jmeter 实现自动化性能测试

 

  (3)PATH中添加 %JMETER_HOME%\bin;
    Ant+jmeter 实现自动化性能测试

 

  3、检验是否配置成功
  (1)cmd进入命令行,输入:jmeter -v,显示出JMETER的版本信息即配置成功;
    Ant+jmeter 实现自动化性能测试
   Ant安装
  1、Ant下载地址:http://ant.apache.org/bindownload.cgi
  2、Ant 环境变量配置
  (1) 设置路径:我的电脑->属性->高级->环境变量:
  (2)在【系统变量】新增ANT_HOME,变量为ANT的路径
    Ant+jmeter 实现自动化性能测试
  (3)PATH中添加%ANT_HOME%\bin;
    Ant+jmeter 实现自动化性能测试
  3、检验是否配置成功
  (1)cmd进入命令行输入:ant -version,显示出Ant的版本信息即配置成功;
     Ant+jmeter 实现自动化性能测试
  四、构建步骤
   1、测试准备  
  (1)JMeter脚本按测试计划选中进行保存,如果按线程进行保存,构建时会报错,后面问题汇总模块会提到,例如保存为TestPlan.jmx。
  (2)新增构建文件的文件夹,分别存放测试脚本testcase目录和存放报告的report目录,其中report目录中再创建运行结果jtl目录和展示的html目录
     Ant+jmeter 实现自动化性能测试
  (3)修改配置文件:jmeter.properties:
      文件路径:%JMETER_HOME%\bin\jmeter.properties
           将jmeter.save.saveservice.output_format=csv改为jmeter.save.saveservice.output_format=xml,去掉前面备注的#号。

  2.Ant构建

  (1) 找到JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar这个文件,将其复制到Ant所在目录lib子目录之下。

     Ant+jmeter 实现自动化性能测试

    (2)编辑build.xml(重点)

      新建一个xml文件,里面内容为:  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project name="ant-jmeter-test" default="run" basedir=".">
 3     <tstamp>
 4         <format property="time" pattern="yyyyMMddhhmm" />
 5     </tstamp>
 6     <!-- 需要改成自己本地的 Jmeter 目录-->  
 7     <property name="jmeter.home" value="C:\Users\payegis\Downloads\apache-jmeter-5.0" />
 8     <property name="report.title" value="性能测试"/>
 9     <!-- jmeter生成jtl格式的结果报告的路径--> 
10     <property name="jmeter.result.jtl.dir" value="C:\Users\payegis\Downloads\apache-jmeter-5.0\report\jtl" />
11     <!-- jmeter生成html格式的结果报告的路径-->
12     <property name="jmeter.result.html.dir" value="C:\Users\payegis\Downloads\apache-jmeter-5.0\report\html" />
13     <!-- 生成的报告的前缀-->  
14     <property name="ReportName" value="TestReport" />
15     <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
16     <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
17 
18     <target name="run">
19         <antcall target="test" />
20         <antcall target="report" />
21     </target>
22     
23     <target name="test">
24         <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
25         <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
26             <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
27             <testplans dir="C:\Users\payegis\Downloads\apache-jmeter-5.0\testcase" includes="*.jmx" />
28             
29             <property name="jmeter.save.saveservice.output_format" value="xml"/>
30         </jmeter>
31     </target>
32         
33     <path id="xslt.classpath">
34         <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
35         <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
36     </path>
37 
38 
39     <target name="report">
40         <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
41         <xslt 
42               classpathref="xslt.classpath"
43               force="true"
44               in="${jmeter.result.jtlName}"
45               out="${jmeter.result.htmlName}"
46               style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
47               <param name="dateReport" expression="${report.datestamp}"/>
48        </xslt>
49 
50                 <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
51         <copy todir="${jmeter.result.html.dir}">
52             <fileset dir="${jmeter.home}/extras">
53                 <include name="collapse.png" />
54                 <include name="expand.png" />
55             </fileset>
56         </copy>
57     </target>
58 
59 </project>

        根据注释中的内容修改,基本格式没有问题,运行根据报错查找相关错误,在保存的时候记得保存utf-8编码的格式。将这个build.xml文件放在ant的bin目录下。

     (3)build.xml中构建活动定义完成后,cmd进入命令行,进入build.xml的目录下输入ant,回车执行,如下图提示BUILD SUCCESSFUL即可成功。

      Ant+jmeter 实现自动化性能测试

  (3)本地目录下C:\Users\payegis\Downloads\apache-jmeter-5.0\report\htmlL,可查看到测试报告,如下截图:
     Ant+jmeter 实现自动化性能测试