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}

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

相关推荐
一只爱打拳的程序猿12 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧13 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck15 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
为将者,自当识天晓地。34 分钟前
c++多线程
java·开发语言
daqinzl42 分钟前
java获取机器ip、mac
java·mac·ip
激流丶1 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法