一、前言
?? ?? 2017年中旬帆吻,有幸接手了公司新產(chǎn)品的測試普泡,領(lǐng)導通知說該項目需要進行功能測試播掷、性能測試和接口測試,頓時壓力倍增(于是我把壓力(鴨梨)放在了冰箱里撼班,就變成了動力(凍梨))歧匈,此前對性能測試一無所知,了解程度只能用“聽過”來形容砰嘁。
?????? 性能測試首選的工具是JMeter件炉,在此不多做介紹,但是不得不說JMeter也是一款非常好的接口測試工具矮湘。性能測試過程中手工重復的活動非常多斟冕,為了給客戶提供一個性能測試報告,我用了一周時間進行并發(fā)測試缅阳、數(shù)據(jù)整理磕蛇、數(shù)據(jù)分析、最后生成測試報告券时,真的是手工重復到懷疑人生孤里;于是萌生了實現(xiàn)性能測試自動化的想法伏伯。之前用Robot framework框架做過WEB自動化橘洞、安卓端自動化、接口自動化说搅,但是始終未正真明白自動化的意義或是價值炸枣,現(xiàn)在突然頓悟,測試工作中最大的痛點就是重復弄唧,減少工作中的痛點才是自動化最大的價值适肠。所以自動化的第一步不是選用什么語言或是框架,而是能真正分析出自己工作中的痛點候引。
二侯养、性能測試范圍
????? 簡言之,性能測試的目的就是分析性能瓶頸和調(diào)優(yōu),可是如何分析性能瓶頸澄干?性能測試過程中應該關(guān)注那些指標逛揩?這些問題都是在我性能測試學習過程中比較迷茫的問題柠傍,于是按照自己的理解,整理了性能測試的主要范圍辩稽,詳見下圖:
?
??? 實際項目過程中惧笛,我主要是做接口性能測試,因此主要關(guān)注的是系統(tǒng)指標和服務(wù)端資源占用率逞泄。
三患整、性能測試過程
性能測試可以過程可以簡單的分為四個步驟,如下圖:
????? 性能測試的實際過程中遇到了兩個難點:“明確性能指標”和“結(jié)果分析調(diào)優(yōu)”喷众;前者的難點在于沒有人可以給我提供性能指標各谚,性能良好的指標是什么?怎樣的并發(fā)數(shù)到千、吞吐率或是響應時間符合性能預期標準嘲碧?一切都是未知數(shù),感覺自己在摸石頭過河父阻。后者的難點不言而喻愈涩,也是整個性能測試的難點。性能分析的目的在于分析出系統(tǒng)的性能瓶頸加矛,性能調(diào)優(yōu)的目的則是使系統(tǒng)可以具備高可用性履婉、高可靠性和高并發(fā)性。
?????? 同樣斟览,在性能測試過程中也遇到了兩個痛點:“運行測試腳本”和“生成測試報告”毁腿;前者主要是測試場景復雜,需要不斷的重復運行腳本苛茂,后者是需要手工整理數(shù)據(jù)已烤、分析測試結(jié)果然后生成測試報告。前文中有提及到“自動化最大的價值就是減少工作中的痛點”妓羊,經(jīng)常重復運行腳本是否可以批量執(zhí)行胯究?測試報告是否可以自動生成?因此針對這兩個痛點躁绸,如何實現(xiàn)自動化將在下文解析裕循。
四、自動化框架介紹
JMeter+Ant是比較常見的自動化測試框架净刮,由于JMeter剥哑、Ant都是由java開發(fā)的,所以此性能測試框架具有良好的跨平臺性淹父;下圖是按自己的理解繪制的自動化框架圖:
大體邏輯如下:
(1)Ant通過XML文件進行構(gòu)建株婴,所有的構(gòu)建信息配置在build.xml文件中,通過調(diào)用target樹來執(zhí)行各種任務(wù)暑认;因此困介,性能測試過程中揪垄,可以按照不同的測試場景,設(shè)計測試腳本逻翁,然后通過Ant進行構(gòu)建饥努,實現(xiàn)批量執(zhí)行。
(2)Ant通過測試結(jié)果(jtl文件)構(gòu)建生成html測試報告八回,并且輸出在指定路徑下酷愧;這一步即可解決第二個痛點“手工整理性能測試報告”。
(3)根據(jù)build.xml文件中配置的郵件信息缠诅,將html測試報告自動發(fā)送到指定的郵箱溶浴;
五、環(huán)境搭建
Java安裝
1管引、Java下載地址:https://www.java.com/zh_CN/
2士败、Java 環(huán)境變量配置
(1)設(shè)置路徑:我的電腦—>屬性—>高級—>環(huán)境變量;
(2)在【系統(tǒng)變量】新增JAVA_HOME褥伴,變量為JDK的路徑谅将;
(3)PATH中添加 C:\Program Files\Java\jdk1.8.0_05\bin;
3重慢、檢驗是否配置成功
(1)cmd進入命令行饥臂,輸入:java -version,顯示出java 的版本信息即配置成功似踱;
JMeter安裝
1隅熙、JMeter下載地址:http://jmeter.apache.org/download_jmeter.cgi
2、JMeter 環(huán)境變量配置
(1)設(shè)置路徑:我的電腦—>屬性—>高級—>環(huán)境變量:
(2)在【系統(tǒng)變量】新增JMETER_HOME核芽,變量為jmeter的路徑
(3)PATH中添加%JMETER_HOME%\bin;
3囚戚、檢驗是否配置成功
(1)cmd進入命令行,輸入:jmeter -v轧简,顯示出JMETER的版本信息即配置成功驰坊;
Ant安裝
1、Ant下載地址:http://ant.apache.org/bindownload.cgi
2吉懊、Ant 環(huán)境變量配置
(1) 設(shè)置路徑:我的電腦—>屬性—>高級—>環(huán)境變量:
(2)在【系統(tǒng)變量】新增ANT_HOME庐橙,變量為ANT的路徑
(3)PATH中添加 D:\apache-ant-1.9.9\bin;
3、檢驗是否配置成功
(1)cmd進入命令行輸入:ant -version借嗽,顯示出Ant的版本信息即配置成功;
六转培、構(gòu)建步驟
1恶导、測試準備
(1)JMeter腳本按測試計劃選中進行保存,如果按線程進行保存浸须,構(gòu)建時會報錯惨寿,后面問題匯總模塊會提到邦泄,例如保存為TestPlan.jmx。
(2)新增構(gòu)建文件的文件夾裂垦,例如在D盤根目錄下新增文件夾“JMeterTest”顺囊,里面再新增以下文件夾
(3)修改配置文件:jmeter.properties
文件路徑:%JMETER_HOME%\bin\jmeter.properties
將jmeter.save.saveservice.output_format=csv改為
jmeter.save.saveservice.output_format=xml,去掉前面?zhèn)渥⒌?號蕉拢。
2特碳、Ant構(gòu)建
????? Ant是用xml格式來進行構(gòu)建的,默認文件名稱為build晕换。構(gòu)建文件的默認地址為%JMETER_HOME%\extras\build.xml午乓,但是為了構(gòu)建方便,我們將xml文件放在我們自己目錄下闸准,并且根據(jù)自己的需要自定義構(gòu)建內(nèi)容益愈。
(1)在新增目錄D:\JMeterTest\XML下新增build.xml,ant來定義測試活動夷家,具體的內(nèi)容都在build.xml中進行配置蒸其。
(2)build.xml中構(gòu)建活動定義完成后,cmd進入命令行库快,進入build.xml的目錄下輸入ant枣接,回車執(zhí)行,如下圖提示BUILD SUCCESSFUL即可成功缺谴。
(3)本地目錄下 D:\JMeterTest\HTML但惶,可查看到測試報告;查收郵件湿蛔,附件也收到了HTML測試報告膀曾,如下截圖:
(4)本地目錄下 D:\JMeterTest\JTL,可看的生成的測試結(jié)果文件阳啥,可用Jmeter聚合報告的預覽進行查看添谊,見截圖:
截止目前,我們已經(jīng)基本實現(xiàn)了接口測試自動化察迟,如果要實現(xiàn)性能測試自動化斩狱,還要對生成測試報告模板的代碼進行優(yōu)化。
七扎瓶、報告優(yōu)化
1所踊、報告增加性能指標
JMeter性能測試中,我們主要會關(guān)注聚合報告中Average time概荷、Throughput秕岛、90% Line等指標,因此我們在測試報告中增加TPS(Throughput)和90% Line等指標,
(1)在build.xml的代碼中可以看出測試報告調(diào)用的模板是%JMETER_HOME%\extras 路徑下的jmeter-results-detail-report_21文件继薛,
(2)因此我們在jmeter-results-detail-report_21文件中進行修改修壕,小編自己修改了很久,但是TPS得值總是不顯示遏考,最后參考了以下博客文章得以解決慈鸠,參考文章https://www.cnblogs.com/jaychang/p/5881525.html在此感謝作者無私的代碼分享。
(3)由于該模板的代碼非常多灌具,優(yōu)化后的模板代碼可以在我的CSDN上進行下載青团;下載地址:http://download.csdn.net/download/okkczf/10233753
2、加接口詳情的報告
該報告的原始模板也可以在網(wǎng)上進行下載稽亏,下載地址:http://blog.csdn.net/luozhuwang/article/details/51889159(感謝作者的分享)
(1)將該模板 jmeter.results.detail.me.xls 放在%JMETER_HOME%\extras路徑下壶冒;
(2)要想調(diào)用該模板輸出測試報告需要在build.xml文件中增加以下代碼,我用reportdetail定義該測試活動截歉;
(3)cmd進入命令行胖腾,進入build.xml的目錄下輸入ant,回車執(zhí)行后瘪松,郵件即可收到兩個HTML附件咸作,第一個附件為測試報告,第二個附件即為增加的接口測試詳情宵睦;
接口測試詳情如下截圖:
以上代碼也可以在我的CSDN上下載:
http://download.csdn.net/download/okkczf/10220295
八记罚、遇到問題
本文為JMeter+Ant實現(xiàn)性能測試自動化過程所有遇到的問題的整理匯總
(1)ant構(gòu)建遇到問題:1字節(jié)的UTF-8序列的字節(jié)1無效;
解決方法:build.xml中UTF-8改為UTF8壳嚎;
(2)ant構(gòu)建遇到問題:運行ant 報錯Could not find the TestPlan class桐智!
解決辦法:運行的jmeter腳本 TestPlan.jmx要測試計劃層做保存,而不是在threads層做保存烟馅。
(3)ant構(gòu)建時遇到如下報錯:
解決辦法:下載mail-1.4.7.jar说庭,放在 D:\apache-ant-1.9.9\lib 目錄下
(4)生成報告存在的問題:
生成的報告中Min time 和Max time的時間顯示為NaN,Date report: date not defined 郑趁,如下截圖:
解決辦法:
(1)將apache-jmeter-3.2\lib中的serializer-2.7.2.jar刊驴、xalan-2.7.2.jar復制到apache-ant-1.9.9\lib中即可解決問題(1);
(2)build.xml代碼中增加以下內(nèi)容
注意事項:變量${time}在代碼中的定義 寡润,如果兩處名稱不一致則構(gòu)建失斃υ鳌;
????? 截止目前梭纹,Jmeter+Ant的性能自動化框架已經(jīng)搭建完成躲惰,如果需要你也可以使用Jenkins集成,本文中暫不介紹Jenkins的配置栗柒。文章依然存在很多的不足礁扮,沐沐會繼續(xù)努力爭取以后分享更多有價值的干貨知举。古人云“The more we share, ??the more we have”瞬沦,將分享進行到底...