jmeter中beanshell的用法小结

本文主要介绍了jmeter中beanshell的用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、什么是Bean Shell

BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。

BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

官网地址:http://www.BeanShell.org/

二、BeanShell的用法

2.1操作变量:

通过使用Bean shell内置对象vars可以对变量进行存取操作

a) vars.get("name"):从jmeter中获得变量值

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

2.2操作属性:

通过使用Bean shell内置对象props 可以对属性进行存取操作

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

b) props.put("PROP","12345");

2.3引用外部java文件:

假如我有一个java 源文件,名为:myJava.java,代码如下:

复制代码
package demo;
public class Myclass
{
    public int add(int a, int b)
{
        return a + b;
    }    
}

在bean shell中通过source("代码路径")方法引入java,然后调用方法和java一样。

运行结果, 获取到值:


2.4引用外部class文件:

直接把上例中的myJava.java文件编译成class文件,用addClassPath("C:\")方法引入 class文件,在用import导入包及类,然后就可以像java一样调用了


2.5引用外部Jar包:

1、在eclipse写好代码,然后把该类打成jar包(在工程上点击右键->Export->jar file)将jar包放到jmeter目录\apache-jmeter-5.3\lib\ext下

或者,在Test Plan的右侧面板最下方直接添加需要引用的jar包,如下图:

2.重启jmeter

3.添加个请求,在该请求下添加一个BeanShell PreProcessor

4.在登录请求接口下使用 e n c o d e u s e r n a m e , {encode_username}, encodeusername,{encode_password}引用就可以加密登录了

三、Bean Shell常用内置变量

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

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。

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

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

b) getResponseCode() :获取响应code

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

sampler - (Sampler):gives access to the current sampler

四、提取json数据

需求:提取sample返回json数据中所有name字段值,返回的json格式如下:

{"body":{"apps":[{"name1":"111"},{"name2":"222"}]}}

BeanShell 后置处理程序添加如下代码:

复制代码
import org.json.*;
String response_data = prev.getResponseDataAsString();
JSONObject data_obj = new JSONObject(response_data);
String apps_str = data_obj.get("body").get("apps").toString();
JSONArray apps_array = new JSONArray(apps_str);
String[] result = new String[apps_array.length()];
for(int i=0;i<apps_array.length();i++){
    JSONObject app_obj = new JSONObject(apps_array.get(i).toString());
    String name = app_obj.get("name").toString();
    result[i] = name;
}
vars.put("result", Arrays.toString(result));

五、断言

复制代码
import txtWrite.*;
String response_data = prev.getResponseDataAsString();
String assert_data="科目${num}";
TxtWrite writeData=new TxtWrite();
if(response_data.indexOf(assert_data)!=-1)//请求的response中有包含自定义字符,则断言结果为false
{
    Failure=false;
    String message="${__time(yyyy-MM-dd HH:mm:ss,)}   新建科目【"+assert_data+"】成功";
    FailureMessage=message;
    writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message);
}else
{
    Failure=true;
    String message="${__time(yyyy-MM-dd HH:mm:ss,)}   新建科目【"+assert_data+"】失败----------";
    String response="本次请求response数据:"+prev.getResponseDataAsString()+"----------";
    String need_assert="需要断言的数据:"+assert_data;
    FailureMessage=message+response+need_assert;
    writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message+response+need_assert);
}

到此这篇关于jmeter中beanshell的用法小结的文章就介绍到这了


最后

如果你想学习自动化测试,那么下面这套视频应该会帮到你很多

如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖....

最后我这里给你们分享一下我所积累和整理的一些文档和学习资料,有需要直接领取就可以了!

以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

​​

​​​​

相关推荐
huohaiyu5 分钟前
synchronized (Java)
java·开发语言·安全·synchronized
_OP_CHEN12 分钟前
C++基础:(九)string类的使用与模拟实现
开发语言·c++·stl·string·string类·c++容器·stl模拟实现
蓝天智能26 分钟前
QT MVC中View的特点及使用注意事项
开发语言·qt·mvc
松果集35 分钟前
【1】数据类型2
python
且慢.58944 分钟前
命令行的学习使用技巧
python
木觞清1 小时前
喜马拉雅音频链接逆向实战
开发语言·前端·javascript
海琴烟Sunshine1 小时前
leetcode 66.加一 python
python·算法·leetcode
wuxuanok1 小时前
苍穹外卖 —— 公共字段填充
java·开发语言·spring boot·spring·mybatis
偷光1 小时前
浏览器中的隐藏IDE: Console (控制台) 面板
开发语言·前端·ide·php
罗橙7号1 小时前
【pyTorch】关于PyTorch的高级索引机制理解
人工智能·pytorch·python