IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> jmeter之beahshell(一) -> 正文阅读

[Java知识库]jmeter之beahshell(一)

1、什么是beahshell

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
BeanShell是一种松散类型的脚本语言(这点和JS类似);
BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

2、beahshell类型

在jmeter中包括以下beahshell类型:

定时器:  BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器:  BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言:   BeanShell断言
监听器:  BeanShell Listener

3、beahshell的使用场景

场景1:业务单据参数化时要生成一组(多个时间,比如订单日期,发货日期等未来的时间),运用JMeter提供的时间函数并不能较好的完成。
场景2:测试Java接口,确又不想继承AbstractJavaSamplerClient 来完成,此时可以用BeanShell Sampler来完成。
场景3:线程共享变量,我们希望线程之间共享一个变量,可以利用BeanShell来完成。

场景4:对于接口返回的所有数据进行断言验证

3、beahshell案例

场景:访问百度首页,然后传递关键词参数,此时需要对关键词进行MD5加密

?参数age已经在变量中进行了定义,但是没有进行加密,所以就需要添加一个加密处理。

此时在http请求中添加一个BeanShell PreProcessor前置处理。

方法:

1:在Java编辑器中编写MD5加密程序,代码如下:

import java.security.MessageDigest;
public class MD5 {
    public static void main(String[] args) {
        //以下为测试MD5加密测试
        System.out.println("test:01");
        byte[] b = {18};
        byte c = 18 ;
        System.out.println("test:02 " + byteArrayToHexString(b));
        System.out.println("test:03 " + byteToHexString(c));

        String name_english = "hello" ;
        String name_china = "中文" ;
        String charsetname = "gbk" ;
        System.out.println("test:04 " + MD5Encode(name_english));
        System.out.println("test:05 " + MD5Encode(name_china,charsetname));
    }
    //将byte[]数据转换成String
    private static String byteArrayToHexString(byte[] b) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    //将byte数据转换成String
    private static String byteToHexString(byte b) {
        String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
        int n = b;
        if (n < 0) n = 256 + n;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }
    //将String加密成MD5
    public static String MD5Encode(String origin) {
        String resultString = null;
        try {
            resultString= origin;
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString=byteArrayToHexString(md.digest(resultString.getBytes()));
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        return resultString;
    }
    //将String加密成MD5,并可以设置string的编码
    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = origin;
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (charsetname == null || "".equals(charsetname))
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            else
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
        } catch (Exception exception) {
        }
        return resultString;
    }

}

?以上编码执行结果如下:

test:01
test:02 12
test:03 12
test:04 5d41402abc4b2a76b9719d911017c592
test:05 bcce109775e8e1972e9f5fcda3e12895

2:将代码编译成jar包,然后放到jmeter的路径/lib/ext下面

3:然后打开jmeter,添加测试计划、http请求,然后再添加BeanShell PreProcessor,界面如下所示:

定义变量:

?添加http请求,并引用变量:

?添加BeanShell PreProcessor,引用MD5包,并修改变量abc的值

?

import MD5; //引用MD5 jar包

vars.put("id","120") ;  //将变量id的值设置为120
String country_t = vars.get("country");  //获取自定义变量country
vars.put("country",country_t +"test") ;  //将变量country的值设置为原有的值加上test

String test = "中文" ;  //定义变量test
String abc_md5 = MD5.MD5Encode(test) ;  //然后将变量test通过MD5加密
vars.put("abc",abc_md5 ) ; //将变量abc的值设置为abc_md5 

4:然后运行jmeter,查看运行结果

?参数name:已经由原来的“中国”变成了“中国test”,

参数age:已经由原来的“测试变量”变成了MD5数据“bcce109775e8e1972e9f5fcda3e12895”

3、beahshell常用方法

log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。

vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

 a) vars.get(String key):从jmeter中获得变量值

 b) vars.put(String key,String value):数据存到jmeter变量中

 更多方法可参考:org.apache.jmeter.threads.JMeterVariables

props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。

 a) props.get(“START.HMS”);  注:START.HMS为属性名,在文件jmeter.properties中定义

 b) props.put(“PROP1”,”1234”);

prev - (SampleResult):获取前面的sample返回的信息,常用方法:

 a) getResponseDataAsString():获取响应信息

 b) getResponseCode() :获取响应code

 更多方法可参考:org.apache.jmeter.samplers.SampleResult

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:09:53  更:2022-04-09 18:11:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:56:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码