首页 > 系统相关 >Jmeter Beanshell编辑器配置使用

Jmeter Beanshell编辑器配置使用

时间:2024-03-21 09:01:51浏览次数:23  
标签:info jmeter String 编辑器 Beanshell sampler import Jmeter log

1、背景

考虑到jmeter在编写groovy及beanshell脚本时,编辑器工具没有命令行提示的功能,因此特写本文章,配置IDE工具。

2、使用工具说明

  1. 开发编辑器IntelliJ IDEA 2022.3.1
  2. Jmeter5.6.3

3、配置步骤

3.1 下载jmeter源码

https://jmeter.apache.org/download_jmeter.cgi

3.2 build源码

#解压缩源码
unzip apache-jmeter-5.6.5_src.zip

#进入解压后的目录,执行编译
./gradlew build --no-verify

#如build过程中报错,请执行如下命令
./gradlew autostyleApply

3.3 idea打开

用idea工具直接打开源码所在目录即可。

4、测试

在源码的src/core/jmh/main/java/util目录下新建一个自己的测试类即可。

关键点:方法的参数中有如下参数,分别对应beanshell中的内置参数。-vars/ctx/props/log/sampler
JMeterContext ctx, JMeterVariables vars, Properties props,
String sr,int ResponseCode,String ResponseMessage,boolean IsSuccess,String Label, Logger log, HTTPSamplerBase sampler

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to you under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.jmeter.util;

import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.threads.JMeterVariables;
import org.gradle.internal.impldep.com.google.gson.Gson;
import org.slf4j.Logger;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.slf4j.Logger;

public class test_yu {

    private void mBeenShellScript(JMeterContext ctx, JMeterVariables vars, Properties props,
            String sr,int ResponseCode,String ResponseMessage,boolean IsSuccess,String Label, Logger log, HTTPSamplerBase sampler){
        String marketPrice_ALL = vars.get("marketPrice_ALL");
        String outerSkuCode_ALL = vars.get("outerSkuCode_ALL");
        String sellPrice_ALL = vars.get("sellPrice_ALL");
        String sellableNum_ALL = vars.get("sellableNum_ALL");
        String[] marketPriceArr= marketPrice_ALL.split(",");
        String[] outerSkuCodeArr = outerSkuCode_ALL.split(",");
        String[] sellPriceArr = sellPrice_ALL.split(",");
        String[] sellableNumArr = sellableNum_ALL.split(",");
        String[] skus = new String[marketPriceArr.length];
        for (int i = 0; i < marketPriceArr.length; i++) {
            Map map = new HashMap();
            map.put("outerSkuCode", outerSkuCodeArr[i]);
            map.put("sellPrice", sellPriceArr[i]);
            map.put("marketPrice", marketPriceArr[i]);
            map.put("sellableNum", sellableNumArr[i]);
            log.info(marketPriceArr[i]);
            log.info(outerSkuCodeArr[i]);
            log.info(sellPriceArr[i]);
            log.info(sellableNumArr[i]);
            String jsonStr  = new Gson().toJson(map);
            skus[i]=jsonStr;
        }
        vars.put("skus", Arrays.toString(skus));
        String b = ctx.getThread().getThreadName();
        SampleResult rsp = ctx.getPreviousResult();
        String rh = rsp.getResponseDataAsString();
        log.info('\n'+rh);
        String cname = ctx.getCurrentSampler().getName();
        log.info("当前的cname是: " + cname);
        // 获得请求头信息
        HeaderManager headers = sampler.getHeaderManager();
        // 打印删除指定请求头参数前的全部请求头信息
        log.info("删除前" + headers.getHeaders().getStringValue());
        // 删除请求头指定的信息
        sampler.getHeaderManager().removeHeaderNamed("Content-Type");
        boolean isRunningVersion = sampler.getHeaderManager().isRunningVersion();
        // 打印删除指定请求头参数后的全部请求头信息
        log.info("======="+String.valueOf(isRunningVersion));
        log.info("删除后" + headers.getHeaders().getStringValue());


        log.info(sampler.getPath());
        log.info(sampler.getMethod());
        log.info(sampler.getContentEncoding());
        log.info(sampler.getDomain());
        log.info(sampler.getEmbeddedUrlRE());
        log.info(sampler.getQueryString());
        log.info(sampler.getConcurrentPool());
        log.info(sampler.getIpSource());
        log.info(sampler.getProtocol());
        log.info(sampler.getProxyHost());
        log.info(sampler.getProxyPass());
        log.info(sampler.getProxyScheme());
        try {
            log.info(String.valueOf(sampler.getUrl()));
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }

        SampleResult prev = ctx.getPreviousResult();

        String sc = prev.getResponseCode();  // 响应状态码
        boolean yn = prev.isResponseCodeOK();  // 响应状态码是否为200 返回True或者False
        String tname = prev.getThreadName();  // 当前的线程名
        String ct = prev.getContentType();  // 连接类型
        long sb = prev.getSentBytes();  // 请求报文大小
        long rb = prev.getBytesAsLong();  // 响应报文大小
        long db = prev.getLatency();  // 延迟时间
        long cont = prev.getConnectTime();  // 连接时间
        URL url = prev.getURL();  // 取样器的URL
        long rsb = prev.getBodySizeAsLong();  // 响应正文大小
        log.info("响应状态码:" + sc);
        log.info("响应状态码是否为200: " + yn);
        log.info("线程名: " + tname);
        log.info("连接类型:" + ct);
        log.info("请求报文大小: " + sb);
        log.info("响应报文大小: " +rb);
        log.info("延迟时间: " + db);
        log.info("连接时间: "+ cont);
        log.info("取样器的URL: " + url);
        log.info("响应正文大小: " + rsb);
    }


}


后续只要在idea中编写完成之后,把方法中的内容复制到jmeter的beanshell中执行即可。

标签:info,jmeter,String,编辑器,Beanshell,sampler,import,Jmeter,log
From: https://blog.csdn.net/demonlamei/article/details/136895269

相关文章

  • JMeter压测存储过程
    背景压测后端接口时性能表现不佳,而恰好这个接口是调用DB存储过程进行处理数据,可以分别对存储过程和后端接口进行压测,并对比性能数据,了解分析性能瓶颈。前置下载:mysql-connector-j-8.3.0.jar,放置到jmeter\lib\ext目录下注:测试不同的数据库下载不同的jar包引入jmeter配置执行......
  • Jmeter 之跨线程组传参(环境变量设置为全局变量)
    工作中往往会出现同一个测试计划下这个线程组下变量在另外一个线程组中使用,这就意味着需要把环境变量修改为全局变量 1.首先通过json提取器或者正则表达式的方式把数据提取出来 2.打开函数助手,选择setProperty函数, 生成函数${__setProperty(token,${access_token},)}3.......
  • 安装jmeter
    一、先安装JDK我选择了openJDK下载地址:https://jdk.java.net/archive/ 下载后,解压到要安装的文件夹设置环境变量新建:JAVA_HOME  , JDK的安装目录编辑PATH变量: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 校验是否安装成功:java-version 返回openjdkversion"19"......
  • Jmeter无法录制火狐浏览器打开的本机地址——http://Localhost:8080/*****
    问题描述:用管理员账号打开jmeter,新建录制模板,配置好网址和代理地址,证书也导入到火狐浏览器,浏览器也配好了代理地址。发现Jmeter可以录制别的地址,无法录制本机地址。原因分析:我们打开火狐浏览器的代理设置,可以发现它默认本机地址通过代理连接。接着我们要更改配置。在网址中......
  • 接口性能测试 —— Jmeter并发与持续性压测
    接口压测的方式:1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种方式可以控制压测周期时间指定并发数例1:设置线程数:10设置执行时间:0设置循环次数:5说明:使10个线程启动并同时运行也就......
  • 想要把PDF文件转TXT文本编辑改动怎么办?三秒钟帮你搞定 PDF编辑器
    pdf是一种便携文件格式,是由Adobe公司所开发的独特的跨平台文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。有点遗憾的是,大部分移动设备诸如手机、MP4等是不支持打开......
  • jmeter 把响应结果数据写入指定txt文件
    需要把登陆接口返回的token提取出来,保存到一个文件里给其它接口用。登陆接口响应如下在登陆接口取样器下添加"JSON提取器",提取token 在登陆接口取样器下添加"BeanShell后置处理程序" 代码如下://指定需要定稿到哪个文件,格式:TXT,CSVFileWriterfile......
  • jmeter-文件上传02
    内容详情:1.资料发布,分为资料上传和资料保存两个请求,资料上传的返回的接口中file_id是资料保存的请求的参数资料上传抓包:   资料保存抓包     tips:在这个过程遇到的坑1.写了全局的http信息头,但这两个请求跟之前其他请求的请求头部不一样,导致一......
  • jmeter使用
    jmeter是进行压力测试时候的关键的工具,对开发人员来说是重要的工具之一一.安装说明:因为jmeter是使用jave编写,并且从官网下载下来的是二进制source,需要java的运行环境即jdk①去官网下载jdk的包https://www.oracle.com/java/technologies/downloads,之后再选好需要的jdk版......
  • 基于jmeter的性能全流程测试
    01、做性能测试的步骤1、服务器性能监控首先要在对应服务器上面安装性能监控工具,比如linux系统下的服务器,可以选择nmon或者其他的监控工具,然后在jmeter模拟场景跑脚本的时候,同时启动监控工具,这样就可以获得jmeter的聚合报告和服务器的性能报告,然后分析这两份报告,得到性能测试的......