聊一聊Jmeter的简单使用
背景
近段時(shí)間,團(tuán)隊(duì)想補(bǔ)強(qiáng)測(cè)試這一塊,減少重復(fù)性的一些工作,讓一些內(nèi)容可以自動(dòng)化起來(lái),同時(shí)對(duì)開(kāi)發(fā)同學(xué)寫(xiě)的接口的性能也開(kāi)始有所要求了。
考慮到團(tuán)隊(duì)內(nèi)沒(méi)有人有測(cè)試開(kāi)發(fā)的經(jīng)驗(yàn),所以前期的選擇還是以工具為主,編程為輔。
說(shuō)起工具,用的比較多的是 Jmeter ,它即可以處理自動(dòng)化的測(cè)試,也可以完成性能測(cè)試。
后面也會(huì)不定期更新一些在使用 Jmeter 時(shí)候的經(jīng)驗(yàn)。
開(kāi)篇往往都會(huì)是比較簡(jiǎn)單的內(nèi)容。
所以這一篇寫(xiě)的內(nèi)容主要是拿一個(gè) HTTP 接口出來(lái),然后通過(guò)配置,在 Jmeter 中成功訪問(wèn)這個(gè)接口,并斷言請(qǐng)求成功與否,查看結(jié)果。
最后還會(huì)通過(guò) CLI 來(lái)跑測(cè)試計(jì)劃,輸出 HTML 格式的報(bào)告。
下面就開(kāi)始吧!
準(zhǔn)備一個(gè) HTTP 接口
這里創(chuàng)建一個(gè) ASP.NET Core Web API 項(xiàng)目,同時(shí)寫(xiě)一個(gè)簡(jiǎn)單到不能再簡(jiǎn)單的接口,直接返回一個(gè) JSON 串。
[ApiController] [Route("[controller]")] public?class?RunController?:?ControllerBase {????????[HttpGet]public?IActionResult?Get(){return?Ok(new?{code?=?0,msg?=?"ok"});} }把這個(gè)項(xiàng)目啟動(dòng)起來(lái),暴露出 8532 端口。
下面就開(kāi)始在 Jmeter 里面對(duì)這個(gè)接口進(jìn)行配置和調(diào)試了。
添加線程組
在測(cè)試計(jì)劃添加一個(gè)線程組 (Thread Group)
添加完成之后可以看到下面的內(nèi)容
在線程組中,最為主要的就是 Thread Properties 的配置了,不過(guò)這里先不對(duì)這個(gè)進(jìn)行修改,先保持默認(rèn)值。
因?yàn)槭紫纫龅氖虑槭?#xff0c;把測(cè)試接口調(diào)試通!如果接口沒(méi)調(diào)好,設(shè)置再多的線程也沒(méi)有意義!
所以這里只把名字改成了 sample1 。
線程組有了,就相當(dāng)于有了一個(gè)骨架,下面就要對(duì)這個(gè)線程組填充內(nèi)容,讓它豐富起來(lái)。
由于我們主要是對(duì) HTTP 接口進(jìn)行測(cè)試,所以大部分內(nèi)容會(huì)是和 HTTP 相關(guān)的。
添加 HTTP 請(qǐng)求默認(rèn)值
在線程組里面,添加一個(gè) HTTP 請(qǐng)求默認(rèn)值的配置元件 (HTTP Request Defaults)
這里一般會(huì)配置一些不怎么變的東西,正常就是接口的域名信息,指定好之后,后面就可以不用在填接口的域名了。
下面就把測(cè)試接口的 IP 和 端口填上去。
添加 HTTP 信息頭管理器
請(qǐng)求頭,大部分接口都會(huì)有要求的,最常見(jiàn)的應(yīng)該就是 Content-Type 。
這里就可以添加一個(gè) HTTP 信息頭管理器(HTTP Header Manager)來(lái)管理這些請(qǐng)求頭。
測(cè)試接口是 JSON 格式的,所以要把 Content-Type 和 application/json 配置上去。
再下一步就是真正的請(qǐng)求了。
添加 HTTP 請(qǐng)求
在線程組里面添加一個(gè) HTTP Request 類型的 Sampler。
這一個(gè)步驟要根據(jù)對(duì)應(yīng)的測(cè)試接口填寫(xiě)對(duì)應(yīng)的信息。
以測(cè)試接口為例:
Web Server 這一塊內(nèi)容不用填,我們?cè)?HTTP 請(qǐng)求默認(rèn)值 里面已經(jīng)配置了。
測(cè)試接口是 GET 請(qǐng)求, 測(cè)試接口的相對(duì)路徑是 /run
接口參數(shù)填了 a=b&c=d ,因?yàn)槭?GET 請(qǐng)求,放到相對(duì)路徑上面去也是可以的。
到這里的話,對(duì)這個(gè)接口的請(qǐng)求內(nèi)容已經(jīng)準(zhǔn)備好了。
要怎么判斷請(qǐng)求這個(gè)接口是不是成功了呢?
接口成功與否,一般會(huì)有幾類標(biāo)識(shí),一類是當(dāng)狀態(tài)碼為 2xx 時(shí)就當(dāng)作是成功的,一類是返回的 JSON 里面包含了一個(gè) code ,用這個(gè) code 的值來(lái)判斷。
上面的測(cè)試接口是屬于第二類,所以要判斷的是返回內(nèi)容里面 code 的具體值是什么。
回想到單元測(cè)試,會(huì)有一個(gè)斷言的步驟去判斷是不是達(dá)到了預(yù)期的結(jié)果。
同樣的,Jmeter 這里也有這個(gè)內(nèi)容。這里選用的是 JSON 斷言。
添加 JSON 斷言
在線程組里面添加一個(gè) JSON 斷言(JSON Assertion)
示例接口返回 code 為 0 時(shí),才是成功的,所以可以這樣填寫(xiě)
首先是判斷節(jié)點(diǎn)存在與否,其次是勾選斷言值,填上期望值。
現(xiàn)在請(qǐng)求有了,斷言有了,要怎么查看結(jié)果呢?
這里就要請(qǐng)出監(jiān)聽(tīng)器這個(gè)神奇的東西了。
添加監(jiān)聽(tīng)器
監(jiān)聽(tīng)器的種類有很多,這里選擇查看結(jié)果樹(shù)(View Results Tree)和聚合報(bào)告(Aggregate Report)兩個(gè)。
這個(gè)時(shí)候,整一個(gè)測(cè)試計(jì)劃是這樣的:
運(yùn)行一下,打開(kāi)查看結(jié)果樹(shù),可以看到測(cè)試接口已經(jīng)跑成功了,返回的 code 確實(shí)也是 0。
如果把 JSON 斷言里面的 code 調(diào)整成 1,查看結(jié)果樹(shù)這里就會(huì)有錯(cuò)誤提示:
再來(lái)看看聚合報(bào)告長(zhǎng)什么樣:
主要就是平均響應(yīng)時(shí)間,中位數(shù),錯(cuò)誤率,吞吐量這些常見(jiàn)指標(biāo)。
到這里是不是就結(jié)束了呢?
當(dāng)然沒(méi)有結(jié)束,從剛才的結(jié)果來(lái)看,明顯才請(qǐng)求了一次接口,請(qǐng)求一次接口怎么測(cè)試接口的壓力呢?
其實(shí)一直到看到結(jié)果是能成功請(qǐng)求接口,返回正常的數(shù)據(jù)了,才算是剛剛把接口那部分配置調(diào)試好,并沒(méi)有真正的給壓力到測(cè)試接口。
前面在創(chuàng)建線程組的時(shí)候,采取的都是默認(rèn)值 1,下面可以調(diào)整線程組的一些配置來(lái)達(dá)到壓測(cè)的目的。
好比說(shuō)把線程數(shù)調(diào)成 100,循環(huán) 100 次。
CLI 運(yùn)行 Jmeter
在啟動(dòng) Jmeter 時(shí),可以看到下面這段話。
就是讓我們做壓力測(cè)試的時(shí)候不要用圖形化界面,而是用腳本來(lái)操作。
要用腳本操作,還是要先有配置文件,這個(gè)配置文件在保存測(cè)試計(jì)劃的那個(gè) jmx 文件。
下面是幾個(gè)常用的參數(shù)說(shuō)明:
| -n | 指定 JMeter 將在 cli 模式下運(yùn)行 |
| -t | 包含測(cè)試計(jì)劃的 jmx 文件名稱 |
| -l | 記錄測(cè)試結(jié)果的 jtl 文件名稱 |
| -j | 記錄 Jmeter 運(yùn)行日志的文件名稱 |
| -g | 輸出報(bào)告文件( .csv 文件) |
| -e | 生成 html 格式的測(cè)試報(bào)表 |
| -o | 生成測(cè)試報(bào)表的文件夾 文件夾不存在或?yàn)榭?/td> |
下面我們通過(guò) CLI 來(lái)執(zhí)行一下,并生成一個(gè) HTML 報(bào)告。
?.\jmeter.bat?-n?-t?..\..\jmeterfiles\jmx\sample1.jmx?-l?result\sample1.jtl?-e?-o?result\sample1sample1.jmx 就是上面保存的腳本文件。
同時(shí)看看輸出的測(cè)試報(bào)告
打開(kāi) index.html 可以看到測(cè)試報(bào)告了。
這個(gè)面板的內(nèi)容是很詳細(xì)的。
寫(xiě)在最后
這一篇內(nèi)容比較基礎(chǔ),就是走了一遍 Jmeter 的基本操作。
對(duì)于一些常見(jiàn)的參數(shù)化,引用自定義 jar 包這些內(nèi)容還沒(méi)有介紹到。
相對(duì)來(lái)說(shuō),Jmeter 在測(cè)試的場(chǎng)景用起來(lái)還是比較 OK 的。
總結(jié)
以上是生活随笔為你收集整理的聊一聊Jmeter的简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 实际体验SpanT 的惊人表现
- 下一篇: Web通用令牌JwtBuilder