伙伴們,用python做接口自動化是不是寫代碼比較繁瑣,而且沒有python代碼基礎(chǔ)的小伙伴根本無從下手對吧!今天我們來學(xué)習(xí)一下如何使用JMeter工具實(shí)現(xiàn)接口自動化測試。
01 安裝
1、安裝JDK,配置java環(huán)境變量(安裝過程略)
2、安裝Jmeter(安裝過程略)
3、安裝ANT
3.1、下載安裝
下載地址:http://ant.apache.org/bindownload.cgi
3.1.1、下載后解壓到指定位置即可,比如:F:\apache-Ant
3.1.2、將jmeter所在的目錄下extras子目錄里的ant-jmeter-1.1.1.jar復(fù)制到ant所在目錄lib子目錄之下,這樣ant運(yùn)行時才能找到”
org.programmerplanet.ant.taskdefs.jmeter.JMeterTask”這個類,從而成功觸發(fā)JMeter腳本。
3.2、配置環(huán)境變量
添加環(huán)境變量(以windows為例)
ANT_HOME F:\apache-Ant
CLASSPATH %ANT_HOME%\lib
Path %ANT_HOME%\bin
3.3、驗(yàn)證安裝結(jié)果,命令行輸入ant -version,出現(xiàn)版本信息則安裝成功
2 ANT與Jmeter
4.配置ANT與Jmeter的配置文件
4.1.1、配置ANT配置ant編譯文件build.xml
拷貝下面的內(nèi)容與新建的txt文件中,并將此文件改名為:build.xml
<?xml version="1.0" encoding="utf-8"?><project name="pc" default="all" basedir="F:\apache-jmeter-5.0\jmeterAutoTest">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property name="jmeter.home" value="F:\apache-jmeter-5.0" />
<property name="jmeter.result.jtl.dir" value="F:\apache-jmeter-5.0\jmeterAutoTest\pc\resultlog\jtl" />
<property name="jmeter.result.html.dir" value="F:\apache-jmeter-5.0\jmeterAutoTest\pc\resultlog\html" />
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${test}${time}.jtl" />
<property name="mail_from" value="xx@163.com" />
<property name="mail_to" value="xx@qq.com" />
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="send" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<testplans dir="F:\apache-jmeter-5.0\jmeterAutoTest\pc\script" />
</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">
<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="${time}"/>
</xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target></project>
4.1.2、修改build.xml文件,按照實(shí)際的文件路徑配置好
4.1.3 、配置jmeter.properties
配置jmeter報告輸出格式為xml,在jmeter/bin目錄下jmeter.properties文件中修改jmeter.save.saveservice.output_format=csv為jmeter.save.saveservice.output_format=xml,并去掉前面的注釋符號#
4.1.4、準(zhǔn)備測試腳本數(shù)據(jù)
新建文件夾pc,pc文件夾分別新建buildfile ,resultlog,script 三個文件夾,buildfile文件夾放入build.xml文件,resultlog里分別新建html,jtl文件夾。
注:Resultlog
Html文件夾裝的是ant 轉(zhuǎn)化后的結(jié)果
Jtl文件裝的是meter生成的結(jié)果
Script:Jmeter執(zhí)行的腳本
3 測試報告
5、打開命令行進(jìn)行build.xml文件所在的目錄,輸入ant即可生成報告,報告存放在html文件夾里
生成的測試報告如下
6、測試報告優(yōu)化
用jmeter自帶的測試報告得到的測試報告信息并不是很全,這里參考網(wǎng)上的方法,做一個優(yōu)化
6.1.1、下載優(yōu)化模板jmeter-results-shanhe-me.xsl,拷貝到j(luò)meter的extras目錄中,如C:\apache-jmeter-2.12\extras
6.2.2、設(shè)置測試輸出報告要輸出的內(nèi)容,同樣在jmeter.properties中,設(shè)置需要輸出的內(nèi)容為true,并去掉前面的注釋符號#,這里全部設(shè)置成true
修改前:
修改后:
jmeter.save.saveservice.data_type=truejmeter.save.saveservice.label=truejmeter.save.saveservice.response_code=true# response_data is not currently supported for CSV outputjmeter.save.saveservice.response_data=true# Save ResponseData for failed samplesjmeter.save.saveservice.response_data.on_error=falsejmeter.save.saveservice.response_message=truejmeter.save.saveservice.successful=truejmeter.save.saveservice.thread_name=truejmeter.save.saveservice.time=truejmeter.save.saveservice.subresults=truejmeter.save.saveservice.assertions=truejmeter.save.saveservice.latency=true# Only available with HttpClient4#jmeter.save.saveservice.connect_time=truejmeter.save.saveservice.samplerData=truejmeter.save.saveservice.responseHeaders=truejmeter.save.saveservice.requestHeaders=truejmeter.save.saveservice.encoding=truejmeter.save.saveservice.bytes=true# Only available with HttpClient4
#jmeter.save.saveservice.sent_bytes=truejmeter.save.saveservice.url=truejmeter.save.saveservice.filename=truejmeter.save.saveservice.hostname=truejmeter.save.saveservice.thread_counts=truejmeter.save.saveservice.sample_count=falsejmeter.save.saveservice.idle_time=true
6.2.3、設(shè)置build文件的報告模板為優(yōu)化后的模板jmeter-results-shanhe-me.xsl
6.2.4、按前面的方式再次用ant構(gòu)建測試,查看優(yōu)化后的測試報告
之前在LS公司時,產(chǎn)品有多端,要走完一個完整的業(yè)務(wù)流程,手動測試造數(shù)據(jù),總時很麻煩;
但是UI測試又不是那么的穩(wěn)定,維護(hù)起來效果也不太好;
所以呢,通過jmeter接口實(shí)現(xiàn)業(yè)務(wù)流程的自動化了,但是CRM并沒有前后端分離,那怎么通過接口來實(shí)現(xiàn)呢,當(dāng)時的處理方法,就是通過jmeter自身的代理,抓包后,處理下相應(yīng)參數(shù)來銜接周邊系統(tǒng);
當(dāng)然,因?yàn)橐缍?,有些接口headers里面的Content-Type是不一樣的,這樣的話,就要用多線程了,而且前后順序也是有規(guī)定的。
今天要分享的就是,抓包的接口返回的結(jié)果是html時,怎么來截取自己想要的內(nèi)容
通過抓包的方式,抓過來的接口,有些返回結(jié)果是html的;一般簡單的,可以用jmeter自帶的正則表達(dá)式匹配出來;但是有些復(fù)雜的,甚至要同時取到返回結(jié)果的多個值時,貌似就有點(diǎn)力不從心了。
還好jmeter提供了可以編寫java代碼的beanshell,可以通過后置處理器(BeanShell PostProcessor)來處理,當(dāng)時用到的代碼如下:
四月份趕上跳槽高峰期,面試中,接口測試部分的關(guān)聯(lián)是經(jīng)常被提及的知識點(diǎn)之一,經(jīng)常有同學(xué)因此錯失良機(jī),“關(guān)聯(lián)”可謂是重中之重了,今天就寫一篇關(guān)于Jmeter關(guān)聯(lián)的文章,以作備忘。
所謂關(guān)聯(lián),通俗的講,就是一個請求響應(yīng)的結(jié)果作為另一個請求提交的參數(shù), 在接口測試中,當(dāng)測試一套完整的業(yè)務(wù)邏輯時,頻繁的需要使用關(guān)聯(lián)。
比如電子商城的購物車模塊,需要測試購物車商品的刪除實(shí)現(xiàn),首先,訪問購物車接口,獲取所有的購物信息,然后再取出某一條購物信息的 id,再訪問刪除接口。
那么,Jmeter 中的關(guān)聯(lián)是如何實(shí)現(xiàn)的呢?Jmeter 中的關(guān)聯(lián)實(shí)現(xiàn)策略不止一種,接下來,我們就通過一個案例給大家演示關(guān)聯(lián)實(shí)現(xiàn)的相關(guān)組件。
需求:兩個http請求,請求A訪問傳智播客官網(wǎng),請求B訪問百度 ,請求A將傳智播客官網(wǎng)源碼中的 title 標(biāo)簽的值取出,傳遞給請求B,在請求B中作為關(guān)鍵字搜索這個 title 值。
上述需求實(shí)現(xiàn),大致需要三步:
1、搭建測試計劃框架,設(shè)計取樣器以及結(jié)果樹;
2、將請求 A 中的結(jié)果使用 Jmeter 關(guān)聯(lián)組件進(jìn)行提??;
3、將步驟2中提取的結(jié)果傳遞給請求B,執(zhí)行并查看結(jié)果。
接下來,我們就看一下具體實(shí)現(xiàn):
搭建測試計劃框架,設(shè)計取樣器以及結(jié)果樹
這一步應(yīng)該屬于 Jmeter 的最基本實(shí)現(xiàn),在此就不在贅述了。
將請求 A 中的結(jié)果使用 Jmeter 關(guān)聯(lián)組件進(jìn)行提取
執(zhí)行該步驟時,我們選用了 Jmeter 的內(nèi)置組件: XPath 提取器, 該提取器是在對標(biāo)簽語言執(zhí)行結(jié)果提取時的常見組件實(shí)現(xiàn)。
首先,我們需在在被提取的取樣器上添加該提取器:
然后,設(shè)置提取器的相關(guān)屬性(注意:從 html 文檔提取數(shù)據(jù),一定要勾選 use tidy)。
最后,提取器執(zhí)行時,提取的結(jié)果將被賦值給組件中聲明的變量(也即引用名稱 myTitle)。
將步驟2中提取的結(jié)果傳遞給請求B,執(zhí)行并查看結(jié)果
A中可以提取到傳智播客官網(wǎng)的 title 標(biāo)簽的值,在請求B 中,直接以QueryString的方式提交數(shù)據(jù),然后執(zhí)行,即可查詢到相關(guān)結(jié)果了。
總結(jié)
Jmeter 中XPath 關(guān)聯(lián)實(shí)現(xiàn),總需三步:
1.搭建測試計劃框架,編寫取樣器,添加查看結(jié)果樹;
2.添加XPath 提取器按照 XPath 表達(dá)式提取數(shù)據(jù)(提取的數(shù)據(jù)被保存進(jìn)了變量);
3.在需要調(diào)用數(shù)據(jù)的請求中以 ${變量名} 的方式調(diào)用提取到的結(jié)果。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。