前言
1. JMeter簡介及安裝
1.1 JMeter的優(yōu)點
● JMeter是基于Java的開源工具,擴展性強,可自定義開發(fā)插件;● JMeter社區(qū)活躍,會定期更新、修改bug、優(yōu)化功能;● JMeter學(xué)習(xí)成本低,提供了方便的圖形界面來編輯和開發(fā)測試腳本,上手快;● JMeter可以和很多工具兼容,如Jenkins,方便測試自動化;● JMeter具有平臺無關(guān)性,可以輕易在Windows、Linux和macOS上運行。
?1.2?JMeter的安裝
① 安裝JDK
從官網(wǎng)下載JDK: https://www.oracle.com/cn/java/technologies/downloads/#java8-windows (需要注冊)嫌麻煩的話,可以從這里下:https://pan.baidu.com/s/15PE5vikEHhma-2rEcjjSzA?pwd=zh57這是一個其他人帥心善的博主提供的資源,這里借花獻佛咯以下是博主的JDK詳細的安裝教程:[ 環(huán)境搭建篇 ] 安裝 java 環(huán)境并配置環(huán)境變量(附 JDK1.8 安裝包)_如何安裝環(huán)境1.8-CSDN博客或者我的這篇文章中也有介紹JDK安裝: pytest -- 進階使用詳解-CSDN博客
② 安裝JMeter(windows)
從官網(wǎng)下載JMeter的Binaries版本(可執(zhí)行的版本),另外一個Source版本是源碼,需要自己編譯,需注意區(qū)別,別下載錯了。官網(wǎng)地址: https://jmeter.apache.org/download_jmeter.cgi
進入官網(wǎng):點擊下載
下載好之后解壓文件 ->?運行/bin目錄下的 jmeter.bat
即可打開JMeter的圖形化界面進行腳本的編寫。
建議放在c盤(不用配置環(huán)境變量),我嘗試了放在D盤,配置環(huán)境變量怎么配都啟動不了
啟動后:會出現(xiàn)左邊的cmd,使用過程中不要關(guān)閉cmd,關(guān)閉了cmd就相當(dāng)于關(guān)閉了jmeter
③?jmeter界面設(shè)置
初次啟動,界面上的字體小的感人,眼睛快戳瞎了……
界面調(diào)整:
中文模式:
但是關(guān)掉重啟之后,又恢復(fù)了一開始那么小的字體、語言又顯示成了英文
?找到JMeter的配置文件jmeter.properties,用記事本打開,修改字體設(shè)置,
找到這兩行代碼:
前兩行默認(rèn)是注釋掉的,把前面的#去掉,最后一行放開并修改后面的數(shù)字
jmeter.hidpi.mode=true #放開
jmeter.hidpi.scale.factor=2.0 #放開
jmeter.hidpi.scale.factor=2.357948 #放開并修改后面的數(shù)組
waht?再重新打開還是這么小
然后重新點一下放大,就不需要點很多次,點一次就這么大了
湊合著用吧,目前沒找到一次修改配置能夠永久性設(shè)置的方法
修改語言為中文:配置文件jmeter.properties找到
language=這行,改為:下面第一行這樣
Preferred GUI language. Comment out to use the JVM default locale's language.
language=zh_CN
#Preferred GUI language. Comment out to use the JVM default locale's language.
#language=en 這是原本的
重新打開,文字顯示為中文了
1.3JMeter常用的核心組件介紹
由于JMeter涉及的組件數(shù)目很多,據(jù)不完全統(tǒng)計至少有110個,而其實只需要掌握 20%的組件就可以完成80%甚至更多的日常工作了,所以接下來我們重點學(xué)習(xí)使用最頻繁的核心組件,只需要優(yōu)先掌握這10個左右的組件就能應(yīng)付日常大部分的接口測試工作。---------------->>>注意:(1)所有組件的添加都是通過鼠標(biāo)右鍵單擊上一層組件的方式選擇的。(2)比較好用的功能是使用鼠標(biāo)右鍵單擊做啟用(enable)或禁用(disable)的切換,對于不想測試的請求可以禁用,而不用刪除處理。
Jmeter常用組件的功能
① 測試計劃:測試起點,所有組件的容器② 線程組:代表一定數(shù)量的用戶③ 取樣器:向服務(wù)器發(fā)送請求的最小單元④ 邏輯控制器:結(jié)合取樣器實現(xiàn)一些復(fù)雜的邏輯⑤ 前置處理器:在請求之前的工作⑥ 后置處理器:在請求之后的工作⑦ 斷言:判斷請求是否成功⑧ 定時器:負責(zé)請求之間的延遲間隔。常用的有固定,高斯,隨機⑨ 配置元件:配置信息⑩ 監(jiān)聽器:收集結(jié)果------------------->>>執(zhí)行順序:測試計劃 -> 線程組 -> 配置元件 -> 前置處理器 -> 定時器 -> 取樣器(請求)-> 后置處理器-> 斷言 -> 監(jiān)聽器作用域:必須組件:測試計劃、線程組、取樣器輔助組件:剩余的輔助組件作用于父組件,同級組件以及同級組件下的所有子組件
前、后置處理,對應(yīng)的頁面按鈕:?
2. 使用jemter接口測試實戰(zhàn)
2.1 接口請求分析
目標(biāo)網(wǎng)站接口信息
以下根據(jù)目標(biāo)網(wǎng)站的注冊接口為例:進行接口分析 -> 接口測試
?● 目標(biāo)網(wǎng)站域名:http://xxx.com?
?● 目標(biāo)網(wǎng)站公共參數(shù):
● 目標(biāo)網(wǎng)站注冊_請求url:api/user/reg
● 目標(biāo)網(wǎng)站注冊_請求參數(shù):
參數(shù)名
|
是否必須
|
類型
|
默認(rèn)值
|
描述
|
accounts
|
是
|
string
|
用戶名
|
|
pwd
|
是
|
string
|
密碼
|
|
type
|
是
|
string
|
類型 |
公共參數(shù)是所有接口都必須帶的參數(shù),請求參數(shù)對應(yīng)每個具體接口的參數(shù)
接口分析
接口請求四要素
在文檔當(dāng)中找:接口URL、請求方法、請求參數(shù)、響應(yīng)數(shù)據(jù)
在工作當(dāng)中:token字段一般是放在對應(yīng)的請求頭(header)
目標(biāo)網(wǎng)站比較特殊,項目token在url當(dāng)中(最后面)
目標(biāo)網(wǎng)站解析:http://xxx.com?
- s=api/user/login
- application === app
- application_client_type=== weixin
根據(jù)規(guī)則拼湊出一個完整的注冊接口:
接口URL : 協(xié)議+域名+路徑 + 公共參數(shù)(用&拼接)
http://xxx.com?s=api/user/reg&application=app&application_client_type=weixin
----------->>>
看到注冊接口的請求方式是post,我們第一反應(yīng)要清楚:
● post請求的請求參數(shù)是放在body中的
● body請求參數(shù),與請求頭的content-type是一一對應(yīng)的
body請求數(shù)據(jù)類型:
那么問題來了:
body的請求數(shù)據(jù)類型(如上圖)有那么多,我們怎么確定是哪一種呢?
● 有些接口文檔會注明,它是什么請求類型:那么直接選擇即可
● 如果接口文檔沒寫:
????????一般默認(rèn)用form表單提交 (字段相對比較少):x-www-form-urlencoded
????????提交需帶有對應(yīng)的圖片:?from-data
????????字段非常多,或者它的數(shù)據(jù)是{xXXX: XXXX}:raw-json所有的工具也都是這個規(guī)則
得到請求參數(shù)(目標(biāo)網(wǎng)站的body格式j(luò)osn)
type有手機號、郵箱、自定賬號;這里我們使用自定義賬號,即username
{accounts":"username",
"pwd":"password",
"type":"username" }
響應(yīng)數(shù)據(jù):
上面我們已經(jīng)清楚了注冊接口的請求url、請求方法、請求參數(shù)及body數(shù)據(jù)類型,根據(jù)請求信息,我們就能得到一個請求結(jié)果了。
那么根據(jù)這個請求,我們期望得到的結(jié)果是什么呢?
期望結(jié)果:
1. 輸入正確的數(shù)據(jù):注冊成功
2. 輸入已經(jīng)存在的數(shù)據(jù):賬號已存在測試用例設(shè)計……
這就類似于測試用例設(shè)計:
請求參數(shù)不同數(shù)據(jù)的組合,得到的對應(yīng)的結(jié)果
考慮正向場景、異常場景,和功能測試的設(shè)計思路一致
注冊接口測試用例示例?
2.2 單個執(zhí)行接口測試用例
jmeter執(zhí)行接口測試用例,詳細步驟如下:
① 添加線程組
jmeter屬于半自動工具,需要有人的介入,一定數(shù)量的用戶表示一個【線程組】
右擊【測試計劃】--> 添加 --> 添加線程組:
② 添加取樣器
我們需要做什么?發(fā)送一個接口請求:【取樣器】
在JMeter中,雖然在取樣器的類型中只有HTTP,但是它可以發(fā)送HTTPS請求。
要發(fā)送HTTPS請求,只需在HTTP請求中指定協(xié)議為HTTPS,即在服務(wù)器名稱或IP地址前加上"https://"前綴。在HTTP請求中,可以使用如下格式的URL來發(fā)送HTTPS請求:https://www.example.com?或?https://192.168.0.1。
右鍵【線程組】右擊 --> 添加 --> 選擇HTTP請求(我們這里是接口請求屬于http)?
?③ 填寫請求信息
上面我們得到的注冊接口完整的url是:
http://xxx.com?s=api/user/reg&application=app&application_client_type=weixin
路徑從?開始,截圖中漏了
④ 添加監(jiān)聽器
添加監(jiān)聽器,是為了方便執(zhí)行后查看結(jié)果
右鍵接口名 --> 添加?--> 監(jiān)聽器?--> 查看結(jié)果樹
⑤ 執(zhí)行接口測試:?
上面截圖字打錯了,是保存;根據(jù)個人需要,也可以不保存?
點擊保存后,等1~2秒即出來執(zhí)行結(jié)果:
響應(yīng)中顯示的響應(yīng)結(jié)果,對應(yīng)這個接口請求的實際結(jié)果
測試用例的結(jié)果,是我們的期望結(jié)果
當(dāng)然實際工作中,我們不可能一個個點進去,肉眼去確認(rèn)接口返回的實際結(jié)果
那么:我們可以通過添加斷言,來看接口的返回是否和我們的期望結(jié)果一致
⑤ 添加斷言
比如,我就想斷言這個注冊接口返回的響應(yīng)josn信息中,msg是否為注冊成功:
需要對哪個接口進行斷言,就右鍵對應(yīng)的接口 --> 添加?--> 斷言?--> 選擇JSON斷言
JSON斷言中,默認(rèn)使用的是JOSN path,這個json path填寫有一定的規(guī)則?
可以先取查看結(jié)果樹種測試一下,寫的對不對,具體見下圖備注:
填寫斷言信息:
重新執(zhí)行一遍:
查看斷言信息、斷言失?。ㄖ挥惺×讼旅娌艜@示斷言,成功的話不會顯示短信信息)
2.3 多個接口執(zhí)行測試用例
基于上面的注冊接口之后,再新建一個登陸接口(即再加一個取樣器)
登陸接口請求url:api/user/login
登陸請求參數(shù):與注冊一致
jmeter配置原件?
大家可能已經(jīng)發(fā)現(xiàn)了一個問題,就是每增加一個接口,都需要再填一遍HTP請求信息,是不是很麻煩?如果哪天請求的域名變了,那么是不是幾十個、幾百個接口都得改一遍?那么有沒有簡單的方法呢?
----------------->>>>
是的,有更簡單的方法,就是使用【配置原件】這個功能:
我們的接口是HTTP,那么就選擇 HTTP請求默認(rèn)值?
把域名和協(xié)議類型,填在默認(rèn)請求頁面里
下面的注冊 和 登陸接口頁面中的?域名和協(xié)議類型就可以刪掉了
重新運行一下:
設(shè)置環(huán)境變量
根據(jù)上面的配置原件使用思路,同理可得:
特別適用于環(huán)境切換的修改,比如有測試環(huán)境、生產(chǎn)環(huán)境,有100個接口
我不需要再兩個環(huán)境中都去各寫100遍接口,只需要加一個【請求默認(rèn)值】,根據(jù)不同環(huán)境的域名填寫即可
執(zhí)行哪個環(huán)境,就把另一個環(huán)境給禁用掉;
比如現(xiàn)在我要在測試環(huán)境,把就把生產(chǎn)環(huán)境的禁用
禁用后,它的字體顏色就變淺了
設(shè)置變量
即用戶定義的變量
比如我基于上面測試用例中一個用戶名、密碼注冊好之后,我還需要再次注冊賬號,那么每換一個不同的賬號注冊,注冊和登陸HTTP請求信息的頁面中,都需要取改對應(yīng)的用戶名、密碼,是不是也很麻煩?
------->>>
so,偷懶的辦法:就是添加一個【用戶定義的變量】
定義變量:
在【用戶定義的變量】 中定義賬號、密碼
引用變量:
重新運行一下:可以看到,注冊和登陸都成功了
所以:
定義變量,適合請求參數(shù)中的某些字段值是經(jīng)常要變的,就不要固定寫死,把它提取出來,放在用戶變量里,運行的時候動態(tài)來取值引用;
改的時候也只有改一處,其他地方不用動,非常方便
2.4 Jmeter數(shù)據(jù)驅(qū)動測試
數(shù)據(jù)驅(qū)動測試,也叫DDT
--------------->>>>>
例如:上面的excel截圖中,一個登陸接口,我們有多種場景需要測試
共同點是:請求URL相同
不同點是:請求參數(shù)不同
那么我們能不能把接口數(shù)據(jù)提取出來?當(dāng)然可以
再新建一個線程組,可以使用復(fù)制黏貼的方式:
選中登陸&注冊--ctrl+c? --> 點擊測試測試計劃??ctrl+v即可
然后把登陸&注冊這個case禁用掉:點擊登陸&注冊 右鍵 --> 禁用即可
準(zhǔn)備數(shù)據(jù):
在桌面新建一個文件夾:
這里使用Notepad++這個軟件(它不會帶任何格式),編寫登陸接口的不同測試場景
注意:使用英文逗號,不用加雙引號把字符串引起來,jmeter也可以處理
添加配置元件 --> csv
配置csv文件信息
添加循環(huán)控制器
因為是一個接口對應(yīng)4條用例,需要讓它循環(huán)來執(zhí)行:
數(shù)據(jù)驅(qū)動tab右鍵 --> 添加 --> 邏輯控制器? --> 選擇‘循環(huán)控制器’
注意層級關(guān)系:需要讓jmeter循環(huán)讀數(shù)據(jù),然后循環(huán)進行登錄,
所以把數(shù)據(jù)文件配置、?登陸接口拖到循環(huán)控制器的下面
并且在循環(huán)控制器中,修改循環(huán)次數(shù)(根據(jù)自己的用例條數(shù),是幾條寫幾)
修改斷言
執(zhí)行測試用例
上面的逐步都配置好了之后,就可以運行用例了
下面三條用例為什么失敗了呢?
是因為斷言里的預(yù)期結(jié)果的文案與接口文檔中的不一致,需要一致才行
重新修改一下文件中的期望結(jié)果文案、重新執(zhí)行一下,然后全部成功
結(jié)果查看--優(yōu)化
因為上面我們的場景是一個接口對應(yīng)多條測試用例,當(dāng)我們運行完之后,沒法第一眼就知道哪條結(jié)果對應(yīng)那條用例,所以我們可以在接口名稱后面也加一個變量引用:
重新運行一下:查看結(jié)果時,清晰明了
2.5 Jmeter接口關(guān)聯(lián)測試
接口關(guān)聯(lián),可以理解為接口的上下游操作之間的依賴
例如:一個電商平臺
1、需要先登陸
2、通過登陸之后選購商品加入到購物車
3、……
=====================================================================
在接口測試中,需要解決的是哪個登錄用戶的問題,也就是說加入購物車的時候,怎么知道是哪個用戶。
鑒別用戶身份,通用的方法就是Token(軟件中臨時身份證號,代表某個具體的賬號)
token怎么來的?一般在登陸之后,會在響應(yīng)數(shù)據(jù)、或者請求頭中
看看上面運行登錄接口的接口, token在響應(yīng)數(shù)據(jù)的body中
1、需要先登陸:得到token:226795e8cbc5ff159f6befb645b1ee01
2、通過登陸之后選購商品加入到購物車:請求數(shù)據(jù)需要加上token
3、……
一般token放在head里,但是也有特殊的,是需要直接放在請求url的最后,比如現(xiàn)在這個目標(biāo)網(wǎng)站就是需要放在url里
=====================================================================
總結(jié)來說:
上一個接口的響應(yīng)數(shù)據(jù)(token值),作為下一個接口的請求數(shù)據(jù)(token = token值)
添加后置處理器
前面有了解過,后置處理器,就是處理在請求之后的工作
配置josn提取器
添加下游接口
添加配置信息頭管理器
在 JMeter 中,HTTP信息頭管理器用于管理 HTTP 請求中的請求頭信息。
HTTP 請求頭包含了一些關(guān)于請求的元數(shù)據(jù),例如用戶代理、內(nèi)容類型、授權(quán)信息等。
通過使用 HTTP信息頭管理器,可以方便地管理這些請求頭信息,以便在測試計劃中的多個 HTTP請求中重復(fù)使用。
具體來說,HTTP信息頭管理器可以用于以下幾個方面:
添加通用的請求頭信息:可以在 HTTP信息頭管理器中添加常用的請求頭信息,例如 User-Agent、Accept、Content-Type 等,以便在測試計劃中的多個 HTTP請求中重復(fù)使用這些信息。
管理授權(quán)信息:可以在 HTTP信息頭管理器中添加授權(quán)信息,例如 Basic 認(rèn)證的 Authorization 頭部,以便在多個請求中使用相同的授權(quán)信息。
管理自定義的請求頭信息:可以在 HTTP信息頭管理器中添加自定義的請求頭信息,以滿足特定的測試需求。
這里,我們添加HTTP信息頭管理器的目的:是因為josn格式的body請求信息,需要與請求頭當(dāng)中的?Content-Type一一對應(yīng)
設(shè)置content-type的格式為:application/ison(請求參數(shù)格式為josn)
運行接口用例:
接口關(guān)聯(lián)--總結(jié):
1.?上一個接口的響應(yīng)數(shù)據(jù),作為下一個接口的請求數(shù)據(jù)(比如token)
2. 如果請求參數(shù)的數(shù)據(jù)格式是json,務(wù)必要添加配置信息頭管理器,設(shè)置json格式
2.6 JDBC驅(qū)動及數(shù)據(jù)斷言
JMeter中如果要用SQL語句查詢數(shù)據(jù)庫,就需要用到JDBC請求和JDBC Connection Configuration了。也可以作為數(shù)據(jù)驅(qū)動測試的另外一種方式
------------->>>
在測試過程中,對于數(shù)據(jù)庫的操作場景一般有:
● 測試數(shù)據(jù)的制造
● 查詢數(shù)據(jù)用于測試的輸入
● 測試完成之后查詢數(shù)據(jù)用于檢測結(jié)果
● 業(yè)務(wù)SQL的性能測試
數(shù)據(jù)庫連接JDBC驅(qū)動下載
打開MySQL JDBC的下載網(wǎng)站:
https://downloads.mysql.com/archives/cj/,并選擇操作系統(tǒng): Platform Independent。
點擊 DOWNLOADS,把頁面滾動到最下面,點擊 MySQL Community (GPL) Downloads
點擊 Connector/J ----進入后選擇Platform Independent ---選擇zip格式(windows系統(tǒng)選zip)
注意下載驅(qū)動的版本要與mysql的版本相匹配,如果驅(qū)動版本比msql版本高,可能用不了
點擊下載:
下載后,將mysql-connector-java-5.1.48-bin.jar這個文件放到j(luò)meter的bin目錄下
Jmeter中關(guān)聯(lián)jar包
點擊測試計劃 --> 瀏覽 --> 選中jar包 --> 點擊open
必須引用jar包,不然執(zhí)行會報錯
配置連接數(shù)據(jù)庫的配置信息
添加JDBC請求配置
JDBC Connection Configuration頁面:相當(dāng)于mysql的鏈接信息配置?
拉到最下面,把數(shù)據(jù)庫連接的4項信息填上?
Database URL:dbc:mysql://xx域名:3306/數(shù)據(jù)庫地址? (3306是端口號)
添加配置JDBC Request
注意層級關(guān)系,把它拖到循環(huán)控制器的下面
引用JDBC Connection Configuration中的數(shù)據(jù)庫名字
正常寫sql就行?
上面的【HTTP請求默認(rèn)值】不變(協(xié)議、域名),還是使用上面的測試網(wǎng)址信息
【用戶定義的變量】,變量信息指明,賬號與密碼為前面已注冊成功的
添加一個【HTTP請求】 ,請求名稱使用上面的SQL查詢結(jié)果變量
【用戶定義的變量】中指定了賬號與密碼的變量,所以使得【JDBC Request】中的查詢結(jié)果就是查詢變量中的賬號/密碼:
登陸接口基于【JDBC Request】的查詢結(jié)果,拿到的賬號密碼執(zhí)行登錄,所以執(zhí)行成功
這就是為什么登錄接口的名稱中要引用查詢的變量文章來源:http://www.zghlxwxcb.cn/news/detail-811007.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-811007.html
到了這里,關(guān)于接口測試 02 -- JMeter入門到實戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!