jmeter很早就接觸了,最近又在接觸項目的時候整了一下。寫這篇博客主要有兩個目的css
1,爲了給本身搭建jmeter作一個總結。html
2,在部署過程當中遇到過一些坑,在這分享出來,也但願能給須要的人一個參考。前端
詳細介紹jmeter接口測試環境以前,先簡單介紹下接口測試node
API testing is a type of software testing that involves testing application programming interfaces (APIs) directly and as part of integration testing to determine if they meet expectations for functionality, reliability, performance, and security. Since APIs lack a GUI, API testing is performed at the message layer.[2] API testing is now considered critical for automating testing because APIs now serve as the primary interface to application logic and because GUI tests are difficult to maintain with the short release cycles and frequent changes commonly used with Agile software development and DevOps).mysql
WIKI定義:接口測試做爲集成測試的一部分,經過直接控制API來判斷系統的功能性,可靠性,性能與安全性。API測試是沒有界面的,執行在通信層。API 測試在自動化測試中有着重要的地位,由於API通常是應用邏輯的主要接口,而GUI測試在敏捷開發和DevOps的快速迭代和頻繁變動中很難維護。web
接口測試是測試系統組件間接口的一種測試。接口測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。
接口測試適用於爲其餘系統提供服務的底層框架系統和中心服務系統,主要測試這些系統對外部提供的接口,驗證其正確性和穩定性。接口測試一樣適用於一個上層系統中的服務層接口,越往上層,其測試的難度越大。
接口測試實施在多系統多平臺的構架下,有着極爲高效的成本收益比,接口測試天生爲高複雜性的平臺帶來高效的缺陷監測和質量監督能力。平臺越複雜,系統越龐大,接口測試的效果越明顯。
基於接口測試的重要性,以及它比較容易自動化的特性,經過持續集成的接口監控可以及時的發現項目中存在的問題,這對持續運營的項目來講,很是重要。算法
模塊接口測試是單元測試的基礎。它主要測試模塊的調用與返回。常常須要編寫一些樁模塊與驅動模塊。
主要測試要點以下:sql
檢查接口返回的數據是否與預期結果一致。
檢查接口的容錯性,假如傳遞數據的類型錯誤時是否能夠處理。
接口參數的邊界值。例如,傳遞的參數足夠大或爲負數時,接口是否能夠正常處理。
接口的性能,接口處理數據的時間也是測試的一個方法。牽扯到內部就是算法與代碼的優化。
接口的安全性數據庫
web接口測試又可分爲兩類:服務器接口測試和外部接口測試。apache
服務器接口測試:是測試瀏覽器與服務器的接口。用戶輸入的數據是輸入到的前端頁面上,怎樣把這些數據傳遞的後臺的呢?經過http協議的get與post請求來實現先後端的數據傳遞。這也可認爲是接口測試。
外部接口測試:這個很典型的例子就是第三方支付,好比在咱們應用中在充流量時,交話費時,都會調用第三方支付接口。
主要測試要點以下:
請求是否正確,默認請求成功是200,若是請求錯誤也能返回40四、500等。
檢查返回數據的正確性與格式;json是一種很是常見的格式。
接口的安全性,通常web都不會暴露在網上任意被調用,須要作一些限制,好比鑑權或認證。
接口的性能,這直接影響用戶的使用體驗。
SOAPUI
JMeter
Grinder
Suds Python
一、 項目啓動後,測試人員要儘早找到開發人員拿到接口測試文檔
二、 獲取接口測試文檔後,就能夠進行接口用例的編寫和調試
三、 接口用例編寫調試完成後,部署到持續集成的測試環境中,
四、 設定腳本運行頻率,告警方式等基本參數,進行接口的平常監控
五、 每日進行接口腳本的維護更新,接口異常的處理
正面測試用例:
覆蓋全部的必選參數
組合可選參數
參數邊界值
若是參數的取值範圍是枚舉變量,須要覆蓋全部枚舉值
還應考慮實際業務應用場景,去設計輸入參數的組合。(這些用例可用來測試功能,做爲SMOKE用例。也可未來用於壓力測試模擬實際業務場景,但要注意保證用例的獨立性,由於壓力測試是多線程的。好比咱們測試ACCOUNT 建立接口,NAME是不能重的,在寫測試用例時,給NAME賦值時能夠加一個時間戳, 這樣用例在多線程併發測試時也不會有問題)
負面測試用例:
空數據
包含特殊的字符
越界的數據
錯誤的數據
驗證點:
status code (正常狀況下,全部請求都應該返回200)
響應信息數據結構(目前大多數狀況下,返回信息都是JSON, 咱們應該驗證相應的結構當數據信息發生改變時)
驗證結點的類型
驗證結點的值 (主要是針對固定的值或者值遵循某些規則,咱們能知道預期的結果的)
對於列表,應該根據請求參數,也應該驗證列表的長度是否與指望值一致
負面測試用例,應驗證ERROR INFO是否與實際相匹配
測試應該是獨立的、可讀的、抗變的、可維護的,其實這也是全部自動測試應該遵循的原則
每一個測試用例都是獨立的
測試用例都是可重複運行的 (這主要是說一些測試數據不能寫死,不一樣的環境數據可能不一樣。在實際工做中,解決方案有二:自已建立所須要的數據,好比你要測試接口須要輸入參數ACCOUNTID,你能夠先調用建立ACCOUNT API, 而後從響應值拿到ACCOUNTID, 當你測試完你要測的接口後,再把新建的ACCOUNT刪除,也就是說一個測試用例分了三步。另一種方法就是讀取數據庫,從數據庫獲取數據,這種方法在測試開發與測試環境還OK,但若是測線上環境就比較困難了,由於咱們不能隨意更新上面的數據,也不能放過多的測試數據在上面。所以我我的比較推崇第一種方法,雖然增長開發用例的工做量,但一勞永逸)
測試能被運行在不一樣的環境裏(日常測試環境至少會分DEV/TEST/STAGING/ONLINE,咱們在測試過程當中,應該把域名,token/apikey等應放在一個變量裏,當切換環境時,咱們只需改變變量的值便可
測試數據與業務相分離(測試數據包括參數接口數據/ 測試執行所須要的系統數據)
儘可能統一共用的測試環境變量
測試完成後,要刪除沒必要要的測試數據。
很大的一個緣由是考慮了在部門內進行推廣的成本問題,另外也有開發能力較弱,時間有限不能充分去研究。jmeter自身也是很是好的一個接口測試工具,有如下一些優勢:
去掉註釋(#),修改csv爲xml
添加jtl文件結果參數:
根據想要保存的參數修改,若不會可參照後文第三方模板網址給出的參數修改。(後面會提到修改jmeter自帶的報告模板,部分數據須要在這裏配置進行展現)
修改後別忘記去掉註釋(#)
Jenkins插件安裝方法本文不作介紹,感興趣的能夠看我jenkins相關的博客。
除了Ant插件執行,也能夠選擇命令行執行:
編輯catalina.sh文件,加入環境變量,不然jenkins會報找不到Ant錯誤() #See the license for the…… JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31 Export JENKINS_HOME="/root/.jenkins"
靈活性更強,能夠直接指定Ant的執行參數
每次只能展現最新版本的html報告,也就是說上一次編譯的html報告會被覆蓋,由於jenkins安全性的問題,默認加載出來的報告是無css的,經過如下配置解決:
HTML Publisher Plugin 插件在新的Jenkins版本中會致使打開的網頁中沒法加載CSS以及沒法點擊按鈕的狀況,因爲CSP致使,可在Jenkins控制檯中執行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
以解決此問題。其餘因爲CSP緣由致使的html插件也可用此方法解決
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="all" basedir="."> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp> <!-- 須要改爲本身本地的 Jmeter 目錄--> <property name="jmeter.home" value="D:\Devlop\jmeter\apache-jmeter-2.7" /> <!-- jmeter生成jtl格式的結果報告的路徑--> <property name="jmeter.result.jtl.dir" value="D:\API\JF_API\Report\jtl" /> <!-- jmeter生成html格式的結果報告的路徑--> <property name="jmeter.result.html.dir" value="D:\API\JF_API\Report\html" /> <!-- 生成的報告的前綴 --> <property name="ReportName" value="TestReport" /> <!-- 須要輸出html報告的時候,html附帶時間 <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="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" /> <!-- Diffrent version of Jmeter has its own ant-jmeter.jar,Please input the right versioin --> <path id="ant.jmeter.classpath"> <pathelement location="${jmeter-home}/extras/ant-jmeter-1.1.1.jar" /> </path> <!-- use this config to generate html report; if not, may not display Min/Max Time in html--> <path id="xslt.classpath"> <fileset dir="${jmeter.home}/lib" includes="xalan-2.7.1.jar"/> <fileset dir="${jmeter.home}/lib" includes="serializer-2.7.1.jar"/> </path> <target name="all"> <antcall target="test" /> <antcall target="report" /> </target> <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:\API\JF_API\Test_Play" includes="*.jmx" /> <property name="jmeter.save.saveservice.output_format" value="xml"/> </jmeter> </target> <target name="report"> <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" classpathref="xslt.classpath" style="${jmeter.home}/extras/jmeter-results-detail-report_30.xsl.xml" /> <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.html.dir}\TestLog.html" classpathref="xslt.classpath" style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl" /> <!-- 由於上面生成報告的時候,不會將相關的圖片也一塊兒拷貝至目標目錄,因此,須要手動拷貝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project>
- 模板使用:
- 修改${jmeterhome}/bin/jmeter.profile配置文件,添加所需的報告參數
- build.xml文件中指定,(演示效果指定了兩個模板 1.jmeter-results-detail-report_30.xsl.xml 2.jmeter-results-shanhe-me.xsl 兩個模板均可在網上進行下載)
- 下載地址:http://shanhe.me/node/18/314
注意事項:
- 千萬不要忘記修改jmeter.profile文件
- 地址中介紹build.xml文件以及jmeter.profile文件具體的參數修改,不要忽視
指定從第一個跳轉到第二個Log網頁也很簡單,jenkins要用的時候把兩份都上傳了就好