Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
伙伴們,用python做接口自動化是不是寫代碼比較繁瑣,而且沒有python代碼基礎的小伙伴根本無從下手對吧!今天我們來學習一下如何使用JMeter工具實現接口自動化測試。
01 安裝
1、安裝JDK,配置java環境變量(安裝過程略)
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復制到ant所在目錄lib子目錄之下,這樣ant運行時才能找到”
org.programmerplanet.ant.taskdefs.jmeter.JMeterTask”這個類,從而成功觸發JMeter腳本。
3.2、配置環境變量
添加環境變量(以windows為例)
ANT_HOME F:\apache-Ant
CLASSPATH %ANT_HOME%\lib
Path %ANT_HOME%\bin
3.3、驗證安裝結果,命令行輸入ant -version,出現版本信息則安裝成功
2 ANT與Jmeter
4.配置ANT與Jmeter的配置文件
4.1.1、配置ANT配置ant編譯文件build.xml
拷貝下面的內容與新建的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文件,按照實際的文件路徑配置好
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、準備測試腳本數據
新建文件夾pc,pc文件夾分別新建buildfile ,resultlog,script 三個文件夾,buildfile文件夾放入build.xml文件,resultlog里分別新建html,jtl文件夾。
注:Resultlog
Html文件夾裝的是ant 轉化后的結果
Jtl文件裝的是meter生成的結果
Script:Jmeter執行的腳本
3 測試報告
5、打開命令行進行build.xml文件所在的目錄,輸入ant即可生成報告,報告存放在html文件夾里
生成的測試報告如下
6、測試報告優化
用jmeter自帶的測試報告得到的測試報告信息并不是很全,這里參考網上的方法,做一個優化
6.1.1、下載優化模板jmeter-results-shanhe-me.xsl,拷貝到jmeter的extras目錄中,如C:\apache-jmeter-2.12\extras
6.2.2、設置測試輸出報告要輸出的內容,同樣在jmeter.properties中,設置需要輸出的內容為true,并去掉前面的注釋符號#,這里全部設置成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、設置build文件的報告模板為優化后的模板jmeter-results-shanhe-me.xsl
6.2.4、按前面的方式再次用ant構建測試,查看優化后的測試報告
之前在LS公司時,產品有多端,要走完一個完整的業務流程,手動測試造數據,總時很麻煩;
但是UI測試又不是那么的穩定,維護起來效果也不太好;
所以呢,通過jmeter接口實現業務流程的自動化了,但是CRM并沒有前后端分離,那怎么通過接口來實現呢,當時的處理方法,就是通過jmeter自身的代理,抓包后,處理下相應參數來銜接周邊系統;
當然,因為要跨端,有些接口headers里面的Content-Type是不一樣的,這樣的話,就要用多線程了,而且前后順序也是有規定的。
今天要分享的就是,抓包的接口返回的結果是html時,怎么來截取自己想要的內容
通過抓包的方式,抓過來的接口,有些返回結果是html的;一般簡單的,可以用jmeter自帶的正則表達式匹配出來;但是有些復雜的,甚至要同時取到返回結果的多個值時,貌似就有點力不從心了。
還好jmeter提供了可以編寫java代碼的beanshell,可以通過后置處理器(BeanShell PostProcessor)來處理,當時用到的代碼如下:
四月份趕上跳槽高峰期,面試中,接口測試部分的關聯是經常被提及的知識點之一,經常有同學因此錯失良機,“關聯”可謂是重中之重了,今天就寫一篇關于Jmeter關聯的文章,以作備忘。
所謂關聯,通俗的講,就是一個請求響應的結果作為另一個請求提交的參數, 在接口測試中,當測試一套完整的業務邏輯時,頻繁的需要使用關聯。
比如電子商城的購物車模塊,需要測試購物車商品的刪除實現,首先,訪問購物車接口,獲取所有的購物信息,然后再取出某一條購物信息的 id,再訪問刪除接口。
那么,Jmeter 中的關聯是如何實現的呢?Jmeter 中的關聯實現策略不止一種,接下來,我們就通過一個案例給大家演示關聯實現的相關組件。
需求:兩個http請求,請求A訪問傳智播客官網,請求B訪問百度 ,請求A將傳智播客官網源碼中的 title 標簽的值取出,傳遞給請求B,在請求B中作為關鍵字搜索這個 title 值。
上述需求實現,大致需要三步:
1、搭建測試計劃框架,設計取樣器以及結果樹;
2、將請求 A 中的結果使用 Jmeter 關聯組件進行提取;
3、將步驟2中提取的結果傳遞給請求B,執行并查看結果。
接下來,我們就看一下具體實現:
搭建測試計劃框架,設計取樣器以及結果樹
這一步應該屬于 Jmeter 的最基本實現,在此就不在贅述了。
將請求 A 中的結果使用 Jmeter 關聯組件進行提取
執行該步驟時,我們選用了 Jmeter 的內置組件: XPath 提取器, 該提取器是在對標簽語言執行結果提取時的常見組件實現。
首先,我們需在在被提取的取樣器上添加該提取器:
然后,設置提取器的相關屬性(注意:從 html 文檔提取數據,一定要勾選 use tidy)。
最后,提取器執行時,提取的結果將被賦值給組件中聲明的變量(也即引用名稱 myTitle)。
將步驟2中提取的結果傳遞給請求B,執行并查看結果
A中可以提取到傳智播客官網的 title 標簽的值,在請求B 中,直接以QueryString的方式提交數據,然后執行,即可查詢到相關結果了。
總結
Jmeter 中XPath 關聯實現,總需三步:
1.搭建測試計劃框架,編寫取樣器,添加查看結果樹;
2.添加XPath 提取器按照 XPath 表達式提取數據(提取的數據被保存進了變量);
3.在需要調用數據的請求中以 ${變量名} 的方式調用提取到的結果。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。