999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JMeter工具二次開發之自定義函數

2023-04-13 23:46:22周燕肖玉王智超
計算機時代 2023年4期
關鍵詞:二次開發

周燕 肖玉 王智超

摘? 要: 許多應用系統功能日益復雜,JMeter已有的功能組件時常無法滿足測試需求。文章根據JMeter的開源特性,對其進行二次開發,通過自定義函數擴展其已有功能;詳細介紹JMeter自定義函數開發的原理和流程并給出關鍵代碼的實現過程;結合WebTours系統,將完成的自定義函數應用于具體的測試場景。幫助測試人員快速掌握自定義函數的實現與應用,實現定制化的功能,以滿足個性化的測試需求。

關鍵詞: JMeter; 開源; 自定義函數; 二次開發

中圖分類號:TP31? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2023)02-135-04

Abstract: Many application systems have increasingly complex functions, and JMeter's existing functional components often fail to meet the test requirements. In this paper, based on the open source characteristics of JMeter, we perform secondary development and extend its existing functions through custom functions. The principle and flow of JMeter custom function development are introduced in detail, and the realization process of key code is given. Combined with the WebTours system, the completed custom functions are applied to specific test scenarios. It helps testers to quickly master the implementation and application of custom functions, realize customized functions, and meet personalized test requirements.

Key words: JMeter; open source; custom functions; secondary development

0 引言

JMeter是Apache基金會旗下一款優秀的性能測試和接口測試工具,已經被越來越多的公司所采用。與同類的性能測試工具LoadRunner、接口測試工Postman相比,其優點是100%純Java[1]開發且開源、有較強的擴展性。它擁有豐富的插件、元件和函數等功能來滿足各種測試需求。但隨著應用系統業務邏輯復雜性的大幅提升,系統的功能也日益個性化,測試工作的難度陡增。JMeter已有功能更多的是針對一些通用性的功能而開發,很難滿足這種個性化的需求。得益于其開源特性,JMeter擁有其他測試工具所沒有的可靈活擴展性,用戶可根據實際功能需求和測試場景,對JMeter做二次開發[2],實現個性化的測試需求。JMeter二次開發一般分為三類情況:自定義組件、自定義請求和自定義函數。在JMeter中通過函數可以靈活的獲取動態變化的值,代替錄制腳本時所設置的固定值,對腳本進行參數化,使整個測試過程更加貼近實際的應用場景。

1 JMeter函數介紹

在性能和接口測試過程中,通常需要將用戶輸入的數據提交給服務器進行處理,例如測試登入功能需要用戶輸入用戶名和密碼。但是每個用戶登入的用戶名和密碼都不一樣,測試時為了模擬真實的用戶場景,就需要讓用戶輸入的內容每次都發生變化,這個過程叫做參數化。

JMeter中的配置元件與前置處理器[3]都可以實現參數化,但使用起來較復雜且不夠靈活,為了能夠更好的幫助用戶進行參數化,JMeter提供了一組庫函數來幫助用戶生成需要的數據。在JMeter菜單選項中的函數助手對話框中,可以看到JMeter自帶了許多的庫函數[4],如常用的RandomString、counter等,如圖1。每個函數主要分為上下兩部分,上半部分是函數參數,所有參數以表格的形式進行展示,左邊為參數的描述,方便用戶理解參數的含義,右邊則可由用戶來輸入該參數相應的值;下半部分是函數的結果,當用戶點擊“生成”按鈕后下方會展示根據用戶輸入的參數,該函數所返回的結果。同時JMeter會根據函數名和用戶選擇的參數,自動生成函數的調用字符串例如:${__RandomString(3,abc123dw,str)},并自動做了復制功能,用戶可以直接拷貝到需要調用的地方。

不同接口測試、性能測試項目或場景中,有不同的特性,已有的這些函數只能滿足80%的業務需要。例如函數庫中RandomString函數,可以生成指定長度的隨機字符串,但在實際測試業務中,需要的字符串可能還要求有固定的前綴,那么已有庫函數就無法滿足測試需求,而自定義函數剛好可以解決此問題。

2 開發自定義函數

JMeter不僅是一個測試工具,而且還是一個優秀的框架,其提供了豐富的jar包方便用戶進行二次開發,下面將在庫函數RandomString的基礎上進行優化擴展,開發一個自定義函數PrefixRandomString——帶前綴的隨機字符串,以此為例介紹自定義函數開發的原理和整個流程。

2.1 選擇開發工具

JMeter是使用Java開發的,進行二次開發時需要使用支持Java的開發工具,比如Eclipse、IntelliJ IDEA等來編寫自定義函數。下文中使用開源軟件Eclipse進行開發,先在eclipse中選擇菜單File->New->Java Project創建一個普通的Java項目即可。

2.2 添加依賴的jar包

JMeter安裝目錄lib/ext中的ApacheJMeter_core.jar包,是JMeter中的核心jar包,該jar包中實現了對JMeter進行二次開發的一些基本框架和功能。在進行開發時,要依賴該jar包,需要提前導入Java項目的referenced libraries中。

2.3 類的設計與實現

自定義函數的所有功能都封裝在Java類中,其代碼需要符合JMeter的編碼規范——擴展函數的Java類,其包名必須是.function,JMeter通過類的命名規則確保當其以非GUI模式運行時一些核心的類也能夠被正常加載。自定義函數類所在的包名可以參考JMeter自帶庫函數類所在包的名稱org.apache.jmeter.functions來進行命名;同時該類還要繼承ApacheJMeter_core.jar包中的AbstractFunction 類,并重寫父類中的四個方法。

⑴ getReferenceKey方法:該方法返回自定義函數的名稱。每個函數都有一個獨一無二的名稱,所以必須重寫這個方法。函數的名稱反映了其功能,要做到顧名思義,方便用戶使用。根據JMeter的規范,函數名稱一般以雙下劃線開頭,如__RandomString、__Time等,而且建議與類名同名。參考代碼如下:

@Override

public String getReferenceKey() {

return "__PrefixRandomString";

}

⑵ getArgumentDesc方法:該方法描述了函數的參數。如果自定義函數沒有參數,則可以不用重寫這個方法;如果有參數,為了便于函數調用者輸入參數,需要在這里返回函數參數說明。函數的參數一般情況下固定不變,常將其參數描述存放在全局靜態變量list中,而在函數體中直接將這個list返回,參考代碼如下:

private static final List args=new LinkedList

();

static {

args.add("指定前綴(必填)");

args.add("隨機字符串的長度(必填,不包括前綴)");

args.add("組成字符串的字符(可選)");

args.add("存儲結果的變量名(可選)");

}

@Override

public List getArgumentDesc() {

return args;

}

⑶ setParameters方法:該方法傳遞用戶調用過程中傳入的實際參數值。對于有參數的函數,可以在該方法中獲取用戶調用函數時傳遞過來的參數,并對參數的個數、類型等進行有效性校驗,保證函數的健壯性和正確性。參考代碼如下:

public void setParameters(Collection

arg0) throws InvalidVariableException {

//檢查參數是否為2到4個

checkParameterCount(arg0, 2, 4);

Object data[]=arg0.toArray();

//獲取前綴

prefix=((CompoundVariable) data[0]).execute();

//獲取長度

length=Integer.parseInt(((CompoundVariable) data[1])

.execute());

//如果指定了組成字符串的字符,則獲取使用的字符串

if (data.length>2) {

charsToUse=((CompoundVariable) data[2])

.execute().trim();

}

//如果輸入了存儲結果的變量名,則獲取變量名

if (data.length>3) {

varName=((CompoundVariable) data[3])

.execute().trim();

}

}

⑷ Execute方法:該方法是自定義函數中最關鍵的部分。根據業務規則,實現自定義函數的核心邏輯,將最終生成的結果返回,參考代碼如下:

@Override

public String execute(SampleResult arg0, Sampler

arg1) throws InvalidVariableException {

//最后的結果由用戶輸入的前綴+隨機生成的字符串組成

String myValue=prefix;

if (StringUtils.isEmpty(charsToUse))

myValue+=RandomStringUtils.random(length);

else {

myValue+=RandomStringUtils.random

(length, charsToUse);

}

//如果輸入了存儲結果的變量名,將結果保存到變量中

if (varName.length()>0) {

JMeterVariables vars=getVariables();

if (vars!=null) {

vars.put(varName, myValue);

}

}

returnmyValue;

}

2.4 單元測試

完成自定義函數的開發后,還需要測試函數功能是否正常。一般使用了java語言自帶的單元測試框架Junit[6]進行測試,開發工具Eclipse中已經集成了JUnit作為單元測試的工具。

2.5 使用自定義函數

代碼調試無誤后,在開發工具Eclipse中右鍵單擊項目名稱,選擇菜單Export->JAR file將整個項目打包導出為jar包,拷貝至jmeter安裝目錄lib/ext的文件夾下。JMeter啟動時會自動加載該目錄下符合要求的jar包。

重啟JMeter,打開函數助手對話框,在下拉列表中就能看到所開發的自定義函數,用戶像使用普通的庫函數一樣使用它即可,如圖2所示。

通過函數助手界面可以發現,getReferenceKey方法中所返回的函數名對應著界面下拉列表中的名稱;getArgumentDesc方法中返回的函數參數說明對應界面中函數參數表格的部分,可以在表格中輸入具體的參數值;而界面上顯示的結果則是Execute方法的返回值。下面將在WebTours系統使用該函數測試系統的登入功能。

3 WebTours系統案例分析

WebTours系統是LoadRunner自帶的測試系統,可以進行簡單的航班查詢、飛機訂票、取消航班、登入、退出、注冊等操作。首先安strawberry-perl-5.10.1.0, 接下來打開WebTours文件夾,雙擊 StartServer.bat,開啟服務器,然后在瀏覽器中輸入http://127.0.0.1:1080/WebTours/即可訪問系統[5]。在進行訂票操作之前,需要先在注冊頁面,輸入用戶名、密碼以及確認密碼完成注冊。

現使用JMeter對注冊功能進行并發測試,其測試場景為:批量注冊100個用戶,用戶名的命名是以user開頭且長度為6位的隨機字符串組成。線程數為5,循環20次。具體實現步驟如下:

⑴ 使用JMeter錄制登入腳本,通過分析post請求cgi-bin/login.pl的參數可知,username就是注冊時用戶輸入的用戶名。

⑵ 測試要求用戶名以user開頭,使用前面實現的自定義函數PrefixRandomString生成帶前綴的隨機字符串,作為參數替換錄制時的用戶名,如圖3所示。

⑶ 修改線程組的場景,設置線程數5個,循環次數20次,自動完成100次注冊操作。每次進行注冊請求時JMeter都會調用函數PrefixRandomString生成隨機的字符串作為用戶名。

⑷ 執行JMeter的腳本后,在WebTours安裝目錄WebTours\cgi-bin\users中,可以看到注冊成功的用戶名,全部以user作為前綴,如圖4所示。

4 結束語

自定義函數開發,是軟件測試人員對JMeter基礎操作熟悉的前提下所做的高級操作,也是測試復雜系統時所必備的技能。本文考慮實際應用場景,結合WebTours系統,詳細介紹了JMeter自定義函數開發的整個流程以及實際應用。有助于軟件測試人員快速的進行自定義函數的開發,完成個性化的測試任務。JMeter作為一款開源的測試工具,為用戶提供了更多的靈活性,在實際應用中還可以自定義組件和自定義請求,使JMeter能更好的滿足測試要求。

參考文獻(References):

[1] 明日科技.Java從入門到精通(第6版)[M].北京:清華大學出版社,2021

[2] 胡通.大話性能測試JMeter實戰[M].北京:人民郵電出版社,2021

[3] 陳志勇,馬利偉,萬龍.全棧性能測試修煉寶典JMeter實戰[M].北京:人民郵電出版社,2016

[4] 巴約·艾林勒著,黃鵬譯.JMeter性能測試實戰(第2版)[M].北京:人民郵電出版社,2020

[5] 張億軍.JMeter測試應用研究[J].信息技術與信息化,2021(10):61-64

[6] 賈美麗,康珺.JUnit在單元測試中的應用[J].計算機與現代化,2013(8):116-118

作者簡介:周燕(1985-),女,湖北荊州人,碩士,助教,主要研究方向:軟件開發、軟件測試。

猜你喜歡
二次開發
淺談基于Revit平臺的二次開發
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級編程的旋轉坐標系二次開發
淺談Mastercam后處理器的二次開發
模具制造(2019年3期)2019-06-06 02:11:02
基于C#的AutoCAD建筑構件庫二次開發
江西建材(2018年2期)2018-04-14 08:01:14
西門子Easy Screen對倒棱機床界面二次開發
基于全站儀二次開發的覆冰厚度測量與實現
電測與儀表(2016年9期)2016-04-12 00:29:52
Micaps3.2 版本二次開發入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
基于VB的ANSYS二次開發在變壓器抗短路性能分析中的應用
基于CATIA的橡皮囊成形毛料展開的二次開發
機械工程師(2015年9期)2015-02-26 08:38:10
ANSYS Workbench二次開發在汽車穩定桿CAE分析中的應用
汽車零部件(2014年5期)2014-11-11 12:24:32
主站蜘蛛池模板: 欧美日韩国产精品va| 欧美另类第一页| 美女啪啪无遮挡| 国产成人调教在线视频| 久草热视频在线| 免费在线观看av| 国产成人亚洲无吗淙合青草| 91精品综合| 人妻丰满熟妇av五码区| 美女视频黄频a免费高清不卡| 中文精品久久久久国产网址| 黄色网站不卡无码| 成年人国产视频| 中文字幕无码中文字幕有码在线| 成人字幕网视频在线观看| 国产精品jizz在线观看软件| 久久亚洲国产最新网站| 欧美成人日韩| 成人亚洲国产| 先锋资源久久| 国产精品丝袜在线| 丝袜国产一区| 亚洲欧美国产五月天综合| 日韩在线成年视频人网站观看| 午夜人性色福利无码视频在线观看| 亚洲无码精品在线播放 | 全色黄大色大片免费久久老太| 一本大道在线一本久道| 免费人成视网站在线不卡| 青青极品在线| 国产av剧情无码精品色午夜| 中文字幕亚洲精品2页| 国产乱人免费视频| 成人永久免费A∨一级在线播放| 久久中文电影| 日本一区二区不卡视频| 秋霞午夜国产精品成人片| 国产精品播放| 欧美午夜性视频| 国产精品亚洲综合久久小说| 日本免费精品| 欧美精品成人一区二区视频一| 国产全黄a一级毛片| 中文精品久久久久国产网址| 毛片网站在线看| 国产免费网址| 啪啪国产视频| 国产午夜福利亚洲第一| 国产成人精品视频一区视频二区| 中文无码精品a∨在线观看| 成人免费网站久久久| 国产精品毛片一区视频播| 亚洲精品少妇熟女| 亚洲国产精品国自产拍A| 天天做天天爱夜夜爽毛片毛片| 制服丝袜国产精品| 国产精品自在线拍国产电影| 欧美日韩成人在线观看| 中文字幕欧美成人免费| 永久免费精品视频| 亚洲AⅤ综合在线欧美一区| 粉嫩国产白浆在线观看| 自拍偷拍一区| 精品99在线观看| 国产欧美日韩视频怡春院| 国产午夜人做人免费视频中文| 久久鸭综合久久国产| 天天色综网| 九九热免费在线视频| 国产流白浆视频| 国产精品亚洲五月天高清| 国产第八页| 秘书高跟黑色丝袜国产91在线| 精品91视频| 制服丝袜 91视频| 青青久视频| 国产99视频在线| 一本无码在线观看| 国产精品lululu在线观看| 亚洲欧美综合精品久久成人网| 久久久久久久蜜桃| 狠狠色丁香婷婷综合|