在上一篇文章中,我們已經學會了如何進行接口自動化框架的搭建,自動化測試的工作也能夠順利開展起來了,但是呢,在實際項目中使用起來,還是缺少了一些東西,體驗不太好,比如:
1、為了方便管理,多個項目的腳本存放在不同的目錄下面,這時候要執行所有的自動化用例怎么辦?
2、往往我們需要一個概要的測試報告來關心整體的自動化測試情況,還需要一個詳情的測試報告來定位自動化測試失敗的原因,這時候怎么生成兩種不同類型得測試報告?
3、怎么把上面的測試報告集成到Jenkins中,方便查看每次構建的結果?
4、隨著自動化次數的執行,大家會發現測試報告目錄里面的文件越來越多、越來越大,那么怎么保證每次都是最新的測試報告結果呢?
這篇文章就來為大家一 一解決這些疑問
一、執行多個目錄下的自動化用例
進入Jmeter下的build目錄,修改build.xml文件,找到下面的代碼行
<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="D:\apache-jmeter-5.1.1\script_smoke" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
假如還有腳本存放在"D:\apache-jmeter-5.1.1\script_project"下面,那么在以上代碼中再添加一行需要執行腳本的地址即可
<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="D:\apache-jmeter-5.1.1\script_smoke" includes="*.jmx" />
<testplans dir="D:\apache-jmeter-5.1.1\script_project" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
二、測試概要報告和詳情報告配置
先上兩張圖片,讓我們直觀的感受下概要報告和詳情報告的區別
從上面兩張圖可以看出,概要報告可以很快速的看出所有自動化測試用例的執行情況,詳細報告可以很清晰的描述接口的請求地址、請求參數、響應參數等信息,在用例執行失敗的時候,可以很方便的定位問題
接下來我們看下怎么配置才能生成這兩種不同類型的測試報告
1、首先進入Jmeter的安裝目錄,在extras目錄下面找下是否存在jmeter-results-detail-report_21.xsl這個文件
如果沒有這個文件,在網上下載一個放在extras目錄即可
2、進入Jmeter下的build目錄,修改build.xml文件,找到下面的代碼
<!-- 生成的報告的前綴-->
<property name="ReportName" value="SmokeReport" />
<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="detail" value="_detail" />
<property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />
3、繼續在build.xml文件中找到下面的代碼,添加一個報告標簽
<target name="report">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlNamedetail}"
out="${jmeter.result.htmlNamedetail}"
style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
在上面這行代碼下面,添加"詳細報告"的標簽內容,如下
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
添加后的效果如下圖所示
4、"詳細報告"的標簽添加完成后,繼續將目錄切換到Jmeter的bin目錄下,打開jmeter.properties文件,將以下屬性全部放開并修改如下
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
jmeter.save.saveservice.response_data=true
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=false
jmeter.save.saveservice.responseHeaders=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.encoding=false
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=false
jmeter.save.saveservice.hostname=false
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=false
jmeter.save.saveservice.idle_time=true
5、最后,重啟一下Jmeter(在CMD命令行中輸入命令:java -jar jenkins.war),讓之前配置的設置全部生效,這樣,再次執行自動化腳本,就可以生成兩種類型的測試報告了
三、報告集成 Jenkins的配置
OK,到目前為止,我們已經可以成功的生成"概要報告"和"詳細報告"了,那么,怎么讓這兩種報告在Jenkins上體現出來,我們接下來繼續操作
1、要在Jenkins上面查看報告,我們首先需要在Jenkins上安裝這么一個插件-------HTML Publisher plugin,插件的安裝方式這里就不再贅述了,在上一篇文章(不需要寫代碼的自動化測試框架(一))中已經提到,不清楚的,可以去看看之前的文章
2、進入Jenkins,點擊你自己創建的自動化測試工程,選擇Configure(配置)
找到Post-build Actions項,在Add post-build action中選擇Push HTML reports
最后修改下參數值,將報告存放的位置填寫正確
到這里,所有的配置都已完成,我們試著來構建一下我們的自動化工程,構建成功后點擊工程左邊目錄的HTML Report查看報告
生成的報告如下所示,包含了"概要報告"和"詳細報告",大功告成
四、冗余測試報告請理
隨著自動化測試的執行,越來越多的測試報告生成,會產生很多測試垃圾,磁盤空間占用量越來越大,這些都不是我們希望看到的,如圖所示
我們希望能夠每次都看見最新的測試報告,在自動化構建之前,將以往的測試報告刪除,那么按照這個思路,我們來看具體的操作實現方式
1、我這邊會使用python語言來刪除指定目錄下的所有文件,所以,先將刪除文件的腳本寫好,如下
import os
import glob
path=r'D:\apache-jmeter-5.1.1\report_smoke'#測試報告的存放路徑
def delfile(path):
filenames=glob.glob(path+r'\*')
for filename in filenames:
try:
os.remove(filename)
except:
try:
os.rmdir(filename)
except:
defile(filename)
os.rmdir(filename)
delfile(path)
2、進入Jenkins首頁面板,依次點擊Manage Jenkins------->Manage Plugins--------->Avaiable,在搜索框中輸入python,將這個插件安裝好
3、在Jenkins中點擊你自己創建的自動化測試工程,選擇Configure(配置),在構建步驟中增加一個Execute P ython Script,用來執行步驟1中的腳本(這一步一定要特別注意一點:執行python腳本刪除測試報告必須放在構建的第一步,否則后面會出問題,導致構建失敗,因為我們的目的是在構建前刪除測試報告,如果放在ant運行build文件之后,則后面在Jenkins上面集成報告就會因為找不到報告而報錯)
這樣設置完成,點擊保存即可,再次運行自動化腳本,你會發現每次都會產生最新的測試報告