Jmeter-Beanshell取样器中引入自制的java脚本(jar java class)

1、内置变量:log:写入信息到jmeter.log,使用方法:

log.info("hello,world"),也可以在jmetergui上看到打印的信息。

2、设置Jmeter变量的值,将定义的变量或提取的变量做修改后再进行传参

Vars:操作jmeter变量,这个变量实际上引用了Jmeter线程中的局部变量容器(本质是map),测试用例可以通过它获取到变量的值;使用方法:

①vars.get(Stringkey),从jmeter中获得变量值

②vars.put(Stringkey,Stringvalue),数据存到jmeter变量中

3、props:该变量引用jmeter的配置信息,可以获取jmeter的属性,用法如下:

①props.get(Stringkey)获取jmeter.properties中的属性值

②props.put(Stringkey,Stringvalue)设置jmeter.properties中的属性值

4、prev(对应SampleResult):获取前面Sampler返回的信息,常用方法:

①getResponseDataAsString(),获取响应正文

②getResponseCode(),获取响应Code

③getResponseMessage(),获取响应信息

使用场景:

①beanshell一般可以处理数据加解密

②根据上一个请求的返回值不同,设置不同的参数给下面的请求

③jmeter虽然支持协议丰富,但还是可能会出现不支持的,此时可以用beanshell

5、BeanShell中如何编写脚本

①直接编写代码

②调用外部的Java源码实现

注意事项:

1.class_path可以不是绝对上级路径,只需要包含.class文件即可如/Users/liuqingjun/workspace/T139/

2.class_path一般不能包含包名对应的目录路径如/Users/liuqingjun/workspace/T139/bin/com/test否则可能会报错Errorinvokingbshmethod:evalCreateFile(wrongname:***/***)

遇到的问题:

  1. error invoking bash method:eve(wrong name:/) 至今未解决

tips:

BeanShell中再编写Java代码时,对分号";"有着强要求,代码写完必须以分号结束,才开始写第二句代码,否则会报错

BeanShell简介:

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些 语法和方法;

BeanShell是一种松散类型的脚本语言;

BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的 Java源代码解释器,具有对象脚本的特性;

BeanShell可以执行标准Java语句和表达式,以及另外自身的一些脚本命令 和语法。

Jmeter中的BeanShell组件

定时器:BeanShell Timer

前置处理器:BeanShell PreProcessor

采样器:BeanShell Sampler

后置处理器:BeanShell PostProcessor

断言:BeanShell Assert

监听器:BeanShell Listener

BeanShell常用内置变量

log:写入信息到jmeter.log,使用方法:log.info("hello,world"),也可以在 jmeter gui上看到打印的信息。

注意:如果想在jmeter工具中看到打印的日志;点击jmeter------选项------日志查看

示例:

vars:操作jmeter变量,这个变量实际上引用了Jmeter线程中的局部变量容器 (本质是map),测试用例可以通过它获取到变量的值

1、vars.get(String key),从jmeter中获得变量值

示例:

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

示例:

props:该变量引用jmeter的配置信息,可以获取jmeter的属性(jmeter属性为全局变量),用法如下:

1、props.get(String key) 获取jmeter.properties中的属性值

2、props.put(String key, String value) 设置jmeter.properties中的属性值(不常用,且没必要,因为不会实际调整文件内的值)

prev(对应SampleResult):获取前面Sampler返回的信息,常用方法:

1、getResponseDataAsString(),获取响应信息

2、getResponseCode(),获取响应Code

3、getResponseMessage(),获取响应信息

示例:

BeanShell 调用java源码

方式一、通过 beanshell sampler 直接执行 Java 编码

示例:

方法二:引入外部 Java 源码文件

外部java文件内容如下:

beanshell引入代码如下

方法三:引入外部class文件

注意事项:

1、class_path可以不是绝对上级路径,只需要包含.class文件即可

如 /Users/xiaoming/workspace/demo139/

2、class_path一般不能包含包名对应的目录路径

如 /Users/xiaoming/workspace/demo139/bin/com/test

否则可能会报错

Error invoking bsh method: eval CreateFile (wrong name: ***/***)

方法四:引入外部jar包(推荐常用)

1、在eclipse\IDEA中把所需的java文件打包成jar文件,比如Calc.jar

2、方式一:把Calc.jar文件放置到JMeter安装目录->lib目录下

方式二:在测试计划界面的添加目录或jar包到classpath处点击浏览,找到对应的jar包加载进去

4、直接在beanshell中导入应用即可(如果执行错误,把jmeter重启一下)

方式一的示图:

方式二的示图:

beanshell企业实战

备注:在上一家公司的经历,一个web网站,密码进行加密传输,通过和开发沟通了解到密码是通过MD5加密的,开发人员对密码加密的逻辑是MD5加密后的字符串的前后各加三个任意字符,后台只对前后三个任意字符的中间字符串进行解密,来达到密码加密的逻辑;所以遇到密码加密的情况,需要和开发沟通了解加密的逻辑是怎么样的,才能做接口自动化测试;(或者偷懒的方式通过手动登录获取token,把token放到header里面)

1、从开发处获取jar包,先在eclipse中使用jar包检查每一个小功能(咨询开发·加解密函数名称以及如何传参)。

非对称加密的jar包地址:文章末尾安排

2、把jar包导入到jmeter(一般通过测试计划导入jar包)

3、导入jar包后在beanshell中编写代码测试是否可以把图中的"123456"进行加密;

4、查看日志;日志中指定的值进行的加密,说明代码测试成功

5、在beanshell中一般使用: 调用jar包时一般和 vars.get,vars.put结合使用,在下面的请求中·使用变量名1},{变量名2}

通过察看结果树中的调试取样器可看到加密后的值;如下图:

相关推荐
缺点内向1 小时前
Java:创建、读取或更新 Excel 文档
java·excel
带刺的坐椅2 小时前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看3 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
桦说编程3 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t3 小时前
ZIP工具类
java·zip
lang201509284 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
pengzhuofan4 小时前
第10章 Maven
java·maven
百锦再5 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
刘一说5 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多5 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring