每天15分钟JMeter进阶篇(1):JAVA 取样器的基本使用

news2024/11/15 22:35:47

每天15分钟JMeter进阶篇(1):JAVA 取样器的基本使用

  • 前言
  • 准备工作
  • 创建开发工程
    • POM文件
    • 创建根工程
    • 创建module
  • 开发JAVA取样器
  • 构建、部署运行
    • 构建JAR包
    • 部署和运行
  • 写在最后

前言

JMETER官方提供了丰富的取样器,可以支持80%的常见测试场景,同时JMETER也有很强的扩展功能,支持测试人员自己定制取样器,JAVA 取样器就是其中一种。使用JAVA 取样器需要测试人员具备中等程度的编码能力,因为JAVA 取样器需要自己编写实现代码。关于JAVA取样器的使用场景举个最简单的例子,一个项目自己开发了一个缓存消息的平台,并且提供了一个SDK,那么当对这个SDK进行性能测试的时候,你就需要使用JAVA取样器,也就是你把自己当成一个客户端,调用SDK的API去操作缓存服务,然后在并发环境下观察SDK的资源消耗。这只是一个简单的例子,总的来说,只要JMETER官方提供的取样器不能满足你的测试需求的时候,你就可以考虑使用JAVA取样器,并且开发出来的代码也很容易就可以封装成GUI界面,提高易用性。
欢迎转载,转载请注明出处,非常感谢:https://blog.csdn.net/wyp_810618/article/details/128530272


历史文章

每天15分钟JMeter入门篇(一):Hello JMeter
每天15分钟JMeter入门篇(二):使用JMeter实现并发测试
每天15分钟JMeter入门篇(三):认识JMeter的逻辑控制器
每天15分钟JMeter入门篇(四):认识JMeter中的函数
每天15分钟JMeter入门篇(五):认识JMeter中的Test Fragment
每天15分钟JMeter入门篇(六):学会用好JMeter中的断言
每天15分钟JMeter入门篇(七):认识JMeter中的监听器
每天15分钟JMeter进阶篇(1):JAVA 取样器的基本使用


准备工作

这篇文章的主要目的是对JAVA取样器的开发过程做一个基本说明,能让第一次接触的人具备开发简单的JAVA取样器的能力,为后续的进阶使用打下基础。
在开始本文之前,请在自己的电脑上准备一个JAVA开发环境,无论是IDEA或者ECLIPSE都可以;准备一个可用的JMETER。

创建开发工程

这里以idea为例。使用maven管理构建。idea和maven的安装和部署自行百度吧。工程结构采用根工程+module的结构,有的人习惯在根工程下开发代码,这也完全没有问题。

POM文件

以下是我的POM文件配置,其中<scope>provided</scope>的原因是ApacheJMeter_core和ApacheJMeter_java本身就是jmeter自带的JAR包,所以provided,这样在构建JAR包时不会再构建它的次级依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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">
    <parent>
        <artifactId>jmeter-java-demo</artifactId>
        <groupId>com.xiaomacaicai.jmeter.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>com.xiaomacaicai.jmeter.demo.javasampler</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>5.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>5.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

创建根工程

在idea界面中,依次点击File - New Project,进入新建project的界面,如图:
新建工程-1
该界面中选择Mave,然后不用做任何设置,Next,界面如图:
在这里插入图片描述
该界面中设置工程的名称属性,设置可以参考如图,点击Next,界面如图:
在这里插入图片描述
设置ProjectName和项目的本地存储目录后,点击Finish。完成根目录的创建。

创建module

首先说明一点,有的人习惯在根工程下编写代码,这完全没问题。我自己的习惯是在根工程下创建不同的module,我觉得这样方便管理。两种方法都可以,依照自己的习惯来就好。
由于我是采用的Module的方式,所以根目录下的src目录可以删除。
在工程名称上右键——New——Module,同样采用maven的方式,如图:
在这里插入图片描述
这个界面采用默认设置,点击Next,界面如图:
在这里插入图片描述
输入Artifactid,我的习惯是groupid + module名称,设置后点击Next
在这里插入图片描述
这个界面默认就好,点击Finish完成module创建,此时工程目录结构如图:
在这里插入图片描述
到这里就完成了工程的基本创建,下一步可以开发JAVA 取样器了。

开发JAVA取样器

在module的src下面新增JAVA类,并编写代码如下:

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

public class JavaSampleDemo extends AbstractJavaSamplerClient {
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("执行JAVA取样器");
        SampleResult sampleResult = new SampleResult();
        //从这行代码开始开始耗时统计
        sampleResult.sampleStart();
        //设置响应代码为200
        sampleResult.setResponseCodeOK();
        //设置请求头信息
        sampleResult.setRequestHeaders("request header");
        //设置请求报文
        sampleResult.setSamplerData("请求报文:JAVA取样器DEMO");
        //设置响应报文
        sampleResult.setResponseData("响应报文:JAVA取样器DEMO","utf-8");
        //设置取样器的标题,这个标题在聚合报告和查看结果树中展示
        sampleResult.setSampleLabel("demo演示");
        //设置取样器的结果为测试通过
        sampleResult.setSuccessful(true);
        //从这行代码开始结束耗时统计
        sampleResult.sampleEnd();
        return sampleResult;
    }
}

构建、部署运行

构建JAR包

开发好的JAVA取样器,必须构建成JAR包,放入JMETER的目录才可以。以idea为例,构建JAR包的过程如下:
在工程界面Ctrl + Alt + Shift + s,打开工程属性,点击ifacts, 如图:
在这里插入图片描述
点击+号,选择JAR - From modules from dependencies,在弹出界面中选择刚才新增的Modules,由于是放到JMETER中执行因此不要设置Main Class,打包方式我习惯每个依赖的JAR单独拷贝,而不是把所有依赖包的class文件合并到一个JAR包中,很容易产生冲突。参考如图:
在这里插入图片描述
点击确定后即可完成构建配置。

部署和运行

构建出来的jar包拷贝到jmeter目录下的lib\ext目录下,并重启jmeter
在jmeter中新增线程组、查看结果数、聚合报告,并在线程组下新增java 取样器,如图:
在这里插入图片描述

运行后查看结果树,可以看到每一个取样器的数据
在这里插入图片描述

写在最后

通过上面的步骤,可以把一个简单的JAVA取样器跑起来,DEMO里只是打印了一行简单的文字,在实际应用中JAVA取样器可以扩展很多功能,后续文章会逐渐补充几个典型的场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传输层协议:UDP协议

简介 用户数据报协议&#xff08;英语&#xff1a;User Datagram Protocol&#xff0c;缩写&#xff1a;UDP&#xff1b;又称用户数据包协议&#xff09;是一个简单的面向数据包的通信协议&#xff0c;位于OSI模型的传输层。该协议由David P. Reed在1980年设计且在RFC 768中被…

CrimeFragment的UI fragment进行管理

用户界面将由一个名为CrimeFragment的UI fragment进行管理。CrimeFragment的 实例将通过一个名为CrimeActivity的activity来托管。CrimeActivity视图由FrameLayout组件组成&#xff0c;FrameLayout组件为CrimeFragment要显示 的视图安排了存放位置。 CrimeFragment 的视图由一个…

Thinkphp QVD-2022-46174 多语言rce

文章目录漏洞介绍vulhub漏洞搭建漏洞利用利用一&#xff1a;写入文件利用二&#xff1a;文件包含漏洞分析参考文章漏洞介绍 Thinkphp&#xff0c;v6.0.1~v6.0.13&#xff0c;v5.0.x&#xff0c;v5.1.x 如果 Thinkphp 程序开启了多语言功能&#xff0c;那就可以通过 get、head…

[从零开始]用python制作识图翻译器·三

AlsoEasy-RecognitionTranslator具体实现开发环境准备和验证下载conda创建开发环境文字识别模块在线模块离线模块机器翻译模块在线模块离线模块GUIGUI-定位模块GUI-截图模块具体实现 开发环境准备和验证 前期测试项目文件已上传到我的仓库。 下载conda conda是python的版本管…

Day863.协程 -Java 并发编程实战

协程 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于协程的内容。 Java 语言里解决并发问题靠的是多线程&#xff0c;但线程是个重量级的对象&#xff0c;不能频繁创建、销毁&#xff0c;而且线程切换的成本也很高&#xff0c;为了解决这些问题&#xff0c;Java SD…

C++设计模式(4)——策略模式

策略模式 亦称&#xff1a; Strategy 意图 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 问题 一天&#xff0c; 你打算为游客们创建一款导游程序。 该程序的核心…

什么是CNCF云原生

一、CNCF简介 CNCF&#xff1a;全称Cloud Native Computing Foundation&#xff08;云原生计算基金会&#xff09;&#xff0c;成立于2015年12月11日&#xff0c;是一个开源软件基金会&#xff0c;它致力于云原生&#xff08;Cloud Native&#xff09;技术的普及和可持续发展。…

golang 错误处理channel+error真的香

官方推荐golang中错误处理当做值处理&#xff0c; 既然是值那就可以在channel中传输&#xff0c;本文带你看看golang中channelerror来做异步错误处理有多香&#xff0c;看完本文还会觉得golang的错误处理相比java try catch一点优势都没有吗&#xff1f; 场景 如下&#xff0…

LeetCode刷题笔记 - JavaScript(二)

文章目录1.剑指 Offer 60. n个骰子的点数2.面试题67. 把字符串转换成整数3.面试题59 - II. 队列的最大值剑指 Offer 60. n个骰子的点数 面试题67. 把字符串转换成整数 面试题59 - II. 队列的最大值 1.剑指 Offer 60. n个骰子的点数 把n个骰子扔在地上&#xff0c;所有骰子朝上一…

Java运行机制

java的运行机制 Java程序的运行机制分为编写、编译和运行三个步骤。 1.编写 编写是指在Java开发环境中进行程序代码的编辑&#xff0c;最终生成后缀名为“.java”的Java源文件。 2.编译 编译是指使用Java编译器对源文件进行错误排查的过程&#xff0c;编译后将生成后缀名为…

一篇文章带你熟悉Ajax

文章目录一、AJAX 简介二、创建 AJAX 的基本步骤1. 创建 XMLHttpRequest 对象2.向服务器发送请求3.服务器响应状态一、AJAX 简介 ☀️AJAX 的英文全称为 Asynchronous JavaScript And XML&#xff0c;Asynchronous 是异步的意思。何为异步呢&#xff1f;在这里异步是指通过 AJA…

IT运维服务体系的总体架构是什么?

大家好&#xff0c;我是技福的小咖老师。 今天我们来简单介绍一下IT运维服务体系的总体架构。 运维服务体系由运维服务制度、运维服务流程、运维服务组织、运维服务队伍、运维技术服务平台以及运行维护对象六部分组成&#xff0c;涉及制度、人、技术、对象四类因素。制度是规…

每日一题-力扣(leetcode)2368. 受限条件下可到达节点的数目

题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restr…

激光雷达对植被冠层结构和SIF同时探测展望

前言陆表植被在全球碳循环中起着不可替代的作用。但现阶段&#xff0c;人们对气候变化与植被生态理化功能的关系的研究还不够完善。为了提高气候预测以及缓解气候恶化的速率&#xff0c;对植被参数比如&#xff1a;叶面积指数&#xff08;leaf&#xff09;、植被冠层结构&#…

JavaScript JSON序列化和反序列化

文章目录JavaScript JSON序列化和反序列化概述JSON序列化JSON.stringify()仅一个参数使用使用2个参数使用3个参数其他自定义toJson序列化顺序反序列化JSON.parse()仅一个参数使用使用2个参数eval()JavaScript JSON序列化和反序列化 概述 JSON数据在网络传输时存在两种类型&am…

【虹科云展厅】虹科赋能汽车智能化云展厅专题回顾

虹科赋能汽车智能化云展厅 聚焦前沿技术&#xff0c;【虹科赋能汽车智能化云展厅】正式上线&#xff0c;本次云展厅围绕“汽车以太网/TSN、汽车总线、智能网联、电子测试与验证、自动驾驶”等核心话题&#xff0c;为您带来如临展会现场般的讲演与介绍&#xff0c;更有技术工程…

PromQL之选择器和运算符

平台统一监控的介绍和调研直观感受PromQL及其数据类型PromQL之选择器和运算符 PromQL 匹配器 相等匹配器&#xff08;&#xff09; 选择与提供的字符串完全相同的数据 例&#xff1a;筛选出id“G1 Eden Space” 的数据 jvm_memory_used_bytes{id"G1 Eden Space"}…

Elasticsearch高级查询—— 匹配查询文档

目录一、初始化文档数据二、匹配查询文档示例2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age&…

知识图谱与神经网络,神经调节知识网络图

1、图立方和知识图谱的区别和联系与区别 图网络&#xff0c;即Natural Graph&#xff0c;是基于世界各实体之间的自然关系表示而得到的图&#xff0c;他们的节点一般是某个特定网络中的实体&#xff08;人、物理机、分子&#xff09;。例如&#xff1a;社交网络、通信网络、蛋…

阿里云-ODPS SQL-日常开发日期、字符、数学运算、聚合函数函数使用技巧

文章目录1、背景2、 数据处理2.1、OLTP与OLAP概念2.2、OLTP与OLAP区别3、日常开发常用函数3.1、日期函数3.2、数学运算函数3.3、字符串处理函数3.4、聚合函数1、背景 数据仓库&#xff0c;是一个面向主题的、集成的、随时间变化的、信息本身相对稳定的数据集合。 数据仓库从Or…