一淑倾、平臺(tái)簡介
一個(gè)完整的接口自動(dòng)化測試平臺(tái)需要支持接口的自動(dòng)執(zhí)行,自動(dòng)生成測試報(bào)告公你,以及持續(xù)集成踊淳。 Jmeter 支持接口的
測試, Ant 支持自動(dòng)構(gòu)建陕靠,而 Jenkins 支持持續(xù)集成迂尝,所以三者組合在一起可以構(gòu)成一個(gè)功能完善的接口自動(dòng)化測試平臺(tái)。
二剪芥、環(huán)境準(zhǔn)備
- JDK 環(huán)境配置
自行百度
- Jmeter 安裝 Jmeter下載安裝垄开,插件使用,mave,git,tomcat環(huán)境變量配置
百度網(wǎng)盤下載
鏈接:https://pan.baidu.com/s/1bpM0XOGKoYCysVNvU4_ikg
提取碼:3xr5
復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App税肪,操作更方便哦 - Ant 安裝環(huán)境變量配置 Ant的安裝與配置
- Jenkins 安裝 jinkens本地安裝部署,jenkins配置(一)
jenkins插件
1 .下載插件: Manage Jenkins--- Manage Plugins---高級(jí) ---可選插件 搜索 ant
下載安裝
-
我這里是我已經(jīng)安裝好了
image.png
2. 全局配置 ant的目錄
- Manage Jenkins--Global Tool Configuration--搜 ant
三溉躲、平臺(tái)搭建
依賴文件配置
1. 首先在 Jmeter bin目錄下面新建一個(gè)文件夾 testcase (文件夾名稱不要使用下劃線,空格字符),并將 Jemter 測試腳本放置到該文件夾中
益兄。
2. 將 Jmeter extras 文件中的 ant-jmeter-1.1.1.jar 放到 Ant 中的 lib 文件夾中
3. 將 Jmeter extras 文件中的 build.xml 放到 第一步testcase下面锻梳。
上面的build.xml用下面百度網(wǎng)盤下載的,內(nèi)容比較豐富點(diǎn)
鏈接:https://pan.baidu.com/s/1chMgBy2dbmR5JjahF4cNSw
提取碼:p7mi
復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App净捅,操作更方便哦
4. jmeter.properties 修改 jmeter.save.saveservice.output_format=csv 成 jmeter.save.saveservice.output_format=xml
(修改原因: jmeter執(zhí)行結(jié)果文件默認(rèn)保存的是csv格式疑枯,不是xml格式,csv無法轉(zhuǎn)化成html格式)
5 配置 D:\software\JMETER4.0\apache-jmeter-4.0\bin\testcase目錄下的文件
build文件解析
創(chuàng)建工程 構(gòu)建處 可以寫上需要執(zhí)行的命令
mail解析
- qq郵箱的 mailport 要設(shè)置為25蛔六,我設(shè)置465一直報(bào)錯(cuò)荆永。
完整XML 代碼
<?xml version="1.0" encoding="UTF-8"?>
<project name="接口性能監(jiān)控" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property name="encoding" value="UTF-8" />
<!-- 需要改成自己本地的 Jmeter 目錄-->
<property name="jmeter.home" value="D:\software\JMETER4.0\apache-jmeter-4.0" />
<property name="report.title" value="阿登接口性能測試"/>
<!-- jmeter生成jtl格式的結(jié)果報(bào)告的路徑-->
<property name="jmeter.result.jtl.dir" value="${jmeter.home}/bin/testcase/report/jtl" />
<!-- jmeter生成html格式的結(jié)果報(bào)告的路徑-->
<property name="jmeter.result.html.dir" value="${jmeter.home}/bin/testcase/report/html" />
<!-- 生成的報(bào)告的前綴-->
<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" />
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="mail" />
</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腳本-->
<testplans dir="${jmeter.home}/bin/testcase" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<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-detail-report_21.xsl">
<param name="showData" expression="${show-data}"/>
<param name="dateReport" expression="${report.datestamp}"/>
<param name="titleReport" expression="${report.title}:${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>
<property name="mail_from" value="1774080833@qq.com" />
<property name="password" value="owfcgrvbddgpebfi" />
<!--mail_to:發(fā)送列表,多個(gè)之間逗號(hào)間隔 -->
<property name="mail_to" value="330524840@qq.com,1774080833@qq.com" />
<property name="mailport" value="25" />
<!--郵箱需要開通smtp服務(wù)-->
<property name="mailhost" value="smtp.qq.com" />
<target name="mail">
<loadfile property="report" srcFile="${jmeter.result.htmlName}" encoding="${encoding}" />
<mail from="${mail_from}" tolist="${mail_to}" mailport="${mailport}" mailhost="${mailhost}" user="${mail_from}" password="${password}" subject="TestReport-${ant.project.name}" messagemimetype="text/html">
<message>
本輪構(gòu)建的結(jié)果如下:
${report}
</message>
</mail>
<delete file="${jmeter.result.htmlName}" />
</target>
</project>
測試一下
cd 到j(luò)meter bin目錄的testcase下面 運(yùn)行 ant命名
--會(huì)在report下面 html和jtl 生成報(bào)告
四豆村、 使用Jenkins構(gòu)建自動(dòng)化平臺(tái)
1.打開Jenkins,新建job骂删,選擇“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”:
2. 安裝插件: 進(jìn)入系統(tǒng)管理- 管理插件- 可選插件掌动,安裝 Performance plugin、HTML Publisher plugin桃漾、Ant Plugin
比如:
3. 配置過程
1) 源碼管理坏匪,沒有通過GIT或者SVN管理,所以選擇“無”:
2) 構(gòu)建撬统,點(diǎn)擊【增加構(gòu)建步驟】按鈕,選擇“invoke Ant”敦迄,用來執(zhí)行Ant:
3)配置invoke Ant參數(shù)恋追,其中Build File填寫build.xml文件路徑
4)在構(gòu)建后的操作中,點(diǎn)擊【增加構(gòu)建后操作步驟】罚屋,Publish HTML report 和 Publish Performance test result report
- 配置“Publish html reports”苦囱,其中HTML directory to archive填寫html報(bào)告保存路徑:
- 配置“Publish Performance test result report”,其中Source data files填寫jtl格式報(bào)告的保存路徑:
7) 也可以添加構(gòu)建觸發(fā)器
鏈接:https://pan.baidu.com/s/1pnGteA3HlERVXeS-CkDskA
提取碼:mii2
踩坑處理
-
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
image.png
解決辦法:下載4個(gè)插件的jar包 放在ant lib下面脾猛,可在下面網(wǎng)盤下載撕彤。
下面是百度網(wǎng)盤下載jar包地址
鏈接:https://pan.baidu.com/s/11Msl5jeNOFLsPEVfXDcECg
提取碼:a78i
2.Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1
解決: 端口設(shè)置成 25
報(bào)告優(yōu)化 釋放洪荒之力
進(jìn)入 Jmeter 的 bin 目錄,找到 jmeter.properties 文件打開猛拴。然后將以下代碼取消注釋狀態(tài)羹铅,并改為 true
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=true
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
# Only available with HttpClient4
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=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_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
最后執(zhí)行即可生成最新的報(bào)告:樣式如下,可以清晰看到每一個(gè)請求發(fā)送愉昆,響應(yīng)內(nèi)容.
cd 到j(luò)meter bin目錄的testcase下面 運(yùn)行 ant命名--會(huì)在report下面 html和jtl 生成報(bào)告