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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMeter定制功能实现

發(fā)布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMeter定制功能实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JMeter提供了可在采樣器中使用的功能。 在編寫復(fù)雜的測試計劃時,您會感到JMeter缺少某些方法。 您使用Beanshell腳本定義自己的自定義方法。 JMeter調(diào)用Beanshell解釋器來運行腳本。 只要您不產(chǎn)生高負載(大量線程),此方法就可以正常工作。 但是,一旦JMeter嘗試產(chǎn)生高負載,它就會耗盡資源并大大降低速度。 如果改用JMeter自定義函數(shù),則JMeter可以輕松生成高負載。 唯一的問題是弄清楚實現(xiàn)要求以及如何與JMeter集成。 JMeter幾乎沒有提供任何有關(guān)自定義函數(shù)實現(xiàn)的文檔。 但是在瀏覽了JMeter源代碼和Googling之后,我找到了實現(xiàn)JMeter自定義功能的方法。

定制方法實施

讓我們深入了解實現(xiàn)的細節(jié)。 有一些必須滿足的要求。 這些如下。

  • 函數(shù)類包名稱必須包含“ .functions”。
  • 函數(shù)類必須擴展AbstractFunction并實現(xiàn)execute(),setParameters(),getReferenceKey()和getArgumentDesc()方法
  • 制作jar文件并放入<JMETER_HOME> / lib / ext目錄,然后重新啟動JMeter

包裹名字

JMeter的設(shè)計使其無需GUI(通用用戶界面)即可運行。 它加載核心類并執(zhí)行測試計劃。 它為核心類提供了高優(yōu)先級,并且更喜歡先加載這些類。 為了確保GUI和核心/后端不混合,它根據(jù)程序包名稱隔離類。 它嘗試遵循約定,即函數(shù)實現(xiàn)類應(yīng)存在于應(yīng)在其中包含“函數(shù)”字樣的包中,例如com.code4reference.jmeter.functions 。 它在后臺查找jmeter.properties文件,并嘗試找到以下屬性值。

classfinder.functions.contain=.functions.

如您所見,提供的默認值是".functions." 。 您可以將其更改為其他名稱,但必須確保自定義函數(shù)類包名稱中應(yīng)存在相同的詞。 最好保留默認值。 一旦定義了包,就可以編寫Function實現(xiàn)類了。

函數(shù)實現(xiàn)類

在編寫此類時,您必須實現(xiàn)以下方法。

  • String getReferenceKey():可以從采樣器調(diào)用的函數(shù)的名稱。 慣例是在函數(shù)名稱前加上兩個“ __”(下劃線),例如__TimeInMillis ,函數(shù)名稱應(yīng)與實現(xiàn)此函數(shù)的類名稱相同。 此函數(shù)名稱應(yīng)存儲在某個靜態(tài)的最終String變量中,以便在執(zhí)行期間不能更改。
  • List getArgumentDesc():此方法基本上以字符串列表形式返回參數(shù)描述。 此描述出現(xiàn)在功能助手中(如下圖所示)
  • setParameters(Collection parameters):此方法由JMeter調(diào)用,它傳遞在函數(shù)調(diào)用中傳遞的值。 變量作為CompoundVariable的集合傳遞。 即使未提供任何參數(shù),也會調(diào)用此方法。 在此方法中,可以在execute()方法中設(shè)置和訪問全局變量。
  • 字符串execute(SampleResult previousResult,Sampler currentSampler): JMeter傳遞先前的SampleResult和當前的SampleResult。 此方法返回一個字符串,該字符串將用作函數(shù)調(diào)用的替換值。 該方法被多個線程調(diào)用,因此它必須是線程安全的。 這種方法的奇怪之處在于,在處理完參數(shù)之后,必須將結(jié)果轉(zhuǎn)換為字符串并返回
  • JMeter功能助手

    源代碼

    在下面的示例源代碼中,我實現(xiàn)了一個名為__TimeInMillis函數(shù)。 在使用提供的偏移量調(diào)整當前時間后,此方法以毫秒為單位返回時間。 例如,當當前時間為1371413877000時,此$ {__ TimeInMillis(2000)}方法調(diào)用將返回1371413879000。

    package com.code4reference.jmeter.functions;import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Calendar;import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jmeter.functions.AbstractFunction; import org.apache.jmeter.functions.InvalidVariableException; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; import org.apache.jorphan.logging.LoggingManager; import org.apache.log.Logger;public class TimeInMillis extends AbstractFunction {private static final List<String> desc = new LinkedList<String>();private static final String KEY = "__TimeInMillis";private static final int MAX_PARAM_COUNT = 1;private static final int MIN_PARAM_COUNT = 0;private static final Logger log = LoggingManager.getLoggerForClass();private Object[] values;static {desc.add("(Optional)Pass the milliseconds that should be added/subtracted from current time.");}/*** No-arg constructor.*/public TimeInMillis() {super();}/** {@inheritDoc} */@Overridepublic synchronized String execute(SampleResult previousResult, Sampler currentSampler)throws InvalidVariableException {//JMeterVariables vars = getVariables();Calendar cal = Calendar.getInstance();if (values.length == 1 ) { //If user has provided offset value then adjust the time.log.info("Got one paramenter");try {Integer offsetTime = new Integer(((CompoundVariable) values[0]).execute().trim());cal.add(Calendar.MILLISECOND, offsetTime);} catch (Exception e) { //In case user pass invalid parameter.throw new InvalidVariableException(e);} }return String.valueOf(cal.getTimeInMillis());}/** {@inheritDoc} */@Overridepublic synchronized void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {checkParameterCount(parameters, MIN_PARAM_COUNT, MAX_PARAM_COUNT);values = parameters.toArray();}/** {@inheritDoc} */@Overridepublic String getReferenceKey() {return KEY;}/** {@inheritDoc} */@Overridepublic List<String> getArgumentDesc() {return desc;} }

    我重點介紹了代碼的一些關(guān)鍵部分。 在第19行,設(shè)置功能名稱,如在第26行提供功能描述。 在第60行,檢查參數(shù)數(shù)量,并確保提供了正確數(shù)量的參數(shù)。 代碼的主要部分在44到51之間突出顯示,其中當前時間被調(diào)整并作為字符串對象返回。 如果您有興趣檢查其他函數(shù)的實現(xiàn),請檢出github / Code4Reference上的整個源代碼。 編寫代碼后,將其編譯并制作jar文件并將其放置在<JMETER_HOME> / lib / ext目錄中。 你可以得到一個樣本搖籃腳本構(gòu)建jar文件這篇文章 。 如果您不了解Gradle,則可以使用命令生成jar文件 。 通過在Eclipse中導(dǎo)出包并選擇導(dǎo)出目標作為Jar文件,是創(chuàng)建jar文件的最簡單方法。

    參考:來自Code4Reference博客上的JCG合作伙伴 Rakesh Cusat的JMeter自定義函數(shù)實現(xiàn) 。

    翻譯自: https://www.javacodegeeks.com/2013/06/jmeter-custom-function-implementation.html

    總結(jié)

    以上是生活随笔為你收集整理的JMeter定制功能实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。