日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

jmeter java接口_JMeter接口Java开发五步曲

發布時間:2023/12/10 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jmeter java接口_JMeter接口Java开发五步曲 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

想做jmeter接口二次開發但不知道如何入手,要解決這個問題,我們可以分為5個步驟

第一步:了解jmeter處理java請求的流程

第二步:通過實現jmeter中的接口JavaSamplerClient編寫自定義JAVA接口

第三步:打包

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

第五步:運行jmeter,添加java請求,進行測試

第一步:了解jmeter處理java請求的架構流程

目標:明白jmeter是怎么處理java請求的。

首先,我們先簡單了解一下Jmeter處理請求的流程:

Jmeter會讀取用戶傳入的數據,把數據初始化到Jmeter中。

調用Java請求時,jmeter會運行內部的runTest函數,調用封裝的JAVA接口,獲取到返回數據

獲取到返回數據后,Jmeter可以把返回數據寫入到結果樹中,這樣就能使用查看結果樹來觀察返回的數據了。

在這個過程中,JMeter內部是使用什么類來進行處理的呢?我們一起來看一下:

Arguments:

org.apache.jmeter.config.Arguments

Jmeter初始化時,會把用戶的參數數據通過Arguments類來加載到內存當中。

JavaSamplerContext:

org.apache.jmeter.protocol.java.sampler.JavaSamplerContext

JavaSamplerContext用于向JavaSamplerClient實現提供上下文信息。比如加載Arguments中的用戶數據

JavaSamplerClient:

這個接口定義了JavaSampler和外部Java程序之間的交互,這些程序可以由JMeter執行。任何想要作為JMeter測試執行的Java類都必須實現這個接口(直接或間接地通過AbstractJavaSamplerClient)。 JMeter將為測試中的每個用戶/線程創建一個JavaSamplerClient實現實例??梢詣摻~外的實例供JMeter內部使用(例如,了解客戶機支持哪些參數)。

當測試啟動時,將在每個線程的JavaSamplerClient實例上調用setupTest()來初始化客戶機。然后在測試的每次迭代中調用runTest()。最后,將調用teardownTest()來允許客戶機進行任何必要的清理。

JavaSamplerClient包括以下4個函數(必須實現這4個函數)

SampleResult runTest(JavaSamplerContext var1);voidteardownTest(JavaSamplerContext var1);

Arguments getDefaultParameters(); ```void setupTest(JavaSamplerContext var1):

加載類時初始化調用的方法,一般獲取參數,建立連接等功能寫在這里。

SampleResult runTest(JavaSamplerContext var1)

實現接口調用的邏輯代碼主要寫在runTest函數下。一般在這里通過SampleResult類定義在Jmeter GUI界面中請求和返回結果數據。

如下圖中,View Results Tree中內容,就是通過SampleResult進行定義

void teardownTest(JavaSamplerContext var1)

類運行結束時,運行這個函數下面的語句,主要用來釋放資源,關閉連接等請求后的操作。

Arguments getDefaultParameters()

提供測試時支持的參數列表。一般參數的初始化放在這里進行,避免在runTest中執行。可以提高執行效率。

SampleResult

主要用于控制展示每次迭代的測試結果。

綜上,用戶數據初始化時,會初始化到Config中,由config模塊的Arguments管理參數,然后我們實現的java請求會通過runTest方法調用封裝的API接口,并根據返回數據在JMeter設置要展示的返回結果。

所以我們二次開發jmeter的JAVA接口請求,需要繼承JavaSamplerClient接口,并實現其中的4個函數。具體怎么實現,我們接下來詳細介紹。

二. 第二步 —— 實現JAVA接口請求--實現登陸接口調用

目標:實現Jmeter的JAVA接口請求

創建Maven項目和項目結構,解決Jmeter Java請求開發的依賴問題

這里使用的是IDEA:新建一個Maven項目

項目的GroupID和ArtifactId

自動生成的項目名稱和項目地址

新建好后就是這樣:然后右下角會彈出一個maven的提示,選擇開啟自動導入

在src/main/java 下添加一個java包名字為 utils

在彈出的窗口中輸入包名:utils,然后點擊ok

成功之后的效果:

這樣,我們的項目和目錄結構就建立完畢了,結構非常簡單。

封裝JAVA的HTTP請求工具類

在utils下新建一個java文件,名稱為HTTPRequestUtils,詳細步驟就不貼圖了,就是對utils點擊右鍵,選擇new->java class

寫上如下的代碼(JAVA實現HTTP請求有多種方式,這只是其中一種):

packageutils;importcom.alibaba.fastjson.JSONObject;import java.io.*;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;public classHTTPRequestUtils {public staticString getDemo(String url) {

HttpURLConnection connection= null;

InputStream inputStream= null;

BufferedReader br= null;

String result= null;//返回結果字符串

try{//創建遠程url連接對象

URL url_obj = newURL(url);//通過遠程url連接對象打開一個連接,強轉成httpURLConnection類

connection =(HttpURLConnection) url_obj.openConnection();//設置連接方式:get

connection.setRequestMethod("GET");//連接服務器的超時時間:10000毫秒

connection.setConnectTimeout(10000);//讀取返回的數據時間:30000毫秒

connection.setReadTimeout(30000);//發送請求

connection.connect();//通過connection連接,獲取輸入流

if (connection.getResponseCode() == 200) {

inputStream=connection.getInputStream();//封裝輸入流is,并指定字符集

br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));//存放數據

StringBuffer stringBuffer = newStringBuffer();

String temp;

temp= null;while (null != (temp =br.readLine())) {

stringBuffer.append(temp);

stringBuffer.append("\r\n");

}

result=stringBuffer.toString();

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{//關閉資源

if (null !=br) {try{

br.close();

}catch(IOException e) {

e.printStackTrace();

}

}if (null !=inputStream) {try{

inputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}//關閉連接

if (null !=connection) {

connection.disconnect();

}

}returnresult;

}public staticString postDemo(String url, JSONObject param, JSONObject headers) {

HttpURLConnection connection= null;

InputStream inputStream= null;

OutputStream outputStream= null;

BufferedReader br= null;

String result= null;try{

URL url_obj= newURL(url);//通過遠程url連接對象打開連接

connection =(HttpURLConnection) url_obj.openConnection();//連接請求方式

connection.setRequestMethod("POST");//設置連接主機服務器超時時間:10000毫秒

connection.setConnectTimeout(10000);//設置讀取主機服務器返回數據超時時間:30000毫秒

connection.setReadTimeout(30000);//默認值為:false,當向遠程服務器傳送數據/寫數據時,需要設置為true

connection.setDoOutput(true);//默認值為:true,當前向遠程服務讀取數據時,設置為true,該參數可有可無

connection.setDoInput(true);//設置傳入參數的格式:請求參數應該是 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");

}//通過連接對象獲取一個輸出流

outputStream =connection.getOutputStream();//通過輸出流對象將參數寫出去/傳輸出去,它是通過字節數組寫出的

outputStream.write(param.toJSONString().getBytes());//通過連接對象獲取一個輸入流,向遠程讀取

if (connection.getResponseCode() == 200) {

inputStream=connection.getInputStream();//對輸入流對象進行包裝:charset根據工作項目組的要求來設置

br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

StringBuffer stringBuffer= newStringBuffer();

String temp;

temp= null;//循環遍歷一行一行讀取數據

while ((temp = br.readLine()) != null) {

stringBuffer.append(temp);

stringBuffer.append("\r\n");

}

result=stringBuffer.toString();

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{//關閉資源

if (null !=br) {try{

br.close();

}catch(IOException e) {

e.printStackTrace();

}

}if (null !=outputStream) {try{

outputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}if (null !=inputStream) {try{

inputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}//斷開與遠程地址url的連接//關閉連接

if (null !=connection) {

connection.disconnect();

}

}returnresult;

}public static voidmain(String[] args) {

String url= "http://182.92.81.159/api/sys/login";

JSONObject loginParams= newJSONObject();

loginParams.put("mobile", "13800000002");

loginParams.put("password", "123456");

JSONObject headers= newJSONObject();

headers.put("Content-Type", "application/json");

String result=HTTPRequestUtils.postDemo(url, loginParams, headers);

System.out.println(result);

}

}

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

postDemo簡單封裝了url,data,headers,能進行簡單的post請求,并返回請求結果。

然后Pom文件中增加對Json的依賴

4.0.0

ihrmLogin

ihrmLogin

1.0-SNAPSHOT

com.alibaba

fastjson

1.2.47

運行調試一下,查看返回結果:

封裝IHRM登陸接口API,并調試通過

補充新建一個api包,包下面新建IHRMLogin文件

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

packageapi;importutils.HTTPRequestUtils;importcom.alibaba.fastjson.JSONObject;public classIHRMLogin {public JSONObject headers = newJSONObject();public JSONObject login_data = newJSONObject();publicString url;publicIHRMLogin(){

url= "http://182.92.81.159/api/sys/login";

}publicString loginIHRM(String mobile, String password) {

login_data.put("mobile", mobile);

login_data.put("password", password);

headers.put("Content-Type", "application/json");return HTTPRequestUtils.postDemo(this.url, login_data, headers);

}public static voidmain(String[] args){

IHRMLogin ihrmLogin= newIHRMLogin();

String response= ihrmLogin.loginIHRM("13800000002","123456");

System.out.println(response);

}

}

我們調用了封裝的HTTPRequestUtils中的postDemo函數,發送了post請求,然后輸出返回結果到控制臺

運行調試:

至此,IHRM系統的登陸接口就已經封裝完畢,后面我們就可以實現java的接口測試用例了。

編寫測試用例實現Jmeter的JavaSamplerClient接口

接下來開始開發jmeter的java 接口,jmeter要訪問外部的java類,必須通過JavaSampleClient或者AbstractJavaSamplerClient。我們這里學習的是“實現JavaSampleClient接口”

添加對JavaSampleClient的依賴包:

點擊File,選擇Project Structure進入

進入配置依賴包的界面

點擊+添加$jmeter_home/lib/ext/中的ApacheJmeter_code和ApacheJmeter_java

添加之后,我們就可以導入我們需要的JavaSamplerClient等相關的類了。

在java目錄下新建java文件TestIHRMLogin

編寫代碼,步驟有5步:

實現的JavaSamplerClient中的4個接口。

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;public class TestIHRMLogin implementsJavaSamplerClient {public voidsetupTest(JavaSamplerContext javaSamplerContext) {

}publicSampleResult runTest(JavaSamplerContext javaSamplerContext) {return null;

}public voidteardownTest(JavaSamplerContext javaSamplerContext) {

}publicArguments getDefaultParameters() {return null;

}

}

實現Arguments函數,代碼如下:

publicArguments getDefaultParameters() {//定義Jmeter GUI中java請求的參數:目前在代碼中添加了兩個參數分別是mobile和password

Arguments arguments = newArguments();

arguments.addArgument("mobile", "");

arguments.addArgument("password", "");returnarguments;

}

實現setupTest,代碼如下:

privateString mobile;privateString password;public voidsetupTest(JavaSamplerContext javaSamplerContext) {//從JavaSamplerConext中讀取用戶傳入的參數:mobile和password

this.mobile = javaSamplerContext.getParameter("mobile");this.password = javaSamplerContext.getParameter("password");

}

實現runTest,runTest是邏輯調用部分,實現調用登陸接口,獲取返回數據,設置返回結果等功能,代碼如下:publicSampleResult runTest(JavaSamplerContext javaSamplerContext) {

SampleResult result= newSampleResult();

IHRMLogin loginApi= newIHRMLogin();//獲取當前線程編號

String threadName =Thread.currentThread().getName();

System.out.println(threadName);//設置返回結果標簽的名稱

result.setSampleLabel("ihrm-" +threadName);//在Jmeter的GUI中展示請求數據

result.setSamplerData("請求的mobile為:" + this.mobile + "\n請求的密碼為:"+ this.password);//開始事務,開始計算時間

result.sampleStart();try{//調用登陸接口,并獲取返回數據

String response = loginApi.loginIHRM(this.mobile, this.password);//把返回結果設置到SampleResult中

result.setResponseData(response, null);//設置返回結果的為Text類型

result.setDataType(SampleResult.TEXT);

result.setSuccessful(true);//輸出結果到控制臺

System.out.println(response);

}catch(Throwable e) {//如果出現異常,則判斷調用失敗

result.setSuccessful(false);

e.printStackTrace();

}finally{//結束事務,計算請求時間

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;public class TestIHRMLogin implementsJavaSamplerClient {privateString mobile;privateString password;public voidsetupTest(JavaSamplerContext javaSamplerContext) {//從JavaSamplerConext中讀取用戶傳入的參數:mobile和password

this.mobile = javaSamplerContext.getParameter("mobile");this.password = javaSamplerContext.getParameter("password");

}publicSampleResult runTest(JavaSamplerContext javaSamplerContext) {

SampleResult result= newSampleResult();

IHRMLogin loginApi= newIHRMLogin();//獲取當前線程編號

String threadName =Thread.currentThread().getName();

System.out.println(threadName);//設置返回結果標簽的名稱

result.setSampleLabel("ihrm-" +threadName);//在Jmeter的GUI中展示請求數據

result.setSamplerData("請求的mobile為:" + this.mobile + "\n請求的密碼為:"+ this.password);//開始事務,開始計算時間

result.sampleStart();try{

String response= loginApi.loginIHRM(this.mobile, this.password);//把返回結果設置到SampleResult中

result.setResponseData(response, null);//設置返回結果的為Text類型

result.setDataType(SampleResult.TEXT);

result.setSuccessful(true);//輸出結果到控制臺

System.out.println(response);

}catch(Throwable e) {

result.setSuccessful(false);

e.printStackTrace();

}finally{//結束事務,計算請求時間

result.sampleEnd();

}returnresult;

}public voidteardownTest(JavaSamplerContext javaSamplerContext) {

}publicArguments getDefaultParameters() {//定義Jmeter GUI中java請求的參數:目前在代碼中添加了兩個參數分別是mobile和password

Arguments arguments = newArguments();

arguments.addArgument("mobile", "");

arguments.addArgument("password", "");returnarguments;

}

}

這樣,我們的代碼部分,就編寫完成了,接下來,我們要把編寫的代碼構建成jar包然后使用起來

三. 第三步 —— 打包

目標:把我們編寫的依賴包和代碼構建成jar包

主要分為2步:

添加jar包

進入Project Structure:

點擊File->Project Structure->Artifacts進入下圖中的界面

添加和配置jar包

添加jar包第一步:

添加jar包第二步:點擊Main Class右邊的文件夾

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

添加成功后的效果:

點擊Apply和ok

構建jar包

構建jar包第1步:

點擊Build-> Build Artifacts...

構建jar包第2步:在彈出的窗口選擇Build

構建jar包第三步,查看生成的jar包

通過以上4步,我們使用IDEA構建生成了一個jar包,生成jar包在項目工具目錄的out文件下,當然,我們也可以使用maven生成,有興趣可以自己嘗試。

四. 第四步 —— 上傳jar包到jmeter的第三方庫

目標:上傳生成的jar包到jmeter的第三方庫

步驟:

第一步:復制生成的jar包

先定位到jar包,對ihrmLogin.jar單擊右鍵,選擇在Finder中打開(Windows 操作系統有略微區別,但是意思差不多)

打開文件夾:

第二步:拷貝到jmeter根目錄/lib/ext目錄下:

五. 第五步 —— 運行jmeter,添加java請求,進行測試

目標:使用jmeter測試我們編寫的java請求

運行jmeter

添加線程組

在線程組下添加Java請求

設置Java請求,在Classname中選擇我們編寫的TestIHRMLogin請求,填入mobile:13800000002,password:123456

從Listener中添加查看結果樹

保存、運行、查看結果

保存

運行

查看結果

結果樹中的返回結果為:

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

啟動Jmeter終端的顯示:

Thread Group 1-1是線程名稱

總結:

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

使用IDE工具IDE開發了jmeter的java請求。

通過jmeter對暴露的api接口JavaSamplerClient來實現編寫能內嵌到jmeter的java請求。

封裝了IHRM項目中的登陸接口

封裝了HTTP協議中的GET請求和Post請求

使用IDEA構建jar包

使用maven的pom文件添加依賴包Json

使用IDEA添加了外部依賴包ApacheJmeter_code.jar和ApacheJmeter_java.jar

但重點是,我們成功的編寫java請求的接口,并實現了在jmeter中成功調用和驗證返回結果

總結

以上是生活随笔為你收集整理的jmeter java接口_JMeter接口Java开发五步曲的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。