其实此类文档网上有很多,随手百度就是一堆,但别人的不代表就是自己的,所以还是想按实际项目自己再整理一遍属于自己的文档
1.环境准备
1.1Ubuntu 环境配置
1.1.1 服务器配置java环境
jmeter以及ant依赖于java环境,所以需要在运行的服务器搭建java运行环境
1.1.2 jmeter安装与配置
(1)选择安装目录执行下载解压缩即可:wget http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.0.zip
(2)配置环境变量(可选):export PATH=/opt/apache-jmeter-XX/bin/:$PATH export JMETER="/opt/apache-jmeter-XX
(3)环境变量配置后,任意目录下执行 jmeter -v 查看是否配置成功
1.1.3 ant环境配置
(1)安装ant: apt-get install ant
(2)执行 ant -version查看是否安装成功
1.2windows环境配置
1.2.1JDK安装与配置(基本技能)
1.2.2ANT:Apache-ant-XXX
(1)下载后添加环境变量如:ANT_HOME:D:\Progrom Files\apache-ant-1.9.7
(2)系统path添加: %ANT_HOME%\bin
1.2.3Jmeter:下载最新的Binaries版
(1)官网下载后直接解压缩即可使用( Source 是源代码版需手动编译,Binaries是可执行版,解压即可用)
(2)新建系统变量在变量名中输入:JMETER_HOME,内容配置如:D:\Progrom Files\apache-jmeter-5.01
(3)在环境变量Path中添加%JMETER_HOME%\bin
(4)按需插件下载,解压缩后将插件ext文件下的内容拷贝到\apache-jmeter-3.0\lib\ext:https://jmeter-plugins.org/downloads/old/
1.3配置jar包
1.3.1 ant运行jmeter依赖的jar包 复制jmeter的ant jar包到ant目录:cp $JMETER_HOME/extras/ant-jmeter-1.x.x.jar $ANT_HOME/lib/
其实很多人不知道为啥要这么做,似乎是别人都这么说了也就这么做了,其实自己试一下就知道了,如果不复制会报错找不到build中的task
BUILD FAILED
/opt/apache-jmeter-5.0/extras/api_test/database_test/build.xml:96: taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found
using the classloader AntClassLoader[]
1.3.2ant邮件发送依赖的jar包:下载javax.mail-1.X.X.jar到ant/lib/下
1.3.3数据库连接依赖jar包:下载mysql-connector-java-5.1.47-bin.jar 放到jmeter的lib下
2.jmeter配置
2.1jmeter build.xml 配置
其实很多人到这里头就大了,不知道这个文件里面乱七八糟的到底是什么东西,其实很简单,我在这里贴上我实际使用的文件,做了一些备注信息,也许便于理解吧
<?xml version="1.0" encoding="utf-8" ?>
<!--
Licensed to 巴拉巴拉Apache的一大堆说明直接忽略
-->
<project name="ant-jmeter" default="all">
<description>
<!--这里是jmeter和ant联调方式以及build文件编写方式的基本说明-->
Sample build file for use with ant-jmeter.jar
See http://www.programmerplanet.org/pages/projects/jmeter-ant-task.php
To run a test and create the output report:
ant -Dtest=script
To run a test only:
ant -Dtest=script run
To run report on existing test output
ant -Dtest=script report
The "script" parameter is the name of the script without the .jmx suffix.
Additional options:
-Dshow-data=y - include response data in Failure Details
-Dtestpath=xyz - path to test file(s) (default user.dir).
N.B. Ant interprets relative paths against the build file
-Djmeter.home=.. - path to JMeter home directory (defaults to parent of this build file)
-Dreport.title="My Report" - title for html report (default is 'Load Test Results')
</description>
<!--.........................................自定义分割线 ...................-->
<!--这里是对jmeter各个路径,报告的定义和声明,其实放到一起就是为了整齐一点,当然主要是要在引用之前先声明下-->
<tstamp><format property="time" pattern="yyyyMMddHHmmss"/></tstamp>
<!--定义jmeter的按现目录和根目录(注意:这里默认根目录是build文件所在目录)-->
<property name="basedir" value="/opt/apache-jmeter-5.0/extra" />
<property name="jmeter.home" value="/opt/apache-jmeter-5.0" />
<!-- jmeter生成jtl格式的结果报告的路径,路径具体位置自己定义-->
<property name="jmeter.result.jtl.dir" value="${basedir}/report/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="${basedir}/report/html" />
<!-- 定义报告前缀名称,其实就是报告名字的一部分类似于王八蛋的王-->
<property name="ReportName" value="AATReport"/>
<!-- 定义报告名称 可以加一个时间戳以作区分每次的报告-->
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.summaryName" value="${jmeter.result.html.dir}/SummaryReport${time}.html" />
<property name="jmeter.result.detailName" value="${jmeter.result.html.dir}/DetailReport${time}.html" />
<!-- 接收测试报告的邮箱,多个邮箱之间逗号隔开-->
<property name="mail_to" value="Aliaic@xxx.com,Aliaic2@xxx.com"/>
<!-- html报告的页面title-->
<property name="report.title" value="Api AutoTest Results"/>
<!--.................................自定义分割线 ..........................................-->
<!-- <property name="testpath" value="${user.dir}"/>
<property name="jmeter.home" value="${basedir}/.."/>
<property name="report.title" value="Load Test Results"/>
Name of test (without .jmx)
<property name="test" value="Test"/>
-->
<!-- Should report include response data for failures?
这句话的意思是这下面的配置是为了在执行有失败时返回错误数据的 -->
<property name="show-data" value="n"/>
<property name="format" value="2.1"/>
<condition property="style_version" value="_21">
<equals arg1="${format}" arg2="2.1"/>
</condition>
<condition property="funcMode">
<equals arg1="${show-data}" arg2="y"/>
</condition>
<condition property="funcMode" value="false">
<not>
<equals arg1="${show-data}" arg2="y"/>
</not>
</condition>
<!-- Allow jar to be picked up locally 这里是加载jmeter ant依赖包的,跟你复制的那个虽然是一个包,但不要混淆以为就可以不复制了-->
<path id="jmeter.classpath">
<fileset dir="${basedir}">
<include name="ant-jmeter*.jar"/>
</fileset>
</path>
<!-- 这里就是定义几个任务了,例如我这里有用例执行任务(run),报告生成任务,邮件发送任务等(sendmail)-->
<taskdef
name="jmeter"
classpathref="jmeter.classpath"
classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<target name="all">
<antcall target="run"/>
<antcall target="xslt-report-summary"/>
<antcall target="xslt-report-detail"/>
<antcall target="sendmail"/>
</target>
<!--定义run任务,指定需要执行的jmx文件-->
<target name="run">
<jmeter
jmeterhome="${jmeter.home}"
resultlog="${jmeter.result.jtlName}">
<!-- Force suitable defaults -->
<testplans dir="${basedir}/testscript" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<property name="jmeter.save.saveservice.assertion_results" value="all"/>
<property name="jmeter.save.saveservice.bytes" value="true"/>
<property name="file_format.testlog" value="${format}"/>
<property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
</jmeter>
</target>
<property name="lib.dir" value="${jmeter.home}/lib"/>
<!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ -->
<path id="xslt.classpath">
<fileset dir="${lib.dir}" includes="xalan*.jar"/>
<fileset dir="${lib.dir}" includes="serializer*.jar"/>
</path>
<target name="report" depends="xslt-report-summary,copy-images">
</target>
<target name="xslt-report-summary" depends="_message_xalan,copy-images">
<!---->
<tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
<!--这部分用于将jtl文件转换为.HTML文件
in:生成.jtl文件的路径
out:生成html文件的路径
style:jtl转换成html文件样式:这里对应的style_version是21,即jmeter-results-detail-report_21.xsl
param:style中需要使用的参数
path:添加jar包的路径
-->
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.summaryName}"
style="${basedir}/jmeter-results-report${style_version}.xsl">
<param name="showData" expression="${show-data}"/>
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
</target>
<target name="xslt-report-detail">
<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.detailName}"
style="${basedir}/jmeter.results.shanhe.me.xsl">
<param name="showData" expression="${show-data}"/>
</xslt>
</target>
<!-- Copy report images if needed extra文件夹下面有两个图片HTML报告需要,5.0版本复制代码配置好了,直接修改目标目录为jmeter.result.html.dir即可-->
<target name="copy-images" depends="verify-images" unless="samepath">
<copy file="${basedir}/expand.png" tofile="${jmeter.result.html.dir}/expand.png"/>
<copy file="${basedir}/collapse.png" tofile="${jmeter.result.html.dir}/collapse.png"/>
</target>
<target name="verify-images">
<condition property="samepath">
<equals arg1="${jmeter.result.html.dir}" arg2="${basedir}" />
</condition>
</target>
<!-- Check that the xalan libraries are present -->
<condition property="xalan.present">
<and>
<!-- No need to check all jars; just check a few -->
<available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
<available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
</and>
</condition>
<target name="_message_xalan" unless="xalan.present">
<echo>Cannot find all xalan and/or serialiser jars</echo>
<echo>The XSLT formatting may not work correctly.</echo>
<echo>Check you have xalan and serializer jars in ${lib.dir}</echo>
</target>
<!-- 定义邮件发送任务,示例使用的是腾讯企业邮箱配置,邮件正文直接使用了SummaryReport${time}.html报告-->
<target name="sendmail" >
<tstamp><format property="report.datestamp" pattern="yyyy-MM-dd HH:mm"/></tstamp>
<mail mailhost="smtp.exmail.qq.com"
mailport="465"
ssl="true"
user="Aliaic@xxx.com"
password="xxxxx"
subject="${report.datestamp}-接口自动化测试报告"
from="Aliaic@xxx.com"
tolist="${mail_to}">
<message
src = "${jmeter.result.html.dir}/SummaryReport${time}.html" mimetype="text/html">
</message>
<attachments>
<fileset dir="${jmeter.result.html.dir}">
<include name="SummaryReport${time}.html"/>
<include name="DetailReport${time}.html"/>
</fileset>
</attachments>
</mail>
</target>
</project>
2.2jmeter html报告配置
2.2.1html简要报告生成
如我的文件build.xml target="xslt-report-summary”中提到的:style="${basedir}/jmeter-results-report${style_version}.xsl"这里使用的就是jmeter的原生的HTML 风格的报告,类似于我们聚合报告,有一个整体的执行情况以及错误反馈
2.2.2html详细报告
简要报告只是一个整体执行情况概览,对于需要详情信息是不足够的,所以需要用到detail报告
(1)下载最新的jmeter.results.shanhe.me.xsl到$JMETER_HOME/extras下
(2)进入$JMETER_HOME/bin下修改jmeter.properties:取消需要的配置信息注释并改为true,这样做是为了获取响应的数据或属性
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
#Only available with HttpClient4
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
#Only available with HttpClient4
jmeter.save.saveservice.sent_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.定时任务
目前为止基本环境已经搭建完成了,在build所在路径下执行ant就可以生成报告了,但是我们期望定时执行并且定时清理产生的历史测试报告
3.1定时执行脚本
因为我是在Ubuntu下执行的,所以执行可以建一个定时脚本即可,也可以使用Jenkins构建定时任务,但是那个有些牛刀小用了
关于定时Linux定时脚本的问题,可以后面再聊聊了
3.2定时删除脚本
例如每天的0点0分删除历史文件
0 0 * * * /bin/bash /usr/local/jmeter/extras/report/delete_log.sh