jmeter mysql驱动jar包_用 Jmeter 做 Web 接口测试
最近總結(jié)了一下在接口測試方面的知識與心得,在這里與大家分享一下,如有說的不對的地方請多多指正。
接口測試概述
定義
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).
WIKI定義:接口測試作為集成測試的一部分,通過直接控制API來判斷系統(tǒng)的功能性,可靠性,性能與安全性。API測試是沒有界面的,執(zhí)行在通訊層。API 測試在自動化測試中有著重要的地位,因為API一般是應(yīng)用邏輯的主要接口,而GUI測試在敏捷開發(fā)和DevOps的快速迭代和頻繁變更中很難維護(hù)。
分類
接口測試是測試系統(tǒng)組件間接口的一種測試。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。測試的重點是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。接口測試大體分為兩類:模塊接口測試和web接口測試。
模塊接口測試
模塊接口測試是單元測試的基礎(chǔ)。它主要測試模塊的調(diào)用與返回。經(jīng)常需要編寫一些樁模塊與驅(qū)動模塊。
主要測試要點如下:
檢查接口返回的數(shù)據(jù)是否與預(yù)期結(jié)果一致。
檢查接口的容錯性,假如傳遞數(shù)據(jù)的類型錯誤時是否可以處理。
接口參數(shù)的邊界值。例如,傳遞的參數(shù)足夠大或為負(fù)數(shù)時,接口是否可以正常處理。
接口的性能,接口處理數(shù)據(jù)的時間也是測試的一個方法。牽扯到內(nèi)部就是算法與代碼的優(yōu)化。
接口的安全性
WEB接口測試
web接口測試又可分為兩類:服務(wù)器接口測試和外部接口測試。
服務(wù)器接口測試:是測試瀏覽器與服務(wù)器的接口。用戶輸入的數(shù)據(jù)是輸入到的前端頁面上,怎樣把這些數(shù)據(jù)傳遞的后臺的呢?通過http協(xié)議的get與post請求來實現(xiàn)前后端的數(shù)據(jù)傳遞。這也可認(rèn)為是接口測試。
外部接口測試:這個很典型的例子就是第三方支付,比如在我們應(yīng)用中在充流量時,交話費時,都會調(diào)用第三方支付接口。
主要測試要點如下:
請求是否正確,默認(rèn)請求成功是200,如果請求錯誤也能返回404、500等。
檢查返回數(shù)據(jù)的正確性與格式;json是一種非常常見的格式。
接口的安全性,一般web都不會暴露在網(wǎng)上任意被調(diào)用,需要做一些限制,比如鑒權(quán)或認(rèn)證。
接口的性能,這直接影響用戶的使用體驗。
接口測試工具
SOAPUI
JMeter
Grinder
Suds Python
在工作中主要應(yīng)用SOAPUI與JMeter。SOAPUI對接口安全測試有比較好的支持。本文還是主要介紹JMeter的使用,關(guān)注的是功能測試,對于它的強(qiáng)項性能測試,在以后的文章中描述。
測試用例設(shè)計與原則
因為在實際工作中測試的接口都是基于HTTP協(xié)議的,所以下面的測試用例及原則也是針對此類接口。
測試用例
正面測試用例:
- 覆蓋所有的必選參數(shù)
- 組合可選參數(shù)
- 參數(shù)邊界值
- 如果參數(shù)的取值范圍是枚舉變量,需要覆蓋所有枚舉值
- 還應(yīng)考慮實際業(yè)務(wù)應(yīng)用場景,去設(shè)計輸入?yún)?shù)的組合。(這些用例可用來測試功能,作為SMOKE用例。也可將來用于壓力測試模擬實際業(yè)務(wù)場景,但要注意保證用例的獨立性,因為壓力測試是多線程的。比如我們測試ACCOUNT 創(chuàng)建接口,NAME是不能重的,在寫測試用例時,給NAME賦值時可以加一個時間戳, 這樣用例在多線程并發(fā)測試時也不會有問題)
負(fù)面測試用例:
- 空數(shù)據(jù)
- 包含特殊的字符
- 越界的數(shù)據(jù)
- 錯誤的數(shù)據(jù)
驗證點:
- status code (正常情況下,所有請求都應(yīng)該返回200)
- 響應(yīng)信息數(shù)據(jù)結(jié)構(gòu)(目前大多數(shù)情況下,返回信息都是JSON, 我們應(yīng)該驗證相應(yīng)的結(jié)構(gòu)當(dāng)數(shù)據(jù)信息發(fā)生改變時)
- 驗證結(jié)點的類型
- 驗證結(jié)點的值 (主要是針對固定的值或者值遵循某些規(guī)則,我們能知道預(yù)期的結(jié)果的)
- 對于列表,應(yīng)該根據(jù)請求參數(shù),也應(yīng)該驗證列表的長度是否與期望值一致
- 負(fù)面測試用例,應(yīng)驗證ERROR INFO是否與實際相匹配
測試原則
測試應(yīng)該是獨立的、可讀的、抗變的、可維護(hù)的,其實這也是所有自動測試應(yīng)該遵循的原則
- 每個測試用例都是獨立的
- 測試用例都是可重復(fù)運行的 (這主要是說一些測試數(shù)據(jù)不能寫死,不同的環(huán)境數(shù)據(jù)可能不同。在實際工作中,解決方案有二:自已創(chuàng)建所需要的數(shù)據(jù),比如你要測試接口需要輸入?yún)?shù)ACCOUNTID,你可以先調(diào)用創(chuàng)建ACCOUNT API, 然后從響應(yīng)值拿到ACCOUNTID, 當(dāng)你測試完你要測的接口后,再把新建的ACCOUNT刪除,也就是說一個測試用例分了三步。另外一種方法就是讀取數(shù)據(jù)庫,從數(shù)據(jù)庫獲取數(shù)據(jù),這種方法在測試開發(fā)與測試環(huán)境還OK,但如果測線上環(huán)境就比較困難了,因為我們不能隨意更新上面的數(shù)據(jù),也不能放過多的測試數(shù)據(jù)在上面。因此我個人比較推崇第一種方法,雖然增加開發(fā)用例的工作量,但一勞永逸)
- 測試能被運行在不同的環(huán)境里(平常測試環(huán)境至少會分DEV/TEST/STAGING/ONLINE,我們在測試過程中,應(yīng)該把域名,token/apikey等應(yīng)放在一個變量里,當(dāng)切換環(huán)境時,我們只需改變變量的值即可
- 測試數(shù)據(jù)與業(yè)務(wù)相分離(測試數(shù)據(jù)包括參數(shù)接口數(shù)據(jù)/ 測試執(zhí)行所需要的系統(tǒng)數(shù)據(jù))
- 盡量統(tǒng)一共用的測試環(huán)境變量
- 測試完成后,要刪除不必要的測試數(shù)據(jù)。
JMeter 使用
在實際工作中,我主要應(yīng)用JMeter對接口做功能測試,所以下面主要介紹一下JMeter的使用
基本介紹
下面是我的一個測試腳本,通常一個文件會包含下面這些組件。我通過簡單控制器與DEBUG Sampler來組織管理不同的接口,驗證點主要通過寫一些Beanshell腳本來實現(xiàn)。對于一些復(fù)雜的操作,如果網(wǎng)上能找到到現(xiàn)成的資源,比如JAR,CLASS文件會直接在Beanshell PreProcessor/PostProcessor引用。另外在Jmeter里寫B(tài)eanshell不容易DEBUG,所以還是建議復(fù)雜的功能直接在Eclipse里編寫,然后生成JAR包. 關(guān)于Beanshell使用會在后面介紹
使用Beanshell 在 JMeter
BeanShell是一種完全符合Java語法規(guī)范的腳本語言,并且有自己的一些語法和方法
我的腳本幾乎所有驗證都是通過Beanshell腳本,只有少部分應(yīng)用了Response Assert。
Beanshell 常用內(nèi)置變量
下面是一些實際的例子
- 操作變量:(vars)
- 獲取前面的sample返回的信息(prev)
- 寫入信息到j(luò)meter.log文件
log.info("log information")
- 獲取屬性(props)
它是類似的與vars, 相應(yīng)的屬性在在文件jmeter.properties中定義
- 引用外部文件(jar/class/java)
另外如果引用外部JAR包,也可在TEST PLAN中配置,在JMeter中點擊Test Plan 結(jié)點,就會看到下面的界面,可以直接添加JAR包所在路徑
其它
CSV配置組件使用
CSV_Data_Set_Config 當(dāng)發(fā)送多組同樣的請求,只是所帶參數(shù)不同,這時可以加這個配置組件
然后在SAMPLER中可以應(yīng)用上面這些變量配合循環(huán)控制器
連接數(shù)據(jù)庫
在測試過程中,我們需要一些測試數(shù)據(jù)來自于數(shù)據(jù)庫,這時我們需要在Jmeter連接數(shù)據(jù)庫
下面以連接MySQL數(shù)據(jù)庫為例
- 下載 MySQL JDBC driver
- 拷貝這個文件到JMeter安裝路徑下的“l(fā)ib"文件夾
- 建立“JDBC Connection Configuation"
其它數(shù)據(jù)庫連接請參考下圖:
- 添加JDBC request
因為我們在接口測試中,更多的時候是獲取數(shù)據(jù),所以基本都用“SELECT"。如果想INSERT數(shù)據(jù),需要選擇“Callable Statement"在"Query Type"
在使用過程中注意以下幾點:
- SQL語句不要加分號
- 如果查詢條件是變量,在語句中用“?”號代替,具體的值在下面的“Parameters Value"定義,如果有多個參數(shù),中間要用分號隔開。當(dāng)然也可以用${變量名}(在用戶定義變量組件中已經(jīng)定義)
- 對于“variable names" 數(shù)據(jù)表中有多少列就可以設(shè)置多少變量,對于不需要設(shè)置變量的列用逗號占位就可以了。
- 獲取查詢結(jié)果數(shù)據(jù)在Beanshell里
添加監(jiān)聽器
- View result tree
- Aggregate report
Aggregate Report 是 Jmeter 常用的一個Listener, 中譯為“聚合報告”,每一列具體表示如下。
Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
#Samples:表示你這次測試中一共發(fā)出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100
Average:平均響應(yīng)時間——默認(rèn)情況下是單個 Request 的平均響應(yīng)時間,當(dāng)使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應(yīng)時間
Median:中位數(shù),也就是 50% 用戶的響應(yīng)時間
90% Line:90% 用戶的響應(yīng)時間
Min:最小響應(yīng)時間
Max:最大響應(yīng)時間
Error%:本次測試中出現(xiàn)錯誤的請求的數(shù)量/請求的總數(shù)
Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請求數(shù)(Request per Second),當(dāng)使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數(shù) KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec
Jmeter 與 Jekins 集成
說這個之前簡單說一下如何在命令行執(zhí)行JMeter
- 首先配置JMETER_HOME環(huán)境變量,值即為你Jmeter解壓路徑
- 在命令行運行jmeter -v , 正確返回當(dāng)前版本,證明環(huán)境OK
- 運行jmeter -n -t script.jmx -l log.jtl
接口持續(xù)集成
在這塊卡了好久,主要是report展示。之前是不想再用其他工具(如:Ant, Maven ), 就想將jtl文件的報告展現(xiàn)出來,弄了很久沒成功。最后還是向工具屈服,用的Ant來編譯.
主要是配置build.xml
一個示例:
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
Jenkins 上安裝 “Publish performance test result report” ,“Publish HTML reports” 的插件,配置一下。
運行。
結(jié)果如下:
如果加上一些并發(fā),負(fù)載等,就是性能測試報告了。
性能測試報告:
之前一直出了個錯:
Performance: Recording JMeter reports '**/*.jtl'
Performance: no JMeter files matching '**/*.jtl' have been found. Has the report generated?. Setting Build to FAILURE
Build step 'Publish Performance test result report' changed build result to FAILURE
Finished: FAILURE
導(dǎo)致結(jié)果出不來。后面在 Jmeter/bin 下將 jmeter.properties 中的:
jmeter.save.saveservice.output_format=csv
改成:
jmeter.save.saveservice.output_format=xml
結(jié)果就是這樣的:
作者:xuxinhong&snake
總結(jié)
以上是生活随笔為你收集整理的jmeter mysql驱动jar包_用 Jmeter 做 Web 接口测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 通过ip获取城市_pyth
- 下一篇: mysql 无法启动 查看原因_Mysq