(文檔包含自定義接口測試報(bào)告以及集成jenkins)
??????Jmeter是壓力測試、接口測試工具,Ant是基于Java的構(gòu)建工具,具有跨平臺(tái)的作用,jenkins是持續(xù)集成工具。將這三者結(jié)合起來可以搭建一套webservice接口測試的持續(xù)構(gòu)建環(huán)境。
? 1、安裝JDK,配置java環(huán)境變量(略過)
??2、安裝Jmeter,這里用到的版本是3.1(安裝過程略過)
??3、安裝 ANT
???3.1 下載安裝
?????下載地址 http://ant.apache.org/bindownload.cgi,下載后解壓到指定位置即可,
?????比如:D:/program files/apache-ant-1.9.0
???3.2 配置環(huán)境變量
windows中設(shè)置ant變量:
ANT-HOME D:/program files/apache-ant-1.9.0
path D:/program files/apache-ant-1.9.0/bin
classpath D:/program files/apache-ant-1.9.0/lib
? ?3.3 安裝驗(yàn)證
?????驗(yàn)證安裝結(jié)果,命令行輸入ant -v?,出現(xiàn)版本信息則安裝成功(本人安裝的是1.10.5版)
??4、ANT中配置Jmeter???
??????????4.1、配置庫文件
? ? ? ? ? 將jmeter extras目錄下的ant-jmeter-1.1.1.jar?文件拷貝到ant安裝目錄下的lib文件夾中(本人安裝的是jmeter3.1)
??????copy from:
??????paste to:
????4.2??配置ANT與Jmeter的配置文件
?????????4.2.1?配置ant 編譯文件?build.xml
??????拷貝下面的內(nèi)容與新建的txt文件中,并將此文件改名為:build.xml????????????
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <project name="ant-jmeter-test" default="run" basedir=".">
4? ? <tstamp>
5? ? ? ? <format property="time" pattern="yyyyMMddhhmm" />
6? ? </tstamp>
7? ? <!-- 需要改成自己本地的 Jmeter 目錄-->?
8? ? <property name="jmeter.home" value="D:\測試工具\(yùn)JMETER\apache-jmeter-3.1" />
9? ? <!-- jmeter生成jtl格式的結(jié)果報(bào)告的路徑-->
10? ? <property name="jmeter.result.jtl.dir" value="D:\測試工具\(yùn)JMETER\apache-jmeter-3.1\bin\ant-test\smoke_report\jtl" />
11? ? <!-- jmeter生成html格式的結(jié)果報(bào)告的路徑-->
12? ? <property name="jmeter.result.html.dir" value="D:\測試工具\(yùn)JMETER\apache-jmeter-3.1\bin\ant-test\smoke_report\html" />
13? ? <!-- 生成的報(bào)告的前綴-->?
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}.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? ? ? ? ? ? ? <!-- 聲明要運(yùn)行的腳本。"*.jmx"指包含此目錄下的所有jmeter腳本-->
27? ? ? ? ? ? <testplans dir="D:\測試工具\(yùn)JMETER\apache-jmeter-3.1\bin\ant-test\測試" 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? ? <target name="report">
39? ? ? ? <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>? ?
40? ? ? ? <xslt? ? ? ? ? ? ?
41? ? ? ? ? ? ? classpathref="xslt.classpath"
42? ? ? ? ? ? ? force="true"
43? ? ? ? ? ? ?
44? ? ? ? ? ? ? in="${jmeter.result.jtlName}"
45? ? ? ? ? ? ? out="${jmeter.result.htmlName}"
46? ? ? ? ? ? ? style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />?
47? ? ? ?
48? ? ? ? <!-- 因?yàn)樯厦嫔蓤?bào)告的時(shí)候,不會(huì)將相關(guān)的圖片也一起拷貝至目標(biāo)目錄,所以,需要手動(dòng)拷貝 -->
49? ? ? ? <copy todir="${jmeter.result.html.dir}">
50? ? ? ? ? ? <fileset dir="${jmeter.home}/extras">
51? ? ? ? ? ? ? ? <include name="collapse.png" />
52? ? ? ? ? ? ? ? <include name="expand.png" />
53? ? ? ? ? ? </fileset>
54? ? ? ? </copy>
55? ? </target>? ?
56? ?
57 </project>
View Code(復(fù)制代碼記得刪除每行數(shù)列的數(shù)字序號(hào))
?4.2.2 配置jmeter.properties
????配置jmeter報(bào)告輸出格式為xml在jmeter目錄下jmeter.properties文件中修改jmeter.save.saveservice.output_format=csv?為
????????jmeter.save.saveservice.output_format=xml,并去掉前面的注釋符號(hào)#
??4.3 驗(yàn)證配置,執(zhí)行構(gòu)建測試
??4.3.1 準(zhǔn)備測試腳本數(shù)據(jù)
????build配置文件放在與測試腳本同目錄
??4.3.2 執(zhí)行測試?????
??????????命令行cd到build.xml文件所在目錄,輸入ant run?,執(zhí)行測試
???看到build successful 則說明構(gòu)建測試成功
???4.3.3 報(bào)告輸出路徑下查看測試結(jié)果報(bào)告
????按build.xml文件中設(shè)置的測試報(bào)告地址找到html版測試報(bào)告
????打開看看:測試結(jié)果展現(xiàn)了用例數(shù)、成功率、用例執(zhí)行時(shí)間等結(jié)果參數(shù)
??4.4、 測試報(bào)告優(yōu)化
???用jmeter自帶的測試報(bào)告得到的測試報(bào)告信息并不是很全,這里參考網(wǎng)上的方法,做一個(gè)優(yōu)化
???4.4.1、下載優(yōu)化模板 jmeter-results-shanhe-me.xsl,拷貝到j(luò)meter的extras目錄中,
??????如D:\測試工具\(yùn)JMETER\apache-jmeter-3.1\extras
鏈接:https://pan.baidu.com/s/1dWvwufys0YtYDC6w8bnSMQ 密碼:7m03
上面的為請(qǐng)求結(jié)果自動(dòng)換行,且用json格式化請(qǐng)求結(jié)果
??????4.4.2、設(shè)置測試輸出報(bào)告要輸出的內(nèi)容
?????同樣在jmeter.properties中,設(shè)置需要輸出的內(nèi)容為true,并去掉前面的注釋符號(hào)#,這里全部設(shè)置成true
?4.4.3?設(shè)置build文件的報(bào)告模板為優(yōu)化后的模板jmeter-results-shanhe-me.xsl
鏈接:https://pan.baidu.com/s/1ogCJRfdsZ6s2m-PHN1nSEA 密碼:rk81
4.4.4、按前面的方式再次用ant構(gòu)建測試,查看優(yōu)化后的測試報(bào)告
??5、配置jenkins
?5.1 、jenkins.war的下載與安裝,下載后放到d盤根目錄
???????5.2 、配置環(huán)境變量,設(shè)置JENKINS_HOME?,例如jenkins文件在d盤根目錄,JENKINS_HOME=d:\jenkins???????
???????5.3 、啟動(dòng)jenkins(jenkins.war文件我放在D盤根目錄的)
?????????????命令行輸入java -jar jenkins.war
瀏覽器中輸入url:jenkins所在主機(jī)IP 端口:8080 ,打開jenkins
????配置用戶名、密碼及插件,這里需要配置invoke ant插件、HTML測試報(bào)告展示的插件
invoke ant插件
HTML插件
???5.4、新建并配置一個(gè)JOB
????設(shè)置項(xiàng)目名稱:
????配置構(gòu)建:
????配置構(gòu)建:invoke ant
配置build文件路徑:?
?配置測試報(bào)告插件,用于打開測試結(jié)果報(bào)告
基本配置完成
? ? ?5.5、JOB主頁,點(diǎn)擊立即構(gòu)建,執(zhí)行測試,構(gòu)建完成即可通過HTML_Report來查看測試結(jié)果
? ? ? ? ? ?繼續(xù)構(gòu)建基本完成
配置郵件插件來發(fā)送測試報(bào)告(引用他人截圖)
1、在Jenkins安裝Email Extension Plugin插件,如下圖:
2、設(shè)置Extended E-mail Notification
進(jìn)入“系統(tǒng)管理”-“系統(tǒng)設(shè)置”,對(duì)Extended E-mail Notification進(jìn)行配置,具體參考下圖:?
注意:上圖中的Password不是qq密碼,而是在QQ郵箱申請(qǐng)開通IMAP/SMTP服務(wù)后收到的密碼
3、設(shè)置郵件通知
還是在系統(tǒng)管理-系統(tǒng)設(shè)置里面設(shè)置,內(nèi)容和Extended E-mail Notification差不多,具體如下圖:?
4、Jenkins任務(wù)的配置
a、在進(jìn)入任務(wù)的配置頁面,然后在構(gòu)建后操作模塊增加構(gòu)建后的操作“Editable Email Notification”,如圖:?
b、我的Editable Email Notification配置如下:?
注釋:當(dāng)測試郵件配置失敗,看下系統(tǒng)管理員郵箱有沒有配置。
c、注意:還要在高級(jí)里設(shè)置郵件的觸發(fā)條件,如下:?
d、我的郵件內(nèi)容如下,可參考
第一個(gè):
<!DOCTYPE html>??
<html>??
<head>??
<meta charset="UTF-8">??
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構(gòu)建日志</title>??
</head>??
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"??
??offset="0">??
??<div>
??<table width="95%" cellpadding="0" cellspacing="0"?
????style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">?
????<tr>
??????<th align="center" colspan="2"><br />
????????<h2>構(gòu)建信息</h2>?
??????</th>
????</tr>
????<tr>??
??????<td>??
????????<ul>??
??????????<li>項(xiàng)目名稱 : ${PROJECT_NAME}</li><br />??
??????????<li>詳細(xì)測試報(bào)告 : <a href="${PROJECT_URL}測試報(bào)告">${PROJECT_URL}測試報(bào)告</a></li><br />
??????????<li>觸發(fā)原因: ${CAUSE}</li><br />???????????
??????????<li>項(xiàng)目?Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li><br />
????????</ul>??
??????</td>?
??????<td>${JELLY_SCRIPT,template="html"}<br/>?
????</tr>??
????<tr>??
??????<td colspan="2" align="center"><br />
??????<h2>測試報(bào)告</h2>
??????</td>??
????</tr>
????<tr>
??????<td colspan="2" align="center">
????????<div>${FILE ,path="C:/Users/kingdee/.jenkins/workspace/AutoTestDemo/target/surefire-reports/emailable-report.html"}</div>
??????</td>
????</tr>
??</table>?
??</div>
?</body>??
</html>
注意這行代碼:
${FILE ,path=”D:/測試工具/JMETER/apache-jmeter-3.1/bin/ant-test/smoke_report/TestReport.htmll”}
作用是引入了testng生成的測試報(bào)告,然后在郵件的html里顯示出來。
第二個(gè):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構(gòu)建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
??offset="0">
??<table width="95%" cellpadding="0" cellspacing="0"
????style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
????<tr>
??????<td>(本郵件是程序自動(dòng)下發(fā)的,請(qǐng)勿回復(fù)!)</td>
????</tr>
????<tr>
??????<td><h2>
??????????<font color="#0000FF">構(gòu)建結(jié)果 - ${BUILD_STATUS}</font>
????????</h2></td>
????</tr>
????<tr>
??????<td><br />
??????<b><font color="#0B610B">構(gòu)建信息</font></b>
??????<hr size="2" width="100%" align="center" /></td>
????</tr>
????<tr>
??????<td>
????????<ul>
??????????<li>項(xiàng)目名稱 : ${PROJECT_NAME}</li>
??????????<li>構(gòu)建編號(hào) : 第${BUILD_NUMBER}次構(gòu)建</li>
??????????<li>觸發(fā)原因: ${CAUSE}</li>
??????????<li>構(gòu)建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
??????????<li>構(gòu)建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
??????????<li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
??????????<li>項(xiàng)目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
????????</ul>
??????</td>
????</tr>
????<tr>
??????<td><b><font color="#0B610B">Changes Since Last
????????????Successful Build:</font></b>
??????<hr size="2" width="100%" align="center" /></td>
????</tr>
????<tr>
??????<td>
????????<ul>
??????????<li>歷史變更記錄 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
????????</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
??????</td>
????</tr>
????<tr>
??????<td><b>Failed Test Results</b>
??????<hr size="2" width="100%" align="center" /></td>
????</tr>
????<tr>
??????<td><pre
??????????style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
????????<br /></td>
????</tr>
????<tr>
??????<td><b><font color="#0B610B">構(gòu)建日志 (最后 100行):</font></b>
??????<hr size="2" width="100%" align="center" /></td>
????</tr>
????<!-- <tr>
??????<td>Test Logs (if test has ran): <a
????????href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
????????<br />
??????<br />
??????</td>
????</tr> -->
????<tr>
??????<td><textarea cols="80" rows="30" readonly="readonly"
??????????style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
??????</td>
????</tr>
??</table>
</body>
</html>
設(shè)置構(gòu)建時(shí)間來定時(shí)自動(dòng)執(zhí)行測試?