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 相关文章推荐
Java数组与堆栈相关知识总结
Jun 29 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
springboot+WebMagic+MyBatis爬虫框架的使用
Aug 07 Java/Android
spring cloud 配置中心native配置方式
Sep 25 Java/Android
聊聊Lombok中的@Builder注解使用教程
Nov 17 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
Java9新特性对HTTP2协议支持与非阻塞HTTP API
Mar 16 Java/Android
Spring 使用注解开发
May 20 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 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
人族 TERRAN 概述
2020/03/14 星际争霸
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
jQuery实现日历效果
2020/09/11 jQuery
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python os.access()用法实例
2019/02/18 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
新年爱情寄语
2014/04/08 职场文书
车辆转让协议书
2014/09/24 职场文书
资金申请报告范文
2015/05/14 职场文书
乱世佳人观后感
2015/06/08 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书