Jmerte 分布式压测及分布式压测配置


Posted in Java/Android onApril 30, 2022

1.本地基于jmeter创建压测项目

(1)pom中依赖jmeter包:

<dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
             <version>5.2.1</version>
       </dependency>

(2)pom中增加打包方式

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <fork>true</fork>
                <verbose>true</verbose>
                <encoding>UTF-8</encoding>
                <compilerArguments>
                    <extdirs>${project.basedir}/lib</extdirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <resource>
                        <!--配置本地jar包在项目中的存放路径-->
                        <directory>${project.basedir}/lib</directory>
                        <!--配置打包时jar包的存放路径-->
                        <targetPath>${project.basedir}/lib</targetPath>
                        <includes>
                            <include>**/*.jar</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <!-- 忽略测试 -->
                <skip>false</skip>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Rose>*</Rose>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.5.5</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

(3)编写压测脚本:

继承AbstractJavaSamplerClient,并实现runTest方法。

public class StessTest extends AbstractJavaSamplerClient {
    @Override
    public void setupTest(JavaSamplerContext javaSamplerContext) {
    }
    @Override
    @SneakyThrows
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        SampleResult sampleResult = new SampleResult();
        try {
            sampleResult.sampleStart();
            String result= 请求接口;
            sampleResult.setResponseData(result, "UTF-8");
            sampleResult.setSuccessful(false);
            TimeUnit.SECONDS.sleep(1L);
        } catch (Exception e) {
            e.printStackTrace();
            sampleResult.setResponseData(e.getLocalizedMessage(), "UTF-8");
            sampleResult.setResponseCode(e.getMessage());
            sampleResult.setSuccessful(false);
        } finally {
            sampleResult.sampleEnd();
        }
        return sampleResult;
    }
    @Override
    public void teardownTest(JavaSamplerContext javaSamplerContext) {
            super.teardownTest(javaSamplerContext);
    }
    @Override
    public Arguments getDefaultParameters() {
        return null;
    }

2.将项目打包

将本地maven测试项目打成jar包:

mvn -U clean insall package

打包完后,有两个地方的包:target\lib、target下面的包

首先本地调试压测脚本是否生效

(1)创建一个线程组:

Jmerte 分布式压测及分布式压测配置

 这里可以配置线程组名称,线程数,准备时长、循环次数,调度器等参数

(2)创建java请求

Jmerte 分布式压测及分布式压测配置

Jmerte 分布式压测及分布式压测配置

 选好测试的方法,本地执行一下,看可以跑通后,去远程机器压测。

确定好Master和Slave机器,及被压测服务所在的机器。且master机器 及slave机器上都配置相同版本的jmeter。

将项目依赖的jar包都放到slave机器 jmeter\lib\ext路径下面。

3.Master配置

编辑$JMETER_HOME/bin/jmeter.properties文件

分别配置remote_hosts,和server.rmi.ssl.disable,端口号

server.rmi.ssl.disable=true
server.rmi.localport=1099
server_port=1099
remote_hosts=ip1,ip2,ip3,ip4,ip5,ip6

4.Slave配置

(1)所有的slave机器上对应修改 $JMETER_HOME/bin/jmeter.properties文件

server.rmi.ssl.disable=true

(2)所有的slave机器需要在$JMETER_HOME/lib/ext下放压测脚本依赖的jar包

5.启动Slave

每台slave机器上都启动jmeter

直接启动

$JMETER_HOME/bin/jmeter-server

或者指定机器的ip启动(建议指定ip启动)

jmeter-server -Djava.rmi.server.hostname=xxx (机器的ip地址)

6.master启动压测

onlinePressTest.jmx是用界面版jmeter生成的一个线程组,保存下来,放到master机器上

运行压测脚本:

jmeter -n -r -t onlinePressTest.jmx -l stressTest.jtl -e -o webStressTest

7查看报告

stressTest.jtl 是压测结果,可以导出到本地,使用jmeter打开,获取报告

Jmerte 分布式压测及分布式压测配置

到此这篇关于Jmerte分布式压测,及分布式压测配置的文章就介绍到这了!


Tags in this post...

Java/Android 相关文章推荐
SpringBoot生成License的实现示例
Jun 16 Java/Android
springboot利用redis、Redisson处理并发问题的操作
Jun 18 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
实体类或对象序列化时,忽略为空属性的操作
Jun 30 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Java Lambda表达式常用的函数式接口
Apr 07 Java/Android
Java 关于String字符串原理上的问题
Apr 07 Java/Android
零基础学java之带参数以及返回值的方法
Apr 10 Java/Android
Android开发之底部导航栏的快速实现
Apr 28 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
JavaScript正则表达式实现注册信息校验功能
May 30 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
Java存储没有重复元素的数组
Apr 29 #Java/Android
Java对文件的读写操作方法
Apr 29 #Java/Android
Java设计模式中的命令模式
Apr 28 #Java/Android
Android开发之底部导航栏的快速实现
Apr 28 #Java/Android
Java8 CompletableFuture 异步回调
Apr 28 #Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
Apr 28 #Java/Android
Java 异步任务计算FutureTask
Apr 28 #Java/Android
You might like
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
Python Web版语音合成实例详解
2019/07/16 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
华为的Java面试题
2014/03/07 面试题
金蝶的一道SQL笔试题
2012/12/18 面试题
数学教学随笔感言
2014/02/17 职场文书
岗位职责说明书
2014/05/07 职场文书
分居协议书范本
2014/11/03 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL