springboot项目组引入JMeter的实现步骤

目录
  • 一、前言
  • 二、springboot项目引入JMeter完成接口自动化操作

一、前言

看到标题的小伙伴肯定很好奇,springboot项目中用JMeter能干什么,那么我先反问你JMeter能用来作什么?压测;接口自动化?,如果你能猜到这两点那你对JMeter肯定是有了一定的认知,同样你也猜对了,用它来做接口自动化
但是可能会有小伙伴会有疑问为什么不拿他来做压测,当然可能拿来做压测但是不建议在springboot项目中整合压测功能,毕竟压测本来就是一种多线程的形式而且极其消耗内存,spring项目本来就很重,所以得不偿失。当然对于压测我又另一种方案,就是容器化的分布式压测,这一块方案我会再后续的文章分享出,接下来我们先来谈谈如何在springboot项目中做接口自动化吧

在这篇文章中我详细介绍过JMeter engine启动原理,知道JMeter engine原理之后,是否我们可以这样做,在springboot项目引入JMeter开源组件包然后使用其开启engine的方法,自己开启engine,当然此时你的线程肯定是单线程,所以基本内存消耗很低,那么如何做?我们接着往下说

二、springboot项目引入JMeter完成接口自动化操作

首先导入JMeter对应的maven坐标

<properties>
    <jmeter.version>5.3</jmeter.version>
</properties>

<dependencies>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_http</artifactId>
    <version>${jmeter.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_functions</artifactId>
    <version>${jmeter.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_jdbc</artifactId>
    <version>${jmeter.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_tcp</artifactId>
    <version>${jmeter.version}</version>
</dependency>
</dependencies>

在JMeter engine启动原理介绍了StandardJMeterEngine标准的引擎类,通过创建这个对象就可以开启engine,当然事实并非如此简单

//创建engine
StandardJMeterEngine engine = new StandardJMeterEngine();
//将hashTree配置注入engine中
engine.configure(hashTree);
try {
 //执行engine开始运行
    engine.runTest();
} catch (JMeterEngineException e) {
    engine.stopTest();
    e.printStackTrace();
}

所以开启engine就这么短短的几步操作就行,但是上面需要HashTree对象传入,就是你的配置,关于HashTree的用法及使用,可以参考我写的这篇博文

一文搞懂JMeter engine中的HashTree配置

HashTree有了之后,理论上是可以运行了,但是实际却会报错,因为JMeter engine开启会初始化配置文件,也就是我们熟知的jmeter.properties配置的内容,所以你可以在springboot项目的resource下创建jmeter目录存放jmeter.properties等配置

配置文件可以去github上去获取JMeter 配置

好了配置有了,接下来我们需要先初始化jmeter.properties配置属性然后在开启jmeter engine就行

//初始化jmeter属性配置
private void initJMeterProperties() {
    if (!StringUtils.isEmpty(JMeterUtils.getJMeterProperties())){
        return;
    }
    try {
        InputStream inputStream = JMeterUtil.class.getResource("/jmeter/jmeter.properties").openStream();
        File tempFile = FileUtil.createTempFile(null);
        FileUtil.writeFromStream(inputStream,tempFile);
        //这里面loadJMeterProperties方法必须写成临时文件这样的形式,否则会获取不到jmeter.properties
        JMeterUtils.loadJMeterProperties(tempFile.getAbsolutePath());
        JMeterUtils.setJMeterHome(JMeterUtil.PATH);
        JMeterUtils.setLocale(LocaleContextHolder.getLocale());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上面代码中必须通过创建临时文件的形式传入临时文件的路径,否则springboot打成jar无法找到路径从而报错

在执行步骤2即可,但是会有一个问题engine.runTest()是一个空方法,那你如何接收运行的结果集数据呢?这里就要牵扯到jmeter后端监听器的作用了,JMeter后端监听器作用及原理可以参考这篇文章

后端监听器可以异步的接收jmeter engine运行的结果集,所以我们可以通过这个方式实现一个完整的接口自动化流程

这是关于我的springboot项目采用后端监听器的实现方式

public class CustomBackendListenerClient extends AbstractBackendListenerClient {

    private final List<SampleResult> queue = new ArrayList<>();

    //获得控制台内容。
    private PrintStream oldPrintStream = System.out;
    private ByteArrayOutputStream bos = new ByteArrayOutputStream();

    private void setConsole() {
        System.setOut(new PrintStream(bos));
    }

    private String getConsole() {
        System.setOut(oldPrintStream);
        return bos.toString();
    }
 // engine执行之前会进行前置处理器
    @Override
    public void setupTest(BackendListenerContext context) throws Exception {
        setConsole();
        super.setupTest(context);
    }
 //engine执行中的处理
    @Override
    public void handleSampleResults(List<SampleResult> sampleResults, BackendListenerContext context) {
     //结果集添加至集合中
        queue.addAll(sampleResults);
    }
 //engine结束后的后置处理器
    @Override
    public void teardownTest(BackendListenerContext context) throws Exception {
     //处理结果集中的数据并封装至JMeterRequestResult对象中
        RunJMeterRequestService runJMeterRequestService = CommonBeanFactory.getBean(RunJMeterRequestService.class);
        List<JMeterRequestResult> jMeterRequestResults = Lists.newArrayList();
        String testId = context.getParameter("testId");
        queue.stream().forEach(result -> {
            setRequestResult(result, jMeterRequestResults);
        });
        queue.clear();
        runJMeterRequestService.addDebugResult(testId, jMeterRequestResults);
        super.teardownTest(context);
    }

    private void setRequestResult(SampleResult result, List<JMeterRequestResult> jMeterRequestResults) {
        JMeterRequestResult metricResult = new JMeterRequestResult();
        Long responseTime = result.getEndTime() - result.getStartTime();
        metricResult.setUrl(result.getUrlAsString());
        metricResult.setResponseSize(((Integer) result.getBodySize()).toString());
        metricResult.setResponseTime(responseTime.toString());
        metricResult.setResponseResult(result.getResponseDataAsString());
        metricResult.setConsoleResult(getConsole());
        if (result instanceof HTTPSampleResult) {
            HTTPSampleResult res = (HTTPSampleResult) result;
            metricResult.setCookie(res.getCookies());
            metricResult.setRequestMethod(res.getHTTPMethod());
        }
        metricResult.setRequestData(result.getSamplerData());
        metricResult.setResponseHeader(result.getResponseHeaders());
        metricResult.setRequestHeader(result.getRequestHeaders());
        metricResult.setStatusCode(result.getResponseCode());
        jMeterRequestResults.add(metricResult);
    }
}

至此JMeter接口自动化可以通过此方案来实现,希望能对你有所启发

到此这篇关于springboot项目组引入JMeter的实现步骤的文章就介绍到这了,更多相关springboot项目组引入JMeter内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot引入多个yml方法(多种方案)

    SpringBoot默认加载的是application.yml文件,所以想要引入其他配置的yml文件,就要在application.yml中激活该文件 定义一个application-resources.yml文件(注意:必须以application-开头) application.yml中: spring:   profiles:     active: resources 以上操作,xml自定义文件加载完成,接下来进行注入. application-resources.yml配置文件代码:

  • 详解spring boot引入外部jar包的坑

    前言:由于项目需求,短信验证码的接口需要换成阿里大于的,但是尴尬的发现阿里大于的jar包没有maven版本的,于是便开始了一上午的操蛋引包之路.按照套路来说,自然应该是百度一波,但是百度了好久,找了好多方案之后发现,没一个有用的,而且文章的抄袭.拷贝十分严重,试了N种方案,都是错的,都没有将外部jar包打包到BOOK-INF文件夹下.最终,在第N次尝试之后,终于在打的jar包里将外部的jar包导入进来.特此记录下,防止再犯!!! 首先在新建libs文件夹(根目录或者resource目录下都可以)

  • 浅谈Springboot下引入mybatis遇到的坑点

    一. springBoot + Mybatis 配置完成后,访问数据库遇到的问题 首先出现这个问题,肯定是xml文件与mapper接口没有匹配上,甚至是xml文件根本没有被扫描到. 于是会从配置上进行检查: 1. xml中的namespace命名是否与mapper接口路径一致,需保证一致. 2. application.properties或者application.yml文件中配置mybatis的属性对否,如下: 第一行 typeAliasesPackage是实体类的包路径: 第二行mappe

  • spring-boot-maven-plugin引入出现爆红(已解决)

    一.问题描述 换了一台电脑,重新进行idea安装配置.然后打开原来的项目结果引入spring-boot-maven-plugin出现爆红,而且spring-boot-starter-parent也不能引入. 二.解决办法 1.检查环境配置,主要是settings.xml此文件配置情况是否正确,是否加入阿里云镜像.最好用idea工具打开检查一下是否规范,此次我的问题就出在settings.xml报错了(网上随意复制粘贴了一个).settings.xml配置文件以及idea工具打开查看的方式如下所示

  • eclipse怎么引入spring boot项目插件的方法

    因为项目需要,需要在一个之前没做过springBoot项目的eclipse上跑一个springBoot项目并完成打包,所以就在网上查完资料以后搞了一下. 首先我们最好新开一个工作空间以免影响到其他项目,然后在新的工作空间进行操作.集成SpringBoot项目需要引入STS(springsource-tool-suite)插件.引入STS插件有两种方式,可选择以下其中一种进行集成: 第一种:在线下载 在eclipse中的商店自动下载安装TST,具体步骤为:Help -> Eclipse Markt

  • springboot扫描引入jar包的service等组件方式

    在pom中引入对应的依赖,如果引入的三方jar包跟该项目Application所在包目录包含被依赖jar包目录, 即下面的情况: 像上面这种包组织的话,是不需要额外加入任何配置的(前提是依赖jar包相应组件一定要有@Component等注解修饰),因为springboot项目默认扫描目录就是Application所在目录及子目录,但是这种情况仅限于单个项目安排,项目大了就不一定满足了, 这时可以通过下面的方式引入扫描路径: 或者通过@ComponentScan注解也可以,需要注意的是不要忘了扫描

  • springboot项目组引入JMeter的实现步骤

    目录 一.前言 二.springboot项目引入JMeter完成接口自动化操作 一.前言 看到标题的小伙伴肯定很好奇,springboot项目中用JMeter能干什么,那么我先反问你JMeter能用来作什么?压测:接口自动化?,如果你能猜到这两点那你对JMeter肯定是有了一定的认知,同样你也猜对了,用它来做接口自动化 但是可能会有小伙伴会有疑问为什么不拿他来做压测,当然可能拿来做压测但是不建议在springboot项目中整合压测功能,毕竟压测本来就是一种多线程的形式而且极其消耗内存,sprin

  • SpringBoot接入支付宝支付的方法步骤

    支付宝今年推出了新的转账接口alipay.fund.trans.uni.transfer(升级后安全性更高,功能更加强大) ,老转账接口alipay.fund.trans.toaccount.transfer将不再维护,新老接口的一个区别就是新接口采用的证书验签方式.使用新接口要将sdk版本升级到最新版本,博主升级时最新版本是4.10.97.接下来看集成步骤 1.将支付宝开放平台里下载的3个证书放在resources下面 2.写支付宝支付的配置文件 alipay.properties alipa

  • IDEA创建SpringBoot的maven项目的方法步骤

    记录IDEA编程工具创建SpringBoot的maven项目过程: 新建项目 选择maven项目及JDK,点击下一步: 选择好项目路径,输入项目名称,点击完成就可以啦: 创建完成效果: 配置pom.xml文件 新建项目需要引入springboot的依赖,这里选择2.4.4版本. 完整pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.ap

  • SpringBoot项目集成FTP的方法步骤

    目录 写在前面 FTP相关软件安装 开始集成 引入相关jar包 引入FTPUtils.java和FTPHelper.java 如何使用 写在前面 FTP是一个文件传输协议,被开发人员广泛用于在互联网中文件传输的一套标准协议. 而我们通常在开发过程中也要通过FTP来搭建文件系统,用于存储系统文件等. 目前正值SpringBoot热潮,所以我们接下来会一起学习一下SpringBoot如何集成FTP,以及相关的FTP组件包,还有其主要提供的几个方法. 当然在这系列文章结尾,我们还会给出确切的FTP操作

  • SpringBoot自动配置Quartz的实现步骤

    目录 1. 依赖信息 1.1 原依赖信息 1.2 新的依赖 1.3 依赖变化 2. 新的依赖使用 2.1 默认配置可用 2.2 使用自动配置 2.3 配置信息: 3. 总结 SpringBoot2.0版本之后,其中增加了对Quartz框架的支持内容,可以实现通过容器来自动配置Quartz. 1. 依赖信息 springboot2.x版本时,出现了spring-boot-starter-quartz这一起步依赖,其中提供了很多丰富功能. 1.1 原依赖信息 之前引入quartz框架时,必须引入的依

  • 详解springboot中的jar包部署步骤

    eclipse中: 1.单击整个项目 run as - maven clean - maven install 2.找到项目所在的路径 找到所有的jar包 3.把jar包放到linux对应的文件夹 linux中部署项目: 1.查看jar是否在运行中 ps -ef | grep SpliderWeb-0.0.1-SNAPSHOT.jar 2.有运行的jar包 杀死对应的进程 kill 进程号 3.无运行的jar包 部署项目 java -jar SpliderWeb-0.0.1-SNAPSHOT.j

  • IDEA SpringBoot项目配置热更新的步骤详解(无需每次手动重启服务器)

    IDEA SpringBoot项目配置热更新的步骤 1.在pom.xml中添加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 2.在pom.xml中添加插件: <

  • 部署vue+Springboot前后端分离项目的步骤实现

    单页应用 vue经常被用来开发单页应用(SinglePage Web Application,SPA),什么叫做单页应用呢,也就是只有一张web页面的应用,单页应用的跳转只需要刷新局部资源,大大加快的了我们页面的响应速度 前端页面打包 打开vue工程,在项目根目录下创建一个配置文件:vue.config.js,然后在里面写入以下内容: module.exports = { assetsDir: 'static', // 静态资源保存路径 outputDir: 'dist', // 打包后生成的文

  • SpringBoot中引入MyBatisPlus的常规操作

    一.前言 近来参与一个电力大数据项目,开发小组决定在 DAO 层使用 MyBatisPlus --国产.新颖.强大.轻量. 官方API地址:http://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B 二.通用 CRUD 通过本项目(表少,数据量大,非常适合) 发现 MyBatisPlus 在 单表CRUD 方面 比原来的的 MyBatis 的有着绝对优势: VS PS MyBatis MyBatisPlus 代码生成器 数据库有些表的字段发声改变 ① 再次运行

  • SpringBoot创建Docker镜像的方法步骤

    随着越来越多的组织转向容器和虚拟服务器,Docker正成为软件开发工作流程中一个更重要的部分.为此,Spring Boot 2.3中最新的功能之中,提供了为Spring Boot应用程序创建 Docker 镜像的能力. 这篇文章的目的,就是为了给大家介绍如何为 Spring Boot 应用程序创建 Docker 镜像. 1. 传统Docker构建 使用Spring Boot 构建 Docker 镜像的传统方法是使用 Dockerfile .下面是一个简单的例子: FROM openjdk:8-j

随机推荐