JMeter是Apache組織的開放源代碼項(xiàng)目,能做接口測(cè)試、功能測(cè)試和性能測(cè)試。它能夠?qū)TTP和FTP服務(wù)器進(jìn)行壓力和性能測(cè)試,也可以對(duì)數(shù)據(jù)庫進(jìn)行同樣的測(cè)試(通過JDBC),還能以多種形式展現(xiàn)測(cè)試結(jié)果。
然而,在使用JMeter進(jìn)行測(cè)試過程中,不可避免遇到兩個(gè)痛點(diǎn):"運(yùn)行測(cè)試腳本"和"生成測(cè)試報(bào)告"。前者主要是需要不斷重復(fù)運(yùn)行腳本,且當(dāng)腳本數(shù)量較多或進(jìn)行并發(fā)測(cè)試時(shí),JMeter GUI界面容易宕機(jī)、卡死等,這種情況下就需要重復(fù)使用命令執(zhí)行腳本;后者則是需要手工整理數(shù)據(jù)、分析測(cè)試結(jié)果然后生成測(cè)試報(bào)告。

因此,本文采用JMeter+Ant(一個(gè)將軟件編譯、測(cè)試、部署等步驟聯(lián)系在一起加以自動(dòng)化的工具)搭建自動(dòng)化測(cè)試環(huán)境,用以解決測(cè)試過程中的痛點(diǎn),通過此環(huán)境可以實(shí)現(xiàn):
(1)自動(dòng)重復(fù)運(yùn)行腳本(2)自動(dòng)生成測(cè)試報(bào)告(3)自動(dòng)發(fā)送郵件。
大體的邏輯如下:
1、配置build.xml文件,Ant通過XML文件進(jìn)行構(gòu)建,通過調(diào)用target就可以執(zhí)行各種task,每個(gè)task實(shí)現(xiàn)了特定接口對(duì)象。因此,通過Ant可以實(shí)現(xiàn)批量執(zhí)行。
2、Ant通過測(cè)試結(jié)果(jtl文件)構(gòu)建生成html測(cè)試報(bào)告,并輸出在指定路徑下,避免了手工整理測(cè)試報(bào)告。
3、根據(jù)build.xml文件中配置的的郵件信息,將HTML測(cè)試報(bào)告自動(dòng)發(fā)送到指定的郵箱。
JDK安裝
JMeter依賴JAVA環(huán)境,故需要先安裝JDK并配置好環(huán)境變量。
Java環(huán)境變量配置
1、創(chuàng)建JAVA_HOME(JDK安裝目錄)。如:C:Program Files (x86)Javajdk1.8.0_231
2、創(chuàng)建CLASSPATH,.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar(注意最前面有一點(diǎn))
3、編輯Path,把值放在最面?%JAVA_HOME%bin;%JAVA_HOME%jrebin;
驗(yàn)證JDK
CMD命令行輸入java -version,顯示如圖,表示安裝成功。

JMeter安裝
下載成功后,解壓縮到建立的文件夾路徑中(如:D:ApacheJMeter)。
JMeter環(huán)境變量配置
1、創(chuàng)建JMETER_HOME,填寫JMeter文件所屬路徑(如:D:ApacheJMeter)
2、修改CLASSPATH,添加;%JMETER_HOME%libextApacheJMeter_core.jar%JMETER_HOME%libjorphan.jar;%JMETER_HOME%liblogkit-1.2.jar;
3、修改Path,添加%JMETER_HOME%bin
點(diǎn)擊JMeter目錄下bin文件夾中的jmeter.bat就可以打開JMeter,具體界面如下:

添加常用插件
注:官網(wǎng)下載的JMeter不包含一些常用插件。
將plugins-manager-xxx.jar、JMeterPlugins-Extras.jar、JMeterPlugins-Standard.jar和JMeterPlugins-Standard-1.4.0.zip解壓后的jar包放入D:ApacheJMeter目錄下的libext目錄,重啟JMeter。
打開有如下頁面,則成功安裝。

JMeter相關(guān)配置修改
1、修改默認(rèn)語言和jvm參數(shù)(根據(jù)電腦配置進(jìn)行修改),編輯JMeter.bat如下:


2、編輯JMeter.peoperties使用第三方模塊生成詳細(xì)報(bào)告:

Ant安裝
下載成功后,解壓Ant壓縮包到建立的文件夾路徑(如:D:ApacheAnt)。
Ant環(huán)境變量配置
1、創(chuàng)建ANT_HOME,填寫Ant所屬路徑(如D:ApacheAnt?)
2、修改CLASSPATH,添加;%ANT_HOME%lib
3、修改Path,添加;%ANT_HOME%bin
驗(yàn)證Ant
CMD命令行輸入ant,如下圖所示表示安裝成功。

Ant配置及相關(guān)使用操作
1、將D:ApacheJMeterextras下面的ant-jmeter-1.1.1.jar包復(fù)制到D:ApacheAntlib目錄下。
2、將jmeter.results.shanhe.me.xsl和jmeter-results-detail-report_21.xsl分別放在D:ApacheJMeterextras目錄下。
3、(發(fā)送郵件所需jar包)下載activation-1.1.1.jar、commons-email-1.5.jar和javax.mail.jar放到D: Apacheantlib。
4、在本地任意創(chuàng)建目錄testcases(如:D:testcases),并在其目錄下創(chuàng)建report文件夾和build.xml文件,復(fù)制以下內(nèi)容到build.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目錄 -->
<property name="jmeter.home" value="D:Apachejmeter" />
<property name="report.title" value="測(cè)試報(bào)告" />
<!-- jmeter生成jtl格式的結(jié)果報(bào)告的路徑 -->
<property name="jmeter.result.jtl.dir" value="D:testcasesreport" />
<!-- jmeter生成html格式的結(jié)果報(bào)告的路徑 -->
<property name="jmeter.result.html.dir" value="D:testcasesreport" />
<!-- zip文件路徑 -->
<property name="zip.dir" value="D:testcases" />
<!-- 生成的報(bào)告的前綴 -->
<property name="ReportName" value="testcases" />
<!-- 報(bào)告名稱 -->
<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" />
<property name="zipname" value="${zip.dir}/${ReportName}${time}.zip" />
<!-- 郵件配置信息 -->
<property name="mail_host" value="smtp.163.com" />
<property name="mail_port" value="465" />
<property name="username" value="[email protected]" />
<property name="password" value="123456789" />
<property name="mail_from" value="[email protected]" />
<property name="mail_to" value="[email protected],[email protected]" />
<property name="mailsubject" value="測(cè)試報(bào)告" />
<!-- 輸出生成的報(bào)告名稱和存放路徑 -->
<echo message="${jmeter.result.jtlName}" />
<echo message="${jmeter.result.htmlName}" />
<echo message="${jmeter.result.html.dir}" />
<echo message="${zip.dir}" />
<echo message="${zipname}" />
<!-- 加載jar包,解決時(shí)間顯示問題 -->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar" />
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar" />
</path>
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="summary-report" />
<antcall target="zip" />
<!-- 打包zip -->
<antcall target="sendEmail" />
<!-- 發(fā)送郵件 -->
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 聲明要運(yùn)行的腳本"*.jmx"指包含此目錄下的所有jmeter腳本 -->
<!-- 如果只想執(zhí)行部分腳本,可以寫多條testplans 將需要執(zhí)行的jmx寫在includes中 -->
<testplans dir="D:testcases" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml" />
<!-- 這里就是jmeter.properties修改的部分 -->
</jmeter>
</target>
<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.html.dir}/summary-report.html" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<!-- 這里是第三方模板,修改jmeter.properties后生成的報(bào)告有詳細(xì)的請(qǐng)求、響應(yīng)、錯(cuò)誤信息等 -->
<param name="Date Report" expression="${report.datestamp}" />
</xslt>
<!-- 因?yàn)樯厦嫔蓤?bào)告的時(shí)候,不會(huì)將相關(guān)的圖片也一起拷貝至目標(biāo)目錄,所以,需要手動(dòng)拷貝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
<target name="summary-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">
<!-- 這里是一個(gè)簡(jiǎn)要的信息,查看成功和失敗的請(qǐng)求百分比 -->
<param name="dateReport" expression="${report.datestamp}" />
</xslt>
</target>
<!-- zip配置 -->
<target name="zip">
<echo>
打包zip文件
</echo>
<zip destfile="${zipname}" duplicate="preserve">
<zipfileset dir="${jmeter.result.html.dir}" includes="**/*.*" prefix="測(cè)試報(bào)告" />
</zip>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${zip.dir}">
<include name="*.zip" />
</fileset>
</copy>
</target>
<!-- 配置發(fā)送郵件報(bào)告 -->
<target name="sendEmail">
<echo>
發(fā)送測(cè)試報(bào)告
</echo>
<loadfile property="email_content" srcFile="${jmeter.result.htmlName}" encoding="UTF-8" />
<mail mailhost="${mail_host}" ssl="true" user="${username}" password="${password}" mailport="${mail_port}" subject="${mailsubject}" messagemimetype="text/html" messagefileinputencoding="UTF-8" tolist="${mail_to}">
<from address="${mail_from}" />
<message charset="UTF-8">
${email_content}
</message>
<!-- 附件 -->
<attachments>
<fileset dir="${jmeter.result.html.dir}">
<include name="*.zip" />
</fileset>
</attachments>
</mail>
</target>
</project>
5、打開CMD命令行,切換到testcases目錄下執(zhí)行ant命令;或在testcases目錄編寫ant.bat文件執(zhí)行,文件內(nèi)容如下:
@echo
call ant -buildfile build.xml -l logfile
pause
注:執(zhí)行日志存放在testcase目錄下的logfile文件中。
附:報(bào)告及郵件
1、概略報(bào)告

2、詳細(xì)報(bào)告

3、郵件及附件
