Jmeter基礎(chǔ)使用指南
如何安裝jmeter
先下載JAVA:https://www.oracle.com/java/technologies/downloads/#java17
安裝后配置java的環(huán)境變量,當(dāng)打開CMD命令提示符,輸入 java -version有輸出即可
下載地址:https://jmeter.apache.org/download_jmeter.cgi

下載后解壓縮到英文路徑目錄下
將jmeter根目錄路徑和bin文件夾路徑添加到環(huán)境變量完成配置
如何用Jmeter執(zhí)行接口測(cè)試
在jmeter解壓的文件夾中按bin路徑找到j(luò)meter.bat打開

選擇切換中文語(yǔ)言

添加接口集
右鍵測(cè)試計(jì)劃,選擇添加線程組

添加HTTP請(qǐng)求

將完整的請(qǐng)求拆分,填入各個(gè)項(xiàng),例如登錄接口:
POST?http://192.168.2.11:8086/api/v1/auth/login

我們正常可以把通用的請(qǐng)求頭內(nèi)容改為變量,添加一個(gè)用戶定義變量


將請(qǐng)求字段改成調(diào)用變量的形式

POST請(qǐng)求需要額外建一個(gè)請(qǐng)求頭配置元件:HTTP信息頭管理器,并添加屬性值,如Content-Type = application/json(需根據(jù)實(shí)際數(shù)據(jù)類型填寫,例子接口傳輸數(shù)據(jù)類型是json)。

我們同時(shí)可以添加其他各種header里面的內(nèi)容

針對(duì)我們post接口要發(fā)送json格式的數(shù)據(jù),需要將參數(shù)的名稱設(shè)為空,value值是要post的json字符串。

執(zhí)行接口前,先添加一個(gè)監(jiān)聽器用來查看結(jié)果

然后點(diǎn)擊執(zhí)行,結(jié)果即可在監(jiān)聽器中查看

如何解決中文響應(yīng)內(nèi)容亂碼問題
中文內(nèi)容輸出亂碼解決辦法:
找到j(luò)meter.properties文件

在1098行找到#sampleresult.default.encoding=ISO-8859-1

修改成utf-8,重啟jmeter即可

成功后即可輸出正常的中文

如何快捷生成請(qǐng)求
如果接口已經(jīng)發(fā)布,可以在瀏覽器中查詢到接口調(diào)用,可以通過F12開發(fā)者模式獲取接口執(zhí)行的內(nèi)容
選擇對(duì)應(yīng)的接口,右鍵->復(fù)制->以cURL(BASE)格式復(fù)制

然后在jmeter中選擇以cURL格式導(dǎo)入即可
?


然后可以通過生成的請(qǐng)求,修改參數(shù)等做展開測(cè)試
如何同接口調(diào)用不同參數(shù)依次運(yùn)行
可以使用參數(shù)化csv
新建一個(gè)excel文件,將參數(shù)按執(zhí)行一輪取一排的形式輸入,另存為csv
這里以上面的post接口為例,只有一個(gè)json結(jié)構(gòu)的參數(shù):

在jmeter中新建一個(gè)CSV 數(shù)據(jù)文件設(shè)置

根據(jù)實(shí)際情況選擇各個(gè)字段的值

參數(shù)詳解:
l?名稱(Name):腳本中顯示的該元件的描述性名稱,必須填寫。
l?注釋(Comments):對(duì)該元件的說明信息。(非必填寫)
l?文件名(Filename):待讀取文件的名稱??梢詫懭虢^對(duì)路徑,也可以寫入相對(duì)路徑(相對(duì)于bin目錄或者腳本文件所在目錄),如果直接寫文件名,則該文件一定要放在bin目錄中。對(duì)于分布式測(cè)試,主機(jī)和遠(yuǎn)程機(jī)中相應(yīng)目錄下應(yīng)該有相同的CSV文件,必須填寫。(建議填寫相對(duì)路徑,避免腳本遷移時(shí)需要修改路徑)
l?文件編碼(File Encoding):文件讀取時(shí)的編碼格式,不填則使用操作系統(tǒng)的編碼格式。(非必填寫,下拉菜單可選,一般情況下選擇UTF-8即可)
l?變量名稱(Variable Names):變量名列表。對(duì)應(yīng)參數(shù)文件每列的變量名,類似Excel文件的文件頭,起到標(biāo)示作用,同時(shí)也是后續(xù)引用的標(biāo)識(shí)符,建議采用有意義的英文標(biāo)示。例如:eid,name可以被用變量名來引用:${eid},${name}。多個(gè)變量名之間必須用分隔符分隔。如果該項(xiàng)為空,則文件首行會(huì)被讀取并解析為列名。(非必填寫)
l?忽略首行(Ignore first line):是否忽略首行,如果CSV文件中沒有表頭,則選擇False,必須填寫。
l?分隔符(Delimiter):參數(shù)分隔符,將一行數(shù)據(jù)分隔成多個(gè)變量,默認(rèn)為逗號(hào),也可以使用\t。如果一行數(shù)據(jù)分隔后的所獲得的變量數(shù),比Vairable Names中定義的變量少,這些變量將保留以前的值(如果有值的話),必須填寫。
l?是否允許帶引號(hào)?(Allow quoted data?):是否允許變量使用雙引號(hào),允許的話,變量將可以括在雙引號(hào)內(nèi),并且這些變量名可以包含分隔符。(非必填寫)
l?遇到文件結(jié)束符再次循環(huán)?(Recycle on EOF?):是否循環(huán)讀取CSV文件內(nèi)容,默認(rèn)為 True,必須填寫。因?yàn)镃SV Data Set Config組件一次讀入一行,分割后存入若干變量中交給一個(gè)線程組,如果線程數(shù)超過文本的記錄行數(shù),那么可以選擇從頭再次讀入;
????1)為True時(shí),當(dāng)已讀取完參數(shù)文件內(nèi)的測(cè)試用例數(shù)據(jù),還需繼續(xù)獲取用例數(shù)據(jù)時(shí),此時(shí)會(huì)循環(huán)讀取參數(shù)文件數(shù)據(jù)(即:讀取文件到結(jié)尾時(shí),再重頭讀取文件);
????2)為False時(shí),若已至文件末尾,則不再繼續(xù)讀取測(cè)試數(shù)據(jù);通常在“線程組的線程數(shù)“或者”線程組的循環(huán)次數(shù)“>參數(shù)文件組數(shù)時(shí),選用False(即:讀取文件到結(jié)尾時(shí),停止讀取文件);
l?遇到文件結(jié)束符停止線程?(Stop thread on EOF?):如果線程數(shù)超過了數(shù)據(jù)文件中的變量,是否停止,默認(rèn)為 False。當(dāng)Recycle on EOF為True時(shí),此項(xiàng)無意義。
l?線程共享模式(Sharing mode):共享模式,即參數(shù)文件的作用域。如果希望每個(gè)線程擁有自己獨(dú)立的值集合,那么就需要?jiǎng)?chuàng)建一系列數(shù)據(jù)文件,為每個(gè)線程準(zhǔn)備一個(gè)數(shù)據(jù)文件,如test1.csv、test2.csv等,使用文件的方式test${__threadNum}.csv,并將Sharing mode設(shè)置為Current thread。
????1)所有線程All threads(默認(rèn)):文件在所有線程間共享。即當(dāng)前測(cè)試計(jì)劃中的所有線程組中的所有的線程都有效。
????2)當(dāng)前線程組Current thread group:每個(gè)文件會(huì)針對(duì)每個(gè)線程組打開一次。即:對(duì)當(dāng)前線程組中的線程有效。
????3)當(dāng)前線程Current thread:每個(gè)文件會(huì)針對(duì)每個(gè)線程單獨(dú)打開。即:對(duì)當(dāng)前線程有效。
因?yàn)橛?條數(shù)據(jù),所以設(shè)置2次循環(huán),或者設(shè)置2個(gè)線程也行

點(diǎn)擊執(zhí)行后就會(huì)分別取2套參數(shù)運(yùn)行


如何引用其他接口的響應(yīng)數(shù)據(jù)
例如登錄接口獲取的token:
選擇添加json提取器

按對(duì)應(yīng)路徑結(jié)構(gòu)填寫path

路徑方法參考:Json表達(dá)式語(yǔ)法規(guī)則

可以在響應(yīng)結(jié)果中,修改顯示格式為JSON path tester,通過JSON語(yǔ)法試試能不能取到預(yù)期結(jié)果


?
添加BeanShell取樣器

可以通過函數(shù)助手實(shí)現(xiàn)表達(dá)式

屬性名稱代表設(shè)置為全局變量的名稱
存儲(chǔ)結(jié)果就是json提取器提取出來的名稱,即上面填的names of created variables,直接在這里引用即可

我們新增一個(gè)需要在header中帶authorization的get接口

在header中引入變量${__property(token)}

執(zhí)行后發(fā)現(xiàn)參數(shù)已經(jīng)引用成功了
