Jmeter 一般理解為輕量級(jí)的性能壓力測(cè)試工具,主要場(chǎng)景應(yīng)用在單接口測(cè)試,也可以做負(fù)載的業(yè)務(wù)場(chǎng)景測(cè)試;
Jmeter接口性能測(cè)試流程:
1、接口信息確認(rèn),確認(rèn)接口能正常調(diào)通并正確返回?cái)?shù)據(jù)(一般可借助Fiddler,Postman等輔助工具)
2、創(chuàng)建測(cè)試計(jì)劃 添加:Test Plan —> 添加 Thread Group —> 添加Http Request(即接口) —> 添加Http cookie/Header —> 添加Assertion —> 添加 listener
基本的接口性能測(cè)試,只需要上面6個(gè)步驟即可,如下圖:

2.1、Test Plan
如下圖,輸入Name即可,一般不需要使用User Defined Variables等其他選項(xiàng)配置

2.2、Thread Group
添加線程組,設(shè)置用戶并發(fā)數(shù)量及加壓方式等信息,如下圖:

Name:一般輸入接口名稱
Number of Threads (User): 就是并發(fā)用戶數(shù)
Ramp-up period (Seconds): 就是加壓方式,比如上面并發(fā)用戶數(shù)200,Ramp-Up period 設(shè)置為100,理解就是200個(gè)虛擬用戶要在100秒內(nèi)全部加壓,即:每秒加壓2個(gè)虛擬用戶的意思。
Loop Count: 循環(huán)跑多少次,比如設(shè)置1000,那么200Vu,總共就會(huì)調(diào)用200*1000次接口進(jìn)行測(cè)試; Infinite,表示一直跑,直到手動(dòng)點(diǎn)擊Stop,這個(gè)可能會(huì)導(dǎo)致失敗的接口,應(yīng)你手動(dòng)點(diǎn)Stop時(shí),還會(huì)有VU正在跑,突然Stop了,可能會(huì)有Scoket closed 的錯(cuò)誤,一般建議選infinite時(shí),啟用Duration(seconds),指定跑多少時(shí)間,這樣不會(huì)有socket closed錯(cuò)誤
2.3、Http Request(即接口)
添加要測(cè)試的接口,如下圖所示:

Name:一般輸入接口名稱
Protocol: 協(xié)議,我們測(cè)試的接口基本都是http或https協(xié)議
Server Name or IP:被測(cè)接口對(duì)于的域名或者IP
Port Number: 端口,有就輸入,沒(méi)有就空著
Http Request: 請(qǐng)求方式,一般Get 或 Post
path: 就是接口路徑,根據(jù)接口實(shí)際輸入
Conent encoding: 編碼類型
parameters: 一般就是接口的請(qǐng)求數(shù)據(jù),比如請(qǐng)求body
輸入上面的基本信息,要確保:Protocal + Server Name or Ip + Port Number + Path, 這幾部分拼接起來(lái)就是接口的完整絕對(duì)URL地址
2.4、Http cookie/Header
要使接口能正常調(diào)用返回?cái)?shù)據(jù),一般都有進(jìn)行身份驗(yàn)證,也就是添加接口的header和cookie等信息
一般可以首先在Fiddler或Postman里調(diào)式接口,看需要哪些Cookie和Header,然后添加到Jmeter里來(lái)即可,如下圖:


2.5、Assertion
在進(jìn)行接口測(cè)試時(shí),不能只憑返回了http code 200,就認(rèn)為接口正常了,200只表示接口調(diào)用成功了,但并不能證明接口就返回了預(yù)期的數(shù)據(jù),所以一般我們要確保接口返回了我們想要的數(shù)據(jù),才認(rèn)為接口是通過(guò)的。
這個(gè)驗(yàn)證過(guò)程就是:Assertion(斷言)
斷言有很多種,我們?cè)诮涌谛阅軠y(cè)試過(guò)程中,一般使用文本斷言就可以了,就是調(diào)用接口后,我從接口返回的body里去找一個(gè)指定的字符串,如果找到了這個(gè)字符串,那就認(rèn)為接口是成功了且正確返回了數(shù)據(jù)。比如查找地塊的接口,我知道如果接口成功了,Response Data 的body里會(huì)有地塊名稱,那么我就把指定一個(gè)地塊名稱(比如:地塊1)當(dāng)成斷言的字符串。


如上圖,那么當(dāng)執(zhí)行測(cè)試時(shí),如果從接口返回的body里找不到字符串“地塊”,那么Jmeter就會(huì)判斷接口Failed,就算返回的Http code 是200
2.6、listener
listener 就是監(jiān)聽(tīng)的結(jié)果,也就是我們要的測(cè)試結(jié)果指標(biāo)。
一般簡(jiǎn)單的接口測(cè)試,我們基本關(guān)注的指標(biāo)有這結(jié)果:響應(yīng)時(shí)間,TPS,并發(fā)用戶數(shù)(這三個(gè)指標(biāo)Jmeter本身沒(méi)有對(duì)應(yīng)的Listener或不好用,可以找三方的插件),服務(wù)器資源使用率,聚合報(bào)告,Summary Report等,如下圖:

2.7 body data 參數(shù)化
添加cvs data set config 組件

請(qǐng)求里的data body 用cvs data set configf里的參數(shù)名就可以

參數(shù)文件為csv格式,格式如下:
{"agent_id": "5677437a0bb811f0981450ebf6bd1b4d","deep_think": "N","query": "水稻有幾個(gè)生育期?","stream": true}
{"agent_id": "5677437a0bb811f0981450ebf6bd1b4d","deep_think": "N","query": "浙江地區(qū)水稻幾月份收割?","stream": true}
{"agent_id": "5677437a0bb811f0981450ebf6bd1b4d","deep_think": "N","query": "水稻怎么施肥?","stream": true}
{"agent_id": "5677437a0bb811f0981450ebf6bd1b4d","deep_think": "N","query": "水稻怎么防治蟲(chóng)害?","stream": true}
3、點(diǎn)執(zhí)行按鈕,就可以直接執(zhí)行測(cè)試了,先查看接口返回?cái)?shù)據(jù)對(duì)不對(duì),確定接口正確返回?cái)?shù)據(jù)了,再執(zhí)行壓力測(cè)試

