轉自https://www.bbsmax.com/A/xl56OPM9dr/
Jenkins+Jmeter持續(xù)集成筆記(一:環(huán)境準備)
整體思路:
通過Jmeter圖形界面編寫api測試腳本
ant 批量執(zhí)行Jmeter腳本文件
將其集成到jenkins乘瓤,設置執(zhí)行頻率與發(fā)送測試報告
運行環(huán)境
系統 配置 IP
Centos7.1 1核2G+60GB硬盤 10.10.28.205
1、安裝JDK
(1)下載jdk并上傳到/usr/java目錄
選擇對應的linux版本下載文件地沮,我下載的是jdk-8u151-linux-x64.rpm。(上傳java目錄不存在時提前創(chuàng)建)
(2)解壓安裝
# rpm -ivh jdk-8u151-linux-x64.rpm
(3)新建java環(huán)境變量
# vim /etc/profile
在文件末尾添加如下內容
使添加的內容生效
# source /etc/profile
(4)檢查是否安裝成功
# java -version
2驮捍、安裝Jmeter
(1)下載jmeter并上傳到/usr/jmeter目錄
選擇對應的linux版本下載文件术吝,我下載的是apache-jmeter-3.3.tgz。(上傳jmeter目錄不存在時提前創(chuàng)建)
(2)解壓完成后作岖,添加環(huán)境變量
# vim /etc/profile
在文件末尾添加如下內容
export JMETER=/usr/jmeter/apache-jmeter-3.3
export CLASSPATH=JMETER/lib/jorphan.jar:CLASSPATH
export PATH=PATH
使添加的內容生效
# source /etc/profile
(3)檢查是否安裝成功
# jemter -v
3耗式、安裝Jenkins
(1)下載jenkins并上傳到/usr/jenkins目錄
選擇對應的linux版本下載文件胁住,我下載的是jenkins-2.73.3-1.1.noarch.rpm。(上傳jenkins目錄不存在時提前創(chuàng)建)
(2)解壓
(3)設置jenkins自啟動刊咳,并啟動jenkns
# chkconfig jenkins on
# service jenkins start
jenkins默認端口是8080彪见,如果端口已被別的程序占用,可在jenkins配置文件/etc/sysconfig/jenkins中修改jenkins端口號
(4)訪問jenkins主頁
http://10.10.28.205:8080/
根據頁面提示找到文件中的字符串娱挨,填入Administrator password一欄余指,解鎖jenkins。
然后勾選安裝全部插件跷坝,接著設置登錄賬號密碼酵镜。
小提示:
jenkins的war包路徑(/usr/lib/jenkins/jenkins.war)
jenkins程序文件路徑(/var/lib/jenkins)
環(huán)境安裝就到這里,接下來準備使用ant來執(zhí)行jmeter腳本文件
Jenkins+Jmeter持續(xù)集成筆記(二:ANT執(zhí)行Jmeter腳本)
Jmeter接口測試腳本運行后生成的是jtl(xml)格式的文件柴钻,這些文件不具備可讀性淮韭,所以我們要把他轉化為可以閱讀的html格式報告。
Ant是一個功能強大的打包編譯工具贴届。我們使用他的目的是將xml文件轉化為html格式的文件靠粪。
1、安裝ANT
(1)下載ANT安裝包到/usr/ant目錄
wget https://mirrors.cnnic.cn/apache/ant/binaries/apache-ant-1.9.9-bin.tar.gz
(上傳ant目錄不存在時提前創(chuàng)建)
(2)解壓安裝
-bin.tar.gz
(3)新建ant環(huán)境變量
# vim /etc/profile
在文件末尾添加如下內容
export ANT_HOME=/usr/ant/apache-ant-1.9.9
export PATH=JAVA_HOME/bin:$ANT_HOME/bin
使添加的內容生效
# source /etc/profile
(4)檢查是否安裝成功
# ant -version
重要配置:
1)將 jmeter的extras目錄中ant-jmeter-1.1.1.jar包拷貝至ant安裝目錄下的lib目錄中
這一步操作使Ant運行時能夠找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類毫蚓,從而成功觸發(fā)JMeter腳本
2)修改Jmeter的bin目錄下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml
這一步操作使Jmeter報告輸出文件格式為xml
2占键、準備Jmeter測試腳本
請參見我關于jmeter腳本編寫的其他文章 http://www.cnblogs.com/LiangHu/tag/Jmeter/
我的測試腳本如下圖所示:test_token.jmx
3、用Ant執(zhí)行腳本
(1)在jmeter安裝目錄下新建兩個文件夾
TestReport文件夾:用于保存html的結果報告绍些;
TestScrip文件夾:用于保存jmeter的測試腳本捞慌。
(2)ant執(zhí)行jmeter腳本原理
ant工具主要是根據build.xml文件來進行工作的耀鸦,官方給出的默認文件在Jmeter的安裝目錄下extras文件夾中柬批。
你可以在該目錄下直接輸入命令ant看一下效果:
構建時啸澡,ant執(zhí)行的是該目錄下Test.jmx腳本,執(zhí)行完畢后把輸出的報告Test.jtl文件轉化為Test.html文件
從圖上可以看出生成了這兩個測試報告文件氮帐。希望可以從這個過程中能夠大概了解ant執(zhí)行jmeter腳本的原理嗅虏。
測試報告使用默認的樣式,如下圖所示:
(3)修改build.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddHHmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目錄-->
<property name="jmeter.home" value="/usr/jmeter/apache-jmeter-3.3" />
<!-- jmeter生成jtl格式的結果報告的路徑-->
<property name="jmeter.result.jtl.dir" value="/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/jtl" />
<!-- jmeter生成html格式的結果報告的路徑-->
<property name="jmeter.result.html.dir" value="/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/html" />
<!-- 生成的報告的前綴-->
<property name="ReportName" value="TestReport" />
<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" />
<!-- 輸出生成的報告名稱和存放路徑-->
<echo message="${jmeter.result.jtlName}"/>
<echo message="${jmeter.result.htmlName}"/>
<echo message="${jmeter.result.html.dir}"/>
<target name="run">
<antcall target="test"/>
<antcall target="report"/>
</target>
<!--加載jar包,解決顯示時間問題-->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 聲明要運行的腳本上沐。"*.jmx"指包含此目錄下的所有jmeter腳本-->
<testplans dir="/usr/jmeter/apache-jmeter-3.3/TestScrip" includes="test_token.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</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.htmlName}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<!--顯示dateReport的時間-->
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<!-- 因為上面生成報告的時候皮服,不會將相關的圖片也一起拷貝至目標目錄,所以参咙,需要手動拷貝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
說明:
文件中style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"指的是測試報告采用的樣式龄广。讀者可以在jmeter安裝目錄下extras文件夾里看到前綴類似jmeter-results-report的文件,不妨挨個替換進style的值蕴侧,執(zhí)行完測試腳本后看一下輸出的測試報告樣式择同。
jmeter.results.shanhe.me.xsl該樣式是我從網上下載的,默認的報告樣式展示的信息比較少不適合我的項目而已净宵,下載好上傳到extras文件夾即可敲才。
(這個build.xml文件基本可以作為模板使用,只要你按照自己當前的環(huán)境改一下文件中少量配置即可择葡。)
(4)上傳測試腳本test_token.jmx和build.xml文件到TestScrip目錄下
(5)ant命令執(zhí)行測試腳本
進入TestScrip目錄紧武,輸入:ant run(run為build.xml中的target的name名)
(6)查看測試報告
根據bulid.xml文件中定義的測試報告路徑,進入相應目錄即可找到測試報告文件敏储。
<!-- jmeter生成html格式的結果報告的路徑-->
<property name="jmeter.result.html.dir" value="/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/html" />
在這里可以看到報告中的request和response兩項沒有數據阻星。修改jmeter/bin目錄下jmeter.properties文件如下部分,我這里都修改成true已添,這樣執(zhí)行完腳本后就會保存這些結果到.jtl文件里面:
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
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
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
接下來將介紹如何把以上的操作使用jenkins來做持續(xù)集成
上一篇筆記中已經實現了通過ant工具執(zhí)行Jmeter測試腳本迫横,并輸出html格式測試報告到指定目錄。
在本章中酝碳,將嘗試把這個過程丟進jenkins去執(zhí)行矾踱。
1、Jenkins全局工具配置
登錄jenkins->系統管理->Global Tool Configuration
(1)JDK配置
(2)Ant配置
配置信息按照機器上實際安裝的來填寫疏哗。頁面上的其他工具配置與我的測試工作無關呛讲,不用關注。
2返奉、Jenkins新建任務
登錄jenkins->首頁的“新建”功能按鈕
(1)構建一個自由風格的軟件項目
(2)配置“構建”步驟
構建->增加構建步驟->Invoke Ant
Ant Version:jenkins全局工具配置過Ant后贝搁,點擊表單會出現在下拉框中,直接選中即可芽偏;
Targets:前一章中提到的build.xml文件中的targets的名字雷逆;
Build File:指定build.xml文件的路徑以及文件名,可以看到我在這里把build.xml重命名為test_token_build.xml污尉,目的是如果以后jenkins集成的測試腳本數量變多以后膀哲,能夠確保build.xml文件與測試腳本一一對應往产。
3、配置完畢某宪,開始測試
(1)立即構建
(2)查看控制臺輸出
由圖看出仿村,以及執(zhí)行到了測試腳本,但是由于權限不夠兴喂,導致本次構建失敗蔼囊。
給jmeter.log授予權限即可:
在該目錄下授權
# jmeter.log
授權后:
OK,再次構建查看結果:
(3)查看測試報告是否生成
查看路徑:/usr/jmeter/apache-jmeter-3.3/TestReport/testToken
本章節(jié)就到此為止衣迷,我們實現了通過jenkins頁面直接點擊測試項目的“立即構建”功能按鈕畏鼓,就能夠在遠程服務器上自動的執(zhí)行測試輸出測試報告。下一章節(jié)會通過配置jenkins壶谒,來實現測試任務的定時執(zhí)行以及測試報告通過郵箱自動發(fā)送出來的功能滴肿。
通過前幾篇文章,jmeter+ant+jenkins自動化持續(xù)構建的測試平臺基本成型佃迄。既然要自動化平臺泼差,最基本的肯定要實現不經過人工干預,平臺會在特定的條件下自動運行測試腳本呵俏,并在腳本運行結束后堆缘,發(fā)送郵件通知用戶測試的結果。本文主要介紹如何實現以上兩項功能普碎。
還是接著以上一篇筆記中的“test_token”項目為例:
1吼肥、構建觸發(fā)器
構建觸發(fā)器可以根據自己的需求選擇,由圖看到有四種類型:
(1)可使用腳本觸發(fā)遠程構建麻车;
(2)其他job構建完成后觸發(fā)當前job執(zhí)行構建缀皱;
(3)定時周期性構建;
(4)hookplugin檢測到源碼的push操作就觸發(fā)構建动猬;
(5)定時檢查代碼分支是否有變化啤斗,如果有變化則執(zhí)行一次構建。
我的目的是做接口測試自動化赁咙,每天定時跑任務并監(jiān)控API功能是否正常钮莲,所以選擇Build periodically(定期構建)。日程表一共五個參數:
從左到右分別代表:分 時 天 月 星期
第一個參數代表的是分鐘minute彼水,取值0~59崔拥;
第二個參數代表的是小時hour,取值0~23凤覆;
第三個參數代表的是天day链瓦,取值1~31;
第四個參數代表的是月month盯桦,取值1~12慈俯;
第五個參數代表的是星期week渤刃,取值0~7,0和7都代表星期天。
0 7 * * 1,3,5 表示每周一肥卡、周三、周五的7點00分執(zhí)行一次事镣,*代表所有步鉴。
2、郵件通知
(1)Jenkins Location配置
jenkins首頁->系統管理->系統配置頁面
其中Jenkins URL有默認值璃哟,最好修改氛琢,因為默認地址不安全。
系統管理員郵件地址一定要寫随闪,因為這個地址是郵件通知的發(fā)信人郵箱阳似,填寫方式有兩種:
a)直接填寫郵箱地址
b)可以加前綴來標識該郵件基本信息,例如:自動化測試郵件<郵箱地址>
(2)Extended E-mail Notification配置
jenkins首頁->系統管理->系統配置頁面
按照自己實際使用的郵箱進行配置铐伴,設置時撮奏,點擊“高級”展開,使用SMTP認證(Use SMTP Authentication):
根據郵箱服務提供商確定SMTP服務器当宴,如:126的SMTP是smtp.126.com畜吊、163的SMTP是smtp.163.com
根據郵箱服務提供商確定是否使用SMTP認證、是否使用SSL協議以及SMTP端口
根據郵箱服務提供商確定“Password”是郵箱的登錄密碼還是專用于第三方工具發(fā)郵件的驗證碼户矢,如:QQ和163為驗證碼玲献,126為登錄密碼
OK,郵箱服務的基本配置已經完成梯浪。
接下來的配置相當于是郵件通知的全局配置捌年,對具體job來說,還會進行具體的配置挂洛,如果在job中重新配置了這里相同的項目礼预,就會覆蓋這里的全局配置。
1)Default Content Type:“text/plain”指郵件正文為純文本格式虏劲,“text/html”指郵件內容可以包含html標簽且能被郵箱客戶端正確解析逆瑞、顯示。我這里選擇“text/html”伙单。
2)Default Subject:郵件標題获高,可以使用系統中的全局郵件變量來設置。我這里設置的標題格式為:項目名稱-BUILD#構建次數-構建狀態(tài)吻育。
3)勾選“Enable Debug Mode”念秧,以開啟Extended E-mail Notification的調試功能,這樣可以在構建日志中增加更多與Extended E-mail Notification相關的日志布疼。
(3)Job中的郵件配置
jenkins首頁->job"test_token”->配置->構建后操作
在job中配置頁面摊趾,選擇增加構建后操作币狠,選中Editable Email Notification即可。
需要填寫的各配置項參數說明:
1)Project Recipient List:這是一個以逗號(或者空格)分隔的收件人郵件的郵箱地址列表砾层。
2)Default Content:郵件內容漩绵,可以使用構建中的環(huán)境變量,使得郵件中展示你想要的信息肛炮。
完整內容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日志</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>(本郵件是程序自動下發(fā)的止吐,請勿回復!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">構建結果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">構建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>項目名稱 : ${PROJECT_NAME}</li>
<li>構建編號 : 第${BUILD_NUMBER}次構建</li>
<li>觸發(fā)原因 : ${CAUSE}</li>
<li>構建日志 : 請查看附件</li>
<li>測試報告 : 請查看附件</li>
<li>項目 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>
</table>
</body>
</html>
3)Attachments:郵件的附件侨糟,我把執(zhí)行測試腳本生成的html測試報告文件碍扔,作為附件隨郵件發(fā)出去。
注意:這里的寫法可以使用通配符來確定文件的路徑名稱等秕重,但是文件一定要位于workspace目錄里面不同。
由于我之前的job把測試報告放置在/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/html路徑下,所以現在要修改一下測試報告輸出的路徑:
首先確認workspace目錄的路徑:/var/lib/jenkins/workspace溶耘;
接著在workspace目錄下創(chuàng)建存放測試報告的新文件夾:
/var/lib/jenkins/workspace/test_token/html
/var/lib/jenkins/workspace/test_token/jtl
最后修改/usr/jmeter/apache-jmeter-3.3/TestScrip目錄中的test_token_build.xml文件二拐,把其中測試報告的輸出路徑修改為新的路徑即可。
該參數文本框填寫內容為html/*.html凳兵,意為在該job的workspace路徑下搜索html文件夾中所有以.html為后綴的文件卓鹿,并把這些文件添加到郵件附件中。
(4)觸發(fā)器配置
決定什么情況下發(fā)送郵件留荔。我配置為Always總是觸發(fā)吟孙,接著send to選擇RecipientList,意思是每次構建無論成功與否都發(fā)送郵件到上面指定的收件人列表郵箱聚蝶。3杰妓、測試配置是否成功
構建觸發(fā)器的日程表填一個馬上臨近的時間,等待任務自動執(zhí)行并發(fā)送郵件碘勉。
郵件結果為:
本章已經把定時任務和郵件通知功能實現了巷挥,下一章將會對該平臺進行些優(yōu)化。
通過前面的一系列文章验靡,我的API自動化測試平臺已經搭建成型倍宾,但是要投入具體項目使用時,還有以下幾個問題需要優(yōu)化胜嗓。
還是接著以上一篇筆記中的“test_token”項目為例:
1高职、郵件通知問題
(1)問題
這里的主要問題是針對郵件中的附件(即測試報告),在前一篇配置郵件通知的文章辞州,我對于附件的配置是這么說的:
如果你能夠多觸發(fā)幾次構建就會發(fā)現問題怔锌,隨著構建次數越來越多,產生的測試報告也越來越多,即.html文件會越來越多埃元,而每次構建的郵件通知都會把所有的.html文件添加到附件涝涤,這樣用戶收到的自動化測試郵件里面,不僅能看到本次構建的測試報告岛杀,還可以看到之前所有構建的測試報告阔拳,體驗非常不好。
(2)解決思路
在每次構建前刪除掉上次構建產生的測試報告文件类嗤,使得添加附件時糊肠,只能在html文件夾中搜索到本次構建的測試報告。
(3)解決方案
方案一:
job->配置->構建->增加構建步驟
在Invoke Ant構建前土浸,我們添加一個構建步驟“Execute shell”
增加了一個新的構建步驟罪针,在構建ant任務之前彭羹,先在服務器上執(zhí)行一段shell黄伊,功能是刪除測試報告文件夾下所有的測試報告文件即可。shell腳本如下:
rm -f /var/lib/jenkins/workspace/test_token/html/*.html
rm -f /var/lib/jenkins/workspace/test_token/jtl/*.jtl
看一下構建日志發(fā)現shell腳本被成功執(zhí)行:
方案二
job->配置->構建環(huán)境->Delete workspace before build starts
構建環(huán)境我勾選了"Delete workspace before build starts"派殷,在具體解釋這一步配置之前还最,我先說一下workspace在目前這個平臺中起到什么作用:
首先,我們在jenkins每創(chuàng)建一個新的job毡惜,系統就會在jenkins的安裝目錄下的workspace文件夾下創(chuàng)建一個以job name命名的文件夾拓轻;
接著,由于郵件通知添加附件的問題经伙,我們手動把測試報告的輸出位置移動到這個job name命名的文件夾下面扶叉,也就是經常提到的html文件夾的位置;
希望下面兩張圖能夠加深對他的理解:
圖一:workspace的目錄樹結構
圖二:test_token項目下的工作空間目錄
我們可以使用ANT語法指定一種模式來篩選出要被刪除的文件:
(1)下拉選擇框有兩種模式Include和Exclude
Include模式:如果文件匹配語法要求刪選條件帕膜,則文件會被移除
Exclude模式:如果文件匹配語法要求刪選條件,則文件不會被移除
(2)規(guī)則只適用于文件,如果你想要適用于文件夾巨税,請勾選Apply pattern also on directories參數
我這里填寫的規(guī)則意思是鸵隧,在workspace目錄下的本項目中,篩選出所有以.html為后綴的文件并移除他們荒典。
關于這個功能的配置大家還可以參考官方文檔的原文https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin
接下來看一下構建日志檢查構建環(huán)境是否執(zhí)行:
OK酪劫,以上兩種方法都可以解決郵件通知附件的問題,大家可根據實際需要進行選擇寺董。
2覆糟、丟棄舊的構建
每次構建都會保存數據,所以需要定期的清除過期文件遮咖,這時就用到了“丟棄舊的構建”這個功能搪桂。
保持構建的天數:每個構建能保留多少天
保持構建的最大個數:最多保留多少個構建
好了,優(yōu)化部分就到此為止。