2026/2/18 6:03:48
网站建设
项目流程
编程网站入门,徐州模板开发建站,视频付费点播网站怎么做,上海网络维护服务JMeter 是一个功能强大的性能测试工具#xff0c;但它可能无法满足特定项目或组织的特定需求。通过进行二次开发#xff0c;可以定制 JMeter#xff0c;使其适应具体项目的需求。例如#xff0c;可能需要添加自定义的
测试元件、报告生成器或结果分析器等。二次开发三种方…JMeter 是一个功能强大的性能测试工具但它可能无法满足特定项目或组织的特定需求。通过进行二次开发可以定制 JMeter使其适应具体项目的需求。例如可能需要添加自定义的测试元件、报告生成器或结果分析器等。二次开发三种方式自定义 BeanShell 功能自定义请求编写Java Sampler自定义函数助手自定义 BeanShell 功能在 JMeter 中可以使用 BeanShell 脚本来进行自定义脚本编写和执行。BeanShell 是一种基于 Java 的脚本语言它允许在 JMeter 中编写脚本以扩展功能或实现特定的行为。相当于一个小巧的 Java 源码解释器简单来说就是你可以在里面写代码然后通过 Beanshell 翻译成插件可以识别的指令去执行相关操作。1.配置元件中的 BeanShell 功能在 JMeter 的配置元件中可以使用 BeanShell 功能来设置变量、生成动态数据或执行其他自定义逻辑。例如想要在每个线程中生成一个随机数并将其存储在一个变量中可以使用以下 BeanShell 脚本int randomNumber (int) (Math.random() * 100); vars.put(randomNumber, String.valueOf(randomNumber));在 BeanShell 脚本中可以使用常规的 Java 语法和函数以及 JMeter 提供的特定函数和变量。在上面的示例中我们使用 Math.random() 函数生成一个随机数并将其存储在名为 randomNumber 的 JMeter 变量中。2.前置处理器和后置处理器中的 BeanShell 功能BeanShell 最常被用于对请求或者返回内容进行获取或者加工其中 prev 是对当前的取样进行访问执行了对响应状态码、响应信息、请求头等的操作示例如下log.info(code is prev.getResponseCode()); #获取响应的状态码 log.info(response is prev.getResponseDataAsString()); #获取响应信息 log.info(content_type prev.getContentType()); #获取头文件中ContentType类型 log.info(header prev.getRequestHeaders()); #获取取样器请求首部字段JMeter 调用 BeanShell 解释器来运行脚本虽然好用但不建议频繁使用 因为在 JMeter 高并发时它将会消耗较多的本地资源所以一般遇到逻辑相对复杂且代码量较大的情况我们会使用 JMeter 的另一种功能开发自定义插件jar 形式一般来说自定义的插件会帮助我们实现两方面功能JMeter 本身需要自行拓展的请求或者不支持的测试协议我们可以使用 Java 请求来完成自定义辅助函数协助我们进行性能测试。自定义请求编写Java Sampler实现 Java Sampler 功能的两种方式继承 AbstractJavaSamplerClient 抽象类实现 JavaSamplerClient 接口。通过阅读源码可以发现 AbstractJavaSamplerClient 抽象类是 JavaSamplerClient 接口的子类其中 JavaSamplerClient 接口中四个主要方法是:1.setupTest(JavaSamplerContext):setupTest 方法在执行测试之前被调用用于初始化资源或设置必要的前置条件。它接收一个 JavaSamplerContext 对象作为参数该对象提供了访问测试计划、线程组和全局配置等的上下文信息。在 setupTest 方法中您可以执行一次性的初始化操作例如建立数据库连接、创建 HTTP 客户端等。这个方法只会在整个测试计划的生命周期内调用一次。2.getDefaultParameters():getDefaultParameters 方法用于定义默认的请求参数。它返回一个 JMeterArgumentsArray 对象该对象包含了请求参数的默认值和描述。这些默认参数将显示在 JMeter 的用户界面中用户可以根据需要进行修改。通过这个方法您可以为您的自定义 Java Sampler 提供默认的请求参数使其易于配置和使用。3.getSampleVariables():getSampleVariables 方法返回一个字符串数组其中包含您希望在请求执行期间保存的变量名。这些变量将存储在 JMeter 的 SampleResult 对象中供其他组件使用。通过这个方法您可以指定自定义 Java Sampler 生成的变量以便在测试计划中的其他组件中进行引用和使用4.runTest(JavaSamplerContext):runTest 方法是最重要的方法它包含了自定义请求逻辑的实现。它接收一个 JavaSamplerContext 对象作为参数该对象提供了访问测试计划、线程组和全局配置等的上下文信息。在 runTest 方法中您可以编写自定义的请求逻辑例如执行 HTTP 请求、数据库查询或其他自定义操作。您可以使用 JMeter 提供的 API 来访问请求参数、变量、结果收集器等并使用 SampleResult 对象设置请求结果、响应消息和状态码等。案例使用 JavaSampler 重写 HTTP 的 POST 请求1首先我们来完成 POST 请求的核心方法先使用 HttpClients 发送构建的 POST 数据包然后获取到返回值这一步是完成 POST 请求的基本步骤示例代码如下//HttpClients提供功支持 HTTP 协议的客户端工具 httpClient HttpClients.createDefault(); //新建一个HttpPost请求的对象将url接口参数等信息传给这个对象 HttpPost httpPost new HttpPost(URL); //传入请求参数 httpPost.setEntity(new UrlEncodedFormEntity(Value, UTF8_CHARSET)); // 设置header信息指定报文头Content-type等 httpPost.setHeader(Content-type, xxxxx) // 执行请求操作并拿到结果 response httpClient.execute(httpPost);2接下来实现 JavaSamplerClient 接口这是编写 Java Sampler 插件需要实现的核心接口涉及的方法是 getDefaultParameters() 和 runTest()作用上文已经描述过。下面带你来看具体怎么使用的如下代码所示public Arguments getDefaultParameters() { Arguments arguments new Arguments(); arguments.addArgument(url,127.0.0.1:9081); arguments.addArgument(username, zhangtian); arguments.addArgument(password, 12345); return arguments; }3在上一步骤进行了参数的输入接下来实现接收这些参数并进行参数的输入、发送、返回判断等。runTest 方法中主要编写自己的请求逻辑 如下代码所示public SampleResult runTest(JavaSamplerContext javaSamplerContext) { //生成sampleResult对象用于请求的命名、标记状态、添加返回内容等 SampleResult sampleResultnew SampleResult(); sampleResult.setSampleLabel(cctester_login); //调用上文中实现的post请求 PostTest postTestnew PostTest(); //接受JMeter界面上传输的参数 String username javaSamplerContext.getParameter(username); String password javaSamplerContext.getParameter(password); String url javaSamplerContext.getParameter(url); //标记请求开始 sampleResult.sampleStart(); try { HttpResponse result postTest.Request(url,username,password); String entity EntityUtils.toString(result.getEntity()); //根据返回内容判断结果状态并展示结果 if (result.getStatusLine().getStatusCode()200){ sampleResult.setSuccessful(true); sampleResult.setResponseCodeOK(); sampleResult.setResponseData(entity, utf-8); }else { sampleResult.setSuccessful(false); sampleResult.setResponseData(entity, utf-8); 4将 Java 类编译为 JAR 文件并将该 JAR 文件放置在 JMeter 的lib/extAI写代码bash1目录中以便 JMeter 可以加载它自定义函数助手1引入 Maven 包这个包会给我们提供函数助手开发相关的类如下代码所示dependency groupIdorg.apache.jmeter/groupId artifactIdApacheJMeter_functions/artifactId version5.3/version /dependency2新建类包新建的包名字只能是 functions 结尾否则打包放到 JMeter 中是没有办法识别这个插件的然后代码中继承 AbstractFunction 类就可以实现主要实现以下方法。public String getReferenceKey() {} //这一方法表示函数助手对话框中的下拉框中显示的函数名称 public ListString getArgumentDesc() {} //设置入参的描述语用于函数助手对话框中显示函数名称提示 public void setParameters(CollectionCompoundVariable collection) {} // 参数值传入 public String execute(SampleResult sampleResult, Sampler sampler){} // 根据入参执行核心逻辑保存结果至相应的变量中总结感谢每一个认真阅读我文章的人作为一位过来人也是希望大家少走一些弯路如果你不想再体验一次学习时找不到资料没人解答问题坚持几天便放弃的感受的话在这里我给大家分享一些自动化测试的学习资源希望能给你前进的路上带来帮助。软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。