Jmeter筆記(Ⅱ)使用Jmeter實現輕量級的接口自動化測試

接口測試雖然作為版本的一環,但是也是有一套完整的體系,有接口的功能測試、性能測試、安全測試;同時,由于接口的特性,接口的自動化低成本高收益的,使用一些開源工具或一些輕量級的方法,在測試用例開發的成本不高的情況下能去的比較好的測試效果。

?開源測試工具Jmeter可以承擔接口請求、結果解析和斷言的工作,可以作為輕量級接口自動化的實現手段,對于開發能力不強或規模不大的團隊也能接受。Jmeter可以在協議層實現基本的功能,包括接口訪問、參數化構造、返回值斷言和數據庫訪問,基本足夠滿足一個輕量級的接口自動化框架的功能。

?

我們定義一個如下的接口:

入參:

    SearchKeys: 我親愛的你, //用戶輸入的查詢數據,不能為空PageSize: 10,//分頁的Page大小,默認入參為10,前端傳入PageIndex: 1,//分頁的PageIndex,第幾頁,前端傳入OrderBy: 0,//排序條件:0-銷量,1-價格,由前端傳入,前端的通過單選控件實現Method: ASC//排序方式:ASC-升序,DESC-降序,前端通過單選控件實現

返回值:

{

????"data":

????[

????????{

????????????"CommodityID":"03445f1e-ba55-421d-80fa-1777741bb57e",

????????????"CategoryID":2,

????????????"CommodityName":"雙人床solo抽泣",

????????????"Thumb":"http://img4.imgtn.bdimg.com/it/u=1924829949,2185178641&fm=27&gp=0.jpg",

????????????"SalePrice":16.0,

????????????"SaleAmount":13

????????}

????],

????"records":1,

????"status":true,

????"message":""

}

代碼處理邏輯:按照分頁的頁面和大小,從Commodity表一張表中直接查詢到對應數據,查詢結果進行實例化為Json處理后返回,對應字段均存在Commodity表中,對應數據如下:

測試的思路為,按照實現的業務邏輯,取除了Thumb的字段作為斷言字段,并構造SQL進行查詢,如果查詢到對應數據,則證明接口返回通過。具體構造的SQL如下:

SELECT*
FROMCommodity
WHERECommodityID = '03445f1e-ba55-421d-80fa-1777741bb57d'
AND CategoryID = 2
AND CommodityName = '我親愛的你大事不妙'
AND SalePrice = 13.0
AND SaleAmount = 130

?

那么我們需要進行的工作,按照順序即為訪問接口-獲取返回值-解析回參-構造SQL-查詢-判斷結果。整個過程,都能通過Jmeter進行實現,上手起來也比較容易。具體操作過程如下:

?

?一.Http請求:

在測試計劃下新增一個線程組,并在線程組下新增一個http請求:

?

添加Http請求以后,按照下圖所示可以設置請求,需要注意的是如果要輸入協議,就不要在服務器名稱或IP前加http或https了,否則會直接訪問到http://http://上去 :

一般來說,接口在訪問的時候都需要在驗證Header中的身份信息,Jmeter中提供了頭信息管理的功能:添加-配置元件-Http請求頭管理器:

?

使用結果樹查看接口返回值:添加-監聽器-查看結果樹,可以明確看到接口的返回報文:、

入參:

PS:Jmeter記錄的入參會進行自動URL編碼處理,有需要的可以自己做URL解碼即可

回參:

?

這樣,我們就完成了一個基本的Http請求的訪問。

?二.實現參數化

想必大家注意到了,我們之前在通過Http請求構造入參時,對SearchKey這個入參并沒有填入之前構造的參入,而是使用了${Key},在Jmeter中,參數的傳入就是通過${參數名}的方式進行的。

一般來說,我們測試過程中不一定能保證數據的穩定或需要構造多個不同的參數進行處理 ,很多時候需要考慮做參數化的處理,一定程度上實現動態構造。Jmeter中提供了通過讀取本地文件進行參數化的功能:

讀取配置文件中的參數:在添加的http請求下添加配置元件-CSV DATA SET CONFIG:

?

添加CSV?數據配置器后,按照如下設置即可設置參數:

需要調用的時候,?直接使用 ${參數名}?進行調用即可。

?

?

?

三.使用JSON Extractor處理返回值中的Json

通常來說,現在大部分的接口返回值都序列化處理成為Json格式進行返回。雖然使用正則獲取返回值也可以,但是Jmeter提供了一個更加方便的插件:JSON Extractor處理Json。

下載插件https://jmeter-plugins.org/wiki/JSONPathExtractor/,下載解壓后,把lib里的兩個jar拷貝到jmeter的lib目錄,lib/ext里面的兩個jar拷貝到jmeter的lib/ext目錄,重啟jmeter即可。

我們以處理以下Json中的CommodityID為例,來獲得對應的值:

{"data":[{"CommodityID":"03445f1e-ba55-421d-80fa-1777741bb57e","CategoryID":2,"CommodityName":"雙人床solo抽泣","Thumb":"http://img4.imgtn.bdimg.com/it/u=1924829949,2185178641&fm=27&gp=0.jpg","SalePrice":16.0,"SaleAmount":13}],"records":1,"status":true,"message":""}

?注意到CommodityID在Json數組中,所以Json路徑為data[0]["CommodityID"],需要添加Json數組中的索引值 。我們在Json?Path?Expreeions填入 $.data[0].[CommodityID],這樣我們就取出了CommodityID的值;在后續之后,我們就可以通過${CommodityID}的方式調用取出的值。

?

如法炮制,我們可以取出所有的斷言字段。

按照之前的分析,我們可以構造使用斷言字段構造一條SQL訪問數據庫,如果所有的字段都返回正確,那么查詢結果應該是不為空的;按照如下的格式,我們就可以構造出我們所需要的斷言SQL了:

SELECT*FROMCommodity
WHERECommodityID = '${CommodityID}'
AND CategoryID = ${CategoryID}
AND CommodityName = '${ CommodityName }'
AND SalePrice = ${SalePrice}
AND SaleAmount = ${SaleAmount}

接下來,我們只需要使用Jmeter執行該SQL,并對返回結果進行驗證,即可實現這個輕量級的接口自動化。

?

四.使用JDBC訪問MySql:

Jmeter提供了JDBC的插件進行數據庫訪問,但是在此之前,我們需要下載MySql的JDBC驅動包。一般來說,JDBC驅動包版本需要和數據庫版本匹配,否則可能因為驅動的關系導致出錯。

1.在測試計劃下添加,導入對應的JDBC驅動包:

?

2.添加-配置元件,JDBC?Connection?Configuration

?

具體設置如下所示,藍色框線內的部分一般可以直接使用默認設置,紅色框線內需要我們手動填寫:

?

底部的數據庫連接字符串填寫如下:

DataBaseURL:?數據庫連接字符串,使用MySql的同學按照以下格式填寫即可:

jdbc:mysql://localhost:2000/AutoTest?useUnicode=true&characterEncoding=utf8
jdbc:mysql://數據庫服務器地址:端口號/數據庫名,在測試過程中遇到過因為編碼問題,查詢條件中的中文字符串不生效導致斷言結果錯誤,所以需要添加編碼方式,設置的與數據庫本身的編碼方式相同即可,我使用的是UTF-8
JDBC Driver Class:直接填寫com.mysql.jdbc.Driver即可
UserName/Password:連接數據庫的賬號和密碼

3.使用JDBC?Request進行數據庫操作:添加-Sampler-JDBC?Request

?

JDBC的操作比較簡單,我們只需要通過參數名調用設置的JDBC?Connection?Configuration,然后輸入要執行的SQL即可:

?

添加一個查看結果樹,我們就能看到SQL的執行結果了:

構造的SQL:

?

查詢的結果:

?

五.使用斷言驗證返回結果:

Jmeter提供了豐富的斷言功能,可以用于檢查響應數據與預期是否一致,可以用作接口自動化測試的結果校驗。對于一次請求,如果通過的話,斷言結果中只會打印一行請求的名稱;如果失敗,則除了請求的名稱外,還會有一行失敗的原因(不同類型的斷言,結果不同),也可以幫助我們定位返回值錯誤的內容。此外,一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了,那么才算request成功。

那么針對這個用例,我們可以把問題簡單化:既然數據庫返回的查詢結果查詢到數據就算測試通過,那么JDBC Request的返回值中是一定有我們的傳入的參數的,那么我們就可以直接使用基本的文本工具來進行斷言的驗證,返回結果包含一個或幾個斷言字段,那么就能斷言測試通過了:

添加-斷言-響應斷言,響應文本中包括關鍵的參數即可:

?

那么如果返回結果正確,斷言測試通過,結果樹中只有一條返回的數據:

?

如果返回結果錯誤,那么斷言測試失敗,結果樹中會新增一行失敗的原因:

我們構造一個錯誤的場景,將返回字段中的SaleAmount(銷量)返回為SalePrice(價格),那么我們的查詢結果為空,返回的斷言結果就會是失敗的,因為返回值中沒有包括傳入的CommodityID:

?

斷言失敗,因為沒有匹配到對應的CommodityID數據。

至此,我們就使用Jmeter完成了一個輕量級的接口自動化測試的用例構造,構造好的用例可以用于后續版本的回歸測試。

?

?

?

轉載于:https://www.cnblogs.com/rd-ddddd/p/9578242.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451412.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設置Android Studio工程布局文件的默認布局

每次創建新的工程后&#xff0c;布局文件的的布局總是ConstraintLayout&#xff0c;如何更改&#xff1f; 進入Android Studio安裝目錄&#xff0c;用文本編輯器打開文件plugins\android\lib\templates\activities\common\root\res\layout\simple.xml.ftl 將文件內容修改為 <…

依賴注入簡介(二)

在上一篇中&#xff0c;我們已經介紹過了最基本的依賴注入&#xff0c;接下來我們來看如何對需要使用的類進行裝配。通常應用程序的組件之間的關聯是通過wiring&#xff0c;在Spring中同樣有很多方式來裝配。但是一個最通常我們使用的方法是利用XML。接下來我們來展示一個簡單的…

eclipse啟動tomcat 訪問http://localhost:8080 報404錯誤

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 eclipse正常啟動tomcat&#xff0c;但是 訪問http://localhost:8080 卻報404錯誤 修改下配置 就好操作如下圖 打開eclipse的server視圖&a…

3秒搞定!~~ 一億數據獲取前100個最大值

3秒搞定&#xff01;~~ 一億數據獲取前100個最大值 整合網絡上的算法。 根據我的思路。計算一億個數字中最大的前100個值。 昨晚效率還是很低。 今天搞的算法。 只需要3秒鐘。 獲取前100個 前1000個 速度都非常快。 算法原理&#xff1a; 把一億個數字的前100個 首先放入數…

手把手JDK環境變量配置

分為下載&#xff0c;配置&#xff0c;驗證三個步驟解釋如何進行JDK環境變量配置。 步驟一&#xff1a; 首先查看配置成功后的效果&#xff1a; tip:點擊win——>運行&#xff08;或者使用winr,或者shift鼠標右鍵打開powershell&#xff09;——>輸入cmd回車——>控制…

網易NEI在面臨前后端分離問題,所提供的完整解決方案

內容來源&#xff1a;2018 年 1 月5 日&#xff0c;網易NEI產品負責人包勇明在“2018移動技術創新大會”進行《網易高效多端應用協作開發實踐》演講分享。IT 大咖說&#xff08;微信id&#xff1a;itdakashuo&#xff09;作為獨家視頻合作方&#xff0c;經主辦方和講者審閱授權…

如何使用js動態顯示或隱藏DIV

在web頁面中&#xff0c;經常需要使用select控件來顯示div的顯示與隱藏&#xff0c;實現這個方法主要用到了setAttribute方法&#xff0c;以下為示例代碼 [html] view plaincopy <html> <title>通過選擇項顯示不同的結果</title> <head> <scr…

myeclipse進入Myeclipse configuration center 如何關閉

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 找到這個圖標&#xff0c;放上去顯示return即可關閉&#xff0c;隱藏很深有木有

程序員保持身心健康的八種方式

程序員是一個辛苦的行業&#xff0c;長時間面對的只是需要解決的問題&#xff0c;更不要提開發期限和無理取鬧的客戶了&#xff0c;這樣的工作簡直無以承受。怎么辦呢我們&#xff1f;我們熱愛編程&#xff0c;樂于創建功能……我們喜歡那種將一堆代碼弄成像Facebook或者Digg那…

[No0000166]CPU的組成結構及其原理

中央處理器(Central Processing Unit, CPU)CPU的基本架構和工作原理其實百科上講得已經相當清楚了&#xff0c;不過我覺得有些事情呢還是給個例子出來比較方便學習。本文會先從內存地址&#xff0c;計算機的一般架構之類的基礎知識出發&#xff0c;然后逐步為讀者"拼裝&qu…

Java 時間總結

轉載請標明出處&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/80613024 本文出自【趙彥軍的博客】 時區 整個地球分為二十四時區&#xff0c;每個時區都有自己的本地時間。為了統一起見&#xff0c;使用一個統一的時間&#xff0c;稱為通用協調時(UTC, Univer…

js中的var是什么意思

聲明&#xff08;創建&#xff09; JavaScript 變量 在 JavaScript 中創建變量經常被稱為“聲明”變量。您可以通過 var 語句來聲明 JavaScript 變量&#xff1a;var x; var carname; 在以上聲明之后&#xff0c;變量并沒有值&#xff0c;不過您可以在聲明它們時向變量賦值&…

HTTP/2 協議入門

一、2015年&#xff0c; HTTP/2發布。 二、二進制協議 HTTP/2是一個二進制協議&#xff0c;頭信息和數據體都是二進制&#xff0c;并且統稱為“幀”&#xff08;frame&#xff09;,頭信息幀和數據幀。 二進制協議的一個好處是&#xff0c;可以定義額外的幀。HTTP/2定義了近1…

態度決定高度

“一個將什么都不放在眼里的人&#xff0c;他的未來一定是一片黑暗&#xff0c;因為他什么都看不到”。知識的獲得和能力的鍛煉是個一點一滴慢慢積累的過程&#xff0c;這個過程需要我們端正態度&#xff0c;俯身求教。好高騖遠一直都是很多人容易犯的錯誤&#xff0c;這樣導致…

中間件技術是什么?

&#xff08;一&#xff09;舉例說明&#xff1a; 我開了一家炸雞店&#xff08;業務端&#xff09;&#xff0c;然而周邊有太多屠雞場&#xff08;底層&#xff09;&#xff0c;為了成本我肯定想一個個比價&#xff0c;再綜合質量挑選一家屠雞場合作&#xff08;適配不同底層邏…

4.10/4.11/4.12 lvm講解 4.13 磁盤故障小案例

2019獨角獸企業重金招聘Python工程師標準>>> 準備磁盤分區 fdisk /dev/sdb n 創建三個新分區&#xff0c;分別1G t 改變分區類型為8e 準備物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出當前的物理卷 pvremove /dev/sdb3 刪除…

《Effective Java》 第一講:創建和銷毀對象

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、用靜態工廠方法代替構造器 用靜態工廠的優點 &#xff1a; 1. 方法有名字&#xff0c;更好理解。 2.不必每次調用的時候都創建一…

外圍功能電路控制 LET′S TRY“嵌入式編程”: 4 of 6

外圍功能電路控制 LET′S TRY“嵌入式編程”: 4 of 6本連載講解作為嵌入式系統開發技術人員所必需具備的單片機的基礎知識。 在《單片機入門&#xff08;1&#xff09;&#xff5e;&#xff08;3&#xff09;》中&#xff0c;我們一起學習了單片機的硬件和編程語言以及開發環境…

如何防止代碼腐爛

很多團隊都有這個問題&#xff0c;一個項目的代碼本來開始設計得好好的&#xff0c;一段時間以后&#xff0c;代碼就會變得難以理解&#xff0c;難以維護&#xff0c;難以修改。為什么&#xff1f;我一直在思考這個問題。 讓我們先看一個人的情況。 1. 程序員的成長 新手的代碼…

什么是商業智能(BI),以及其與數據分析的區別?

BI&#xff08;Business Intelligence&#xff09;即商務智能&#xff0c;它是一套完整的解決方案&#xff0c;用來將企業中現有的數據進行有效的整合&#xff0c;快速準確地提供報表并提出決策依據&#xff0c;幫助企業做出明智的業務經營決策。它是一種產品/服務&#xff0c;…