【Jmeter】BeanShell介绍和常用语法

BeanShell是什么?

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
  • BeanShell是一种松散类型的脚本语言;
  • BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的Java源代码解释器,具有对象脚本的特性;
  • BeanShell可以执行标准Java语句和表达式,以及另外自身的一些脚本命令和语法。

Jmeter中有哪些BeanShell组件

  • 定时器:BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器:BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:BeanShell Assert(使用方法连接)
  • 监听器:BeanShell Listener

BeanShell常用内置变量

Jmeter在它的BeanShell中内置了变量,用户可以通过这些变量和Jmeter进行交互,其中主要的变量及使用方法如下:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterVariables;

LocalDateTime time = LocalDateTime.now();
String date = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//打印调试日志写入。写入信息到jmeter.log
log.info("----->" + date);
//****************************vars使用********************************//
//变量生成
vars.put("tmp" , date);
//变量读取
String date1 = vars.get("tmp");
log.info("值读取测试结果1------>" + date1);
String date = "${tmp}";
log.info("值读取测试结果2------>" + date1);
//直接获取jmeter自动生成的参数变量,COOKIE__gh_sess 存放了cookies信息,是系统自动添加的
log.info(vars.get("COOKIE__gh_sess"));
//操作map类型注意事项
HashMap map = new HashMap(5);
map.put("test1", "1");
log.info(map.toString());
//************************ctx使用\SampleResult 用法***********************************//

//获取Jmeter当前运行时变量集合。
JMeterVariables var = ctx.getVariables();
//增加变量集合
var.put("hello"," hello world");

//SampleResult需要import对象
import org.apache.jmeter.samplers.SampleResult;
//ctx上下文信息获取,获取上一个请求result 
SampleResult result = ctx.getPreviousResult();
//getRequestHeaders()方法返回String字符串
String RequestHeaders = result.getRequestHeaders();
//getResponseHeaders() 返回响应headers
String ResponseHeaders = result.getResponseHeaders() 
//getResponseCode() 返回响应状态码字符串
String responseCode = result.getResponseCode();
//getURL() 返回请求URL对象 
URL url = result.getURL();
//获取上一个请求的响应信息
String code = result.getDataType();

//设置当前的sampler的code
ResponseCode = 500;
//设置当前的sampler的message
ResponseMessage = "This is a test";
//***********************prev信息*******//
#获取响应信息
String str = prev.getResponseDataAsString();
#获取响应Code
String str = prev.getResponseCode();

BeanShell导入JAR包并调用接口

package com.welab.sun.util;

import java.util.Arrays;
import java.util.Map;

import org.apache.commons.codec.digest.DigestUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;

/**
 * 测试签名
 * 
 * @author one.xu
 *
 */
public final class SignatureUtil {
     
	private SignatureUtil() {
     
	}

	public static String getSignature(String json, String secret) {
     
	
“”“”“”
省略
“”“”“”
}
}

导出jar包叫sunSignature.jar
导出Jar包如下,并将此jar包复制到 jemeter跟目录 \lib\ext 之后重启jemeter

BeanShell脚本如下:


#引用时必须加.*,com.welab.sun.util是包名
import com.welab.sun.util.*;
SignatureUtil sign = new SignatureUtil();
String Signature=sign.getSignature(json,secret);
vars.put("Signature",Signature);

如果遇到class找不到,可能是导入包有冲突,多加几种导入方式

你可能感兴趣的:(Jmeter)