如何使用jmeter接口java二次開(kāi)發(fā)

想做jmeter接口二次開(kāi)發(fā)但不知道如何入手,要解決這個(gè)問(wèn)題,我們可以分為5個(gè)步驟

第一步:了解jmeter處理java請(qǐng)求的流程

第二步:通過(guò)實(shí)現(xiàn)jmeter中的接口JavaSamplerClient編寫(xiě)自定義JAVA接口

第三步:打包

第四步:將jar包放在jmeter 的第三方庫(kù)目錄

第五步:運(yùn)行jmeter,添加java請(qǐng)求,進(jìn)行測(cè)試

第一步:了解jmeter處理java請(qǐng)求的架構(gòu)流程

目標(biāo):明白jmeter是怎么處理java請(qǐng)求的。

首先,我們先簡(jiǎn)單了解一下Jmeter處理請(qǐng)求的流程:


Jmeter會(huì)讀取用戶傳入的數(shù)據(jù),把數(shù)據(jù)初始化到Jmeter中。

調(diào)用Java請(qǐng)求時(shí),jmeter會(huì)運(yùn)行內(nèi)部的runTest函數(shù),調(diào)用封裝的JAVA接口,獲取到返回?cái)?shù)據(jù)

獲取到返回?cái)?shù)據(jù)后,Jmeter可以把返回?cái)?shù)據(jù)寫(xiě)入到結(jié)果樹(shù)中,這樣就能使用查看結(jié)果樹(shù)來(lái)觀察返回的數(shù)據(jù)了。

在這個(gè)過(guò)程中,JMeter內(nèi)部是使用什么類(lèi)來(lái)進(jìn)行處理的呢?我們一起來(lái)看一下:

Arguments:

位于:org.apache.jmeter.config.Arguments

Jmeter初始化時(shí),會(huì)把用戶的參數(shù)數(shù)據(jù)通過(guò)Arguments類(lèi)來(lái)加載到內(nèi)存當(dāng)中。

JavaSamplerContext:

位于:org.apache.jmeter.protocol.java.sampler.JavaSamplerContext

JavaSamplerContext用于向JavaSamplerClient實(shí)現(xiàn)提供上下文信息。比如加載Arguments中的用戶數(shù)據(jù)

JavaSamplerClient:

這個(gè)接口定義了JavaSampler和外部Java程序之間的交互,這些程序可以由JMeter執(zhí)行。任何想要作為JMeter測(cè)試執(zhí)行的Java類(lèi)都必須實(shí)現(xiàn)這個(gè)接口(直接或間接地通過(guò)AbstractJavaSamplerClient)。 JMeter將為測(cè)試中的每個(gè)用戶/線程創(chuàng)建一個(gè)JavaSamplerClient實(shí)現(xiàn)實(shí)例。可以創(chuàng)建額外的實(shí)例供JMeter內(nèi)部使用(例如,了解客戶機(jī)支持哪些參數(shù))。

當(dāng)測(cè)試啟動(dòng)時(shí),將在每個(gè)線程的JavaSamplerClient實(shí)例上調(diào)用setupTest()來(lái)初始化客戶機(jī)。然后在測(cè)試的每次迭代中調(diào)用runTest()。最后,將調(diào)用teardownTest()來(lái)允許客戶機(jī)進(jìn)行任何必要的清理。

JavaSamplerClient包括以下4個(gè)函數(shù)(必須實(shí)現(xiàn)這4個(gè)函數(shù))

```python void setupTest(JavaSamplerContext var1);

SampleResult runTest(JavaSamplerContext var1);

void teardownTest(JavaSamplerContext var1);

Arguments getDefaultParameters(); ```

void setupTest(JavaSamplerContext var1)

加載類(lèi)時(shí)初始化調(diào)用的方法,一般獲取參數(shù),建立連接等功能寫(xiě)在這里。

SampleResult runTest(JavaSamplerContext var1)

實(shí)現(xiàn)接口調(diào)用的邏輯代碼主要寫(xiě)在runTest函數(shù)下。一般在這里通過(guò)SampleResult類(lèi)定義在Jmeter GUI界面中請(qǐng)求和返回結(jié)果數(shù)據(jù)。

如下圖中,View Results Tree中內(nèi)容,就是通過(guò)SampleResult進(jìn)行定義


void teardownTest(JavaSamplerContext var1)

類(lèi)運(yùn)行結(jié)束時(shí),運(yùn)行這個(gè)函數(shù)下面的語(yǔ)句,主要用來(lái)釋放資源,關(guān)閉連接等請(qǐng)求后的操作。

Arguments getDefaultParameters()

提供測(cè)試時(shí)支持的參數(shù)列表。一般參數(shù)的初始化放在這里進(jìn)行,避免在runTest中執(zhí)行。可以提高執(zhí)行效率。

SampleResult

主要用于控制展示每次迭代的測(cè)試結(jié)果。

綜上,用戶數(shù)據(jù)初始化時(shí),會(huì)初始化到Config中,由config模塊的Arguments管理參數(shù),然后我們實(shí)現(xiàn)的java請(qǐng)求會(huì)通過(guò)runTest方法調(diào)用封裝的API接口,并根據(jù)返回?cái)?shù)據(jù)在JMeter設(shè)置要展示的返回結(jié)果。

所以我們二次開(kāi)發(fā)jmeter的JAVA接口請(qǐng)求,需要繼承JavaSamplerClient接口,并實(shí)現(xiàn)其中的4個(gè)函數(shù)。具體怎么實(shí)現(xiàn),我們接下來(lái)詳細(xì)介紹。

二. 第二步 —— 實(shí)現(xiàn)JAVA接口請(qǐng)求--實(shí)現(xiàn)登陸接口調(diào)用

目標(biāo):實(shí)現(xiàn)Jmeter的JAVA接口請(qǐng)求

創(chuàng)建Maven項(xiàng)目和項(xiàng)目結(jié)構(gòu),解決Jmeter Java請(qǐng)求開(kāi)發(fā)的依賴(lài)問(wèn)題

這里使用的是IDEA:新建一個(gè)Maven項(xiàng)目


項(xiàng)目的GroupID和ArtifactId


自動(dòng)生成的項(xiàng)目名稱(chēng)和項(xiàng)目地址


新建好后就是這樣:然后右下角會(huì)彈出一個(gè)maven的提示,選擇開(kāi)啟自動(dòng)導(dǎo)入

在src/main/java 下添加一個(gè)java包名字為 utils

在彈出的窗口中輸入包名:utils,然后點(diǎn)擊ok

成功之后的效果:

這樣,我們的項(xiàng)目和目錄結(jié)構(gòu)就建立完畢了,結(jié)構(gòu)非常簡(jiǎn)單。

封裝JAVA的HTTP請(qǐng)求工具類(lèi)

在utils下新建一個(gè)java文件,名稱(chēng)為HTTPRequestUtils,詳細(xì)步驟就不貼圖了,就是對(duì)utils點(diǎn)擊右鍵,選擇new->java class

寫(xiě)上如下的代碼(JAVA實(shí)現(xiàn)HTTP請(qǐng)求有多種方式,這只是其中一種):

packageutils;importcom.alibaba.fastjson.JSONObject;importjava.io.*;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;publicclassHTTPRequestUtils{publicstaticStringgetDemo(Stringurl){HttpURLConnectionconnection=null;InputStreaminputStream=null;BufferedReaderbr=null;Stringresult=null;// 返回結(jié)果字符串try{// 創(chuàng)建遠(yuǎn)程url連接對(duì)象URLurl_obj=newURL(url);// 通過(guò)遠(yuǎn)程url連接對(duì)象打開(kāi)一個(gè)連接,強(qiáng)轉(zhuǎn)成httpURLConnection類(lèi)connection=(HttpURLConnection)url_obj.openConnection();// 設(shè)置連接方式:getconnection.setRequestMethod("GET");// 連接服務(wù)器的超時(shí)時(shí)間:10000毫秒connection.setConnectTimeout(10000);// 讀取返回的數(shù)據(jù)時(shí)間:30000毫秒connection.setReadTimeout(30000);// 發(fā)送請(qǐng)求connection.connect();// 通過(guò)connection連接,獲取輸入流if(connection.getResponseCode()==200){inputStream=connection.getInputStream();// 封裝輸入流is,并指定字符集br=newBufferedReader(newInputStreamReader(inputStream,"UTF-8"));// 存放數(shù)據(jù)StringBufferstringBuffer=newStringBuffer();Stringtemp;temp=null;while(null!=(temp=br.readLine())){stringBuffer.append(temp);stringBuffer.append("\r\n");}result=stringBuffer.toString();}}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{// 關(guān)閉資源if(null!=br){try{br.close();}catch(IOExceptione){e.printStackTrace();}}if(null!=inputStream){try{inputStream.close();}catch(IOExceptione){e.printStackTrace();}}// 關(guān)閉連接if(null!=connection){connection.disconnect();}}returnresult;}publicstaticStringpostDemo(Stringurl,JSONObjectparam,JSONObjectheaders){HttpURLConnectionconnection=null;InputStreaminputStream=null;OutputStreamoutputStream=null;BufferedReaderbr=null;Stringresult=null;try{URLurl_obj=newURL(url);// 通過(guò)遠(yuǎn)程url連接對(duì)象打開(kāi)連接connection=(HttpURLConnection)url_obj.openConnection();// 連接請(qǐng)求方式connection.setRequestMethod("POST");// 設(shè)置連接主機(jī)服務(wù)器超時(shí)時(shí)間:10000毫秒connection.setConnectTimeout(10000);// 設(shè)置讀取主機(jī)服務(wù)器返回?cái)?shù)據(jù)超時(shí)時(shí)間:30000毫秒connection.setReadTimeout(30000);// 默認(rèn)值為:false,當(dāng)向遠(yuǎn)程服務(wù)器傳送數(shù)據(jù)/寫(xiě)數(shù)據(jù)時(shí),需要設(shè)置為trueconnection.setDoOutput(true);// 默認(rèn)值為:true,當(dāng)前向遠(yuǎn)程服務(wù)讀取數(shù)據(jù)時(shí),設(shè)置為true,該參數(shù)可有可無(wú)connection.setDoInput(true);// 設(shè)置傳入?yún)?shù)的格式:請(qǐng)求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。if(null!=headers.get("Content-Type")){connection.setRequestProperty("Content-Type",(String)headers.get("Content-Type"));}else{connection.setRequestProperty("Content-Type","application/json");}// 通過(guò)連接對(duì)象獲取一個(gè)輸出流outputStream=connection.getOutputStream();// 通過(guò)輸出流對(duì)象將參數(shù)寫(xiě)出去/傳輸出去,它是通過(guò)字節(jié)數(shù)組寫(xiě)出的outputStream.write(param.toJSONString().getBytes());// 通過(guò)連接對(duì)象獲取一個(gè)輸入流,向遠(yuǎn)程讀取if(connection.getResponseCode()==200){inputStream=connection.getInputStream();// 對(duì)輸入流對(duì)象進(jìn)行包裝:charset根據(jù)工作項(xiàng)目組的要求來(lái)設(shè)置br=newBufferedReader(newInputStreamReader(inputStream,"UTF-8"));StringBufferstringBuffer=newStringBuffer();Stringtemp;temp=null;// 循環(huán)遍歷一行一行讀取數(shù)據(jù)while((temp=br.readLine())!=null){stringBuffer.append(temp);stringBuffer.append("\r\n");}result=stringBuffer.toString();}}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{// 關(guān)閉資源if(null!=br){try{br.close();}catch(IOExceptione){e.printStackTrace();}}if(null!=outputStream){try{outputStream.close();}catch(IOExceptione){e.printStackTrace();}}if(null!=inputStream){try{inputStream.close();}catch(IOExceptione){e.printStackTrace();}}// 斷開(kāi)與遠(yuǎn)程地址url的連接// 關(guān)閉連接if(null!=connection){connection.disconnect();}}returnresult;}publicstaticvoidmain(String[]args){Stringurl="http://182.92.81.159/api/sys/login";JSONObjectloginParams=newJSONObject();loginParams.put("mobile","13800000002");loginParams.put("password","123456");JSONObjectheaders=newJSONObject();headers.put("Content-Type","application/json");Stringresult=HTTPRequestUtils.postDemo(url,loginParams,headers);System.out.println(result);}}

在這個(gè)代碼里面,我們封裝了Get請(qǐng)求和Post請(qǐng)求,其中postDemo請(qǐng)求是我們要使用的方法。

postDemo簡(jiǎn)單封裝了url,data,headers,能進(jìn)行簡(jiǎn)單的post請(qǐng)求,并返回請(qǐng)求結(jié)果。

然后Pom文件中增加對(duì)Json的依賴(lài)

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>ihrmLogin</groupId><artifactId>ihrmLogin</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency></dependencies></project>

運(yùn)行調(diào)試一下,查看返回結(jié)果:

封裝IHRM登陸接口API,并調(diào)試通過(guò)

補(bǔ)充新建一個(gè)api包,包下面新建IHRMLogin文件

IHRMLogin就是登陸的接口,我們寫(xiě)上如下代碼:

packageapi;importutils.HTTPRequestUtils;importcom.alibaba.fastjson.JSONObject;publicclassIHRMLogin{publicJSONObjectheaders=newJSONObject();publicJSONObjectlogin_data=newJSONObject();publicStringurl;publicIHRMLogin(){url="http://182.92.81.159/api/sys/login";}publicStringloginIHRM(Stringmobile,Stringpassword){login_data.put("mobile",mobile);login_data.put("password",password);headers.put("Content-Type","application/json");returnHTTPRequestUtils.postDemo(this.url,login_data,headers);}publicstaticvoidmain(String[]args){IHRMLoginihrmLogin=newIHRMLogin();Stringresponse=ihrmLogin.loginIHRM("13800000002","123456");System.out.println(response);}}

我們調(diào)用了封裝的HTTPRequestUtils中的postDemo函數(shù),發(fā)送了post請(qǐng)求,然后輸出返回結(jié)果到控制臺(tái)

運(yùn)行調(diào)試:

至此,IHRM系統(tǒng)的登陸接口就已經(jīng)封裝完畢,后面我們就可以實(shí)現(xiàn)java的接口測(cè)試用例了。

編寫(xiě)測(cè)試用例實(shí)現(xiàn)Jmeter的JavaSamplerClient接口

接下來(lái)開(kāi)始開(kāi)發(fā)jmeter的java 接口,jmeter要訪問(wèn)外部的java類(lèi),必須通過(guò)JavaSampleClient或者AbstractJavaSamplerClient。我們這里學(xué)習(xí)的是“實(shí)現(xiàn)JavaSampleClient接口”

添加對(duì)JavaSampleClient的依賴(lài)包:

點(diǎn)擊File,選擇Project Structure進(jìn)入

進(jìn)入配置依賴(lài)包的界面

點(diǎn)擊+添加$jmeter_home/lib/ext/中的ApacheJmeter_code和ApacheJmeter_java

添加之后,我們就可以導(dǎo)入我們需要的JavaSamplerClient等相關(guān)的類(lèi)了。

在java目錄下新建java文件TestIHRMLogin

編寫(xiě)代碼,步驟有5步:

實(shí)現(xiàn)的JavaSamplerClient中的4個(gè)接口。

importorg.apache.jmeter.config.Arguments;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerClient;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;importapi.IHRMLogin;publicclassTestIHRMLoginimplementsJavaSamplerClient{publicvoidsetupTest(JavaSamplerContextjavaSamplerContext){}publicSampleResultrunTest(JavaSamplerContextjavaSamplerContext){returnnull;}publicvoidteardownTest(JavaSamplerContextjavaSamplerContext){}publicArgumentsgetDefaultParameters(){returnnull;}}

實(shí)現(xiàn)Arguments函數(shù),代碼如下:

publicArgumentsgetDefaultParameters(){// 定義Jmeter GUI中java請(qǐng)求的參數(shù):目前在代碼中添加了兩個(gè)參數(shù)分別是mobile和passwordArgumentsarguments=newArguments();arguments.addArgument("mobile","");arguments.addArgument("password","");returnarguments;}

實(shí)現(xiàn)setupTest,代碼如下:

privateStringmobile;privateStringpassword;publicvoidsetupTest(JavaSamplerContextjavaSamplerContext){// 從JavaSamplerConext中讀取用戶傳入的參數(shù):mobile和passwordthis.mobile=javaSamplerContext.getParameter("mobile");this.password=javaSamplerContext.getParameter("password");}

實(shí)現(xiàn)runTest,runTest是邏輯調(diào)用部分,實(shí)現(xiàn)調(diào)用登陸接口,獲取返回?cái)?shù)據(jù),設(shè)置返回結(jié)果等功能,代碼如下:

publicSampleResultrunTest(JavaSamplerContextjavaSamplerContext){SampleResultresult=newSampleResult();IHRMLoginloginApi=newIHRMLogin();// 獲取當(dāng)前線程編號(hào)StringthreadName=Thread.currentThread().getName();System.out.println(threadName);// 設(shè)置返回結(jié)果標(biāo)簽的名稱(chēng)result.setSampleLabel("ihrm-"+threadName);// 在Jmeter的GUI中展示請(qǐng)求數(shù)據(jù)result.setSamplerData("請(qǐng)求的mobile為:"+this.mobile+"\n請(qǐng)求的密碼為:"+this.password);// 開(kāi)始事務(wù),開(kāi)始計(jì)算時(shí)間result.sampleStart();try{// 調(diào)用登陸接口,并獲取返回?cái)?shù)據(jù)Stringresponse=loginApi.loginIHRM(this.mobile,this.password);// 把返回結(jié)果設(shè)置到SampleResult中result.setResponseData(response,null);// 設(shè)置返回結(jié)果的為T(mén)ext類(lèi)型result.setDataType(SampleResult.TEXT);result.setSuccessful(true);// 輸出結(jié)果到控制臺(tái)System.out.println(response);}catch(Throwablee){// 如果出現(xiàn)異常,則判斷調(diào)用失敗result.setSuccessful(false);e.printStackTrace();}finally{// 結(jié)束事務(wù),計(jì)算請(qǐng)求時(shí)間result.sampleEnd();}returnresult;}

綜上,完整的代碼是這樣:

importorg.apache.jmeter.config.Arguments;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerClient;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;importapi.IHRMLogin;publicclassTestIHRMLoginimplementsJavaSamplerClient{privateStringmobile;privateStringpassword;publicvoidsetupTest(JavaSamplerContextjavaSamplerContext){// 從JavaSamplerConext中讀取用戶傳入的參數(shù):mobile和passwordthis.mobile=javaSamplerContext.getParameter("mobile");this.password=javaSamplerContext.getParameter("password");}publicSampleResultrunTest(JavaSamplerContextjavaSamplerContext){SampleResultresult=newSampleResult();IHRMLoginloginApi=newIHRMLogin();// 獲取當(dāng)前線程編號(hào)StringthreadName=Thread.currentThread().getName();System.out.println(threadName);// 設(shè)置返回結(jié)果標(biāo)簽的名稱(chēng)result.setSampleLabel("ihrm-"+threadName);// 在Jmeter的GUI中展示請(qǐng)求數(shù)據(jù)result.setSamplerData("請(qǐng)求的mobile為:"+this.mobile+"\n請(qǐng)求的密碼為:"+this.password);// 開(kāi)始事務(wù),開(kāi)始計(jì)算時(shí)間result.sampleStart();try{Stringresponse=loginApi.loginIHRM(this.mobile,this.password);// 把返回結(jié)果設(shè)置到SampleResult中result.setResponseData(response,null);// 設(shè)置返回結(jié)果的為T(mén)ext類(lèi)型result.setDataType(SampleResult.TEXT);result.setSuccessful(true);// 輸出結(jié)果到控制臺(tái)System.out.println(response);}catch(Throwablee){result.setSuccessful(false);e.printStackTrace();}finally{// 結(jié)束事務(wù),計(jì)算請(qǐng)求時(shí)間result.sampleEnd();}returnresult;}publicvoidteardownTest(JavaSamplerContextjavaSamplerContext){}publicArgumentsgetDefaultParameters(){// 定義Jmeter GUI中java請(qǐng)求的參數(shù):目前在代碼中添加了兩個(gè)參數(shù)分別是mobile和passwordArgumentsarguments=newArguments();arguments.addArgument("mobile","");arguments.addArgument("password","");returnarguments;}}

這樣,我們的代碼部分,就編寫(xiě)完成了,接下來(lái),我們要把編寫(xiě)的代碼構(gòu)建成jar包然后使用起來(lái)

三. 第三步 —— 打包

目標(biāo):把我們編寫(xiě)的依賴(lài)包和代碼構(gòu)建成jar包

主要分為2步:

添加jar包

進(jìn)入Project Structure:

點(diǎn)擊File->Project Structure->Artifacts進(jìn)入下圖中的界面

添加和配置jar包

添加jar包第一步:

添加jar包第二步:點(diǎn)擊Main Class右邊的文件夾

添加jar包第三步:選擇IHRMLogin,然后連續(xù)ok下去,jar包就添加成功了

添加成功后的效果:

點(diǎn)擊Apply和ok

構(gòu)建jar包

構(gòu)建jar包第1步:

點(diǎn)擊Build-> Build Artifacts...

構(gòu)建jar包第2步:在彈出的窗口選擇Build

構(gòu)建jar包第三步,查看生成的jar包

通過(guò)以上4步,我們使用IDEA構(gòu)建生成了一個(gè)jar包,生成jar包在項(xiàng)目工具目錄的out文件下,當(dāng)然,我們也可以使用maven生成,有興趣可以自己嘗試。

四. 第四步 —— 上傳jar包到j(luò)meter的第三方庫(kù)

目標(biāo):上傳生成的jar包到j(luò)meter的第三方庫(kù)

步驟:

第一步:復(fù)制生成的jar包

先定位到j(luò)ar包,對(duì)ihrmLogin.jar單擊右鍵,選擇在Finder中打開(kāi)(Windows 操作系統(tǒng)有略微區(qū)別,但是意思差不多)

打開(kāi)文件夾:

第二步:拷貝到j(luò)meter根目錄/lib/ext目錄下:

五. 第五步 —— 運(yùn)行jmeter,添加java請(qǐng)求,進(jìn)行測(cè)試

目標(biāo):使用jmeter測(cè)試我們編寫(xiě)的java請(qǐng)求

運(yùn)行jmeter

添加線程組

在線程組下添加Java請(qǐng)求

設(shè)置Java請(qǐng)求,在Classname中選擇我們編寫(xiě)的TestIHRMLogin請(qǐng)求,填入mobile:13800000002,password:123456

從Listener中添加查看結(jié)果樹(shù)

保存、運(yùn)行、查看結(jié)果

保存

運(yùn)行

查看結(jié)果

結(jié)果樹(shù)中的返回結(jié)果為:

{"success":true,"code":10000,"message":"操作成功!","data":"ec309ba7-c7ee-4b9b-a6da-8161d3ed9569"}

啟動(dòng)Jmeter終端的顯示:

Thread Group 1-1是線程名稱(chēng)

總結(jié):

在本篇文章中,我們主要完成了以下事情:

使用IDE工具IDE開(kāi)發(fā)了jmeter的java請(qǐng)求。

通過(guò)jmeter對(duì)暴露的api接口JavaSamplerClient來(lái)實(shí)現(xiàn)編寫(xiě)能內(nèi)嵌到j(luò)meter的java請(qǐng)求。

封裝了IHRM項(xiàng)目中的登陸接口

封裝了HTTP協(xié)議中的GET請(qǐng)求和Post請(qǐng)求

使用IDEA構(gòu)建jar包

使用maven的pom文件添加依賴(lài)包Json

使用IDEA添加了外部依賴(lài)包ApacheJmeter_code.jar和ApacheJmeter_java.jar

但重點(diǎn)是,我們成功的編寫(xiě)java請(qǐng)求的接口,并實(shí)現(xiàn)了在jmeter中成功調(diào)用和驗(yàn)證返回結(jié)果

六.參考:

官方KPI:?https://jmeter.apache.org/api/index.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容