1、BeanShell 语法
BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。
有以下五个组件:
• Beanshell Sampler
• Beanshell PreProcessor
• Beanshell PostProcessor
• Beanshell Assertion
• __Beanshell Function
常用变量
- vars:实际引用jmeter线程的局部变量,连通jmeter和beanshell
vars.get(String key) //获取变量值
vars.put(String key, String value)//存储value到变量key - log: 写入信息到日志中,log.info(“原样写入日志:jmeter.log 中”);
- prev: 获取前一个sample的响应
getResponseDataAsString()
getResponseCode() - props: class java.util.Properties
变量属性赋值给变量props.put(“some_variable”,vars.get(“some_variable”))
vars - 保存变量
vars.put(String key, String value); - 获取环境中的变量值
vars.get(“key”);
prev - 获取接口返回的报文
String response = prev.getResponseDataAsString(); // 获取Response
props
1、设置属性(比如cookie)
props.put(“cookie”, String value);
2、获取属性
props.get(“key”);
在BeanShell中编辑脚本
import org.json.*; //如果有包依赖则需要导入
String response = prev.getResponseDataAsString(); // 获取Response
JSONObject json = new JSONObject(response); //转换为Json数据
String id = json.getJSONObject("data").getString("id"); //获取相应节点的值
自定义方法:
public static String test(){
//一些代码
}
Test(); //执行,写了代码块需要调用才可执行
如果该包不在 lib/ext/ 下,需要在线程组中引入依赖的架包(最好都引用吧,避免出错)
在BeanShell中引用外部Java文件
如上一步,也需要引包;
source(“G:\Selenium_Workspace\JmeterExternalUtil\路径\JmeterExternalUtil.java”); //引入Java文件路径(也可引用.class文件),路径需要使用双斜杠 \
String id = new JmeterExternalUtil().test(response); //引用外部Java文件中的类方法
vars.put("id---->", id); //把变量保存到环境中
Java文件内容:
package jmeter.external.util;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Jmeter外部jar包
* Created by hadis on 2018/7/13.
*/
public class JmeterExternalUtil {
public String test(String jsonStr) throws JSONException {
JSONObject json = new JSONObject(jsonStr);
String id = json.getJSONObject("data").getString("id");
return id.split(":")[1];
}
}
在BeanShell中获取、使用环境变量值
在Parameter是中设置值,如果有个多个值则用空格隔开,获取时使用 bsh.args[num] 的方式获取,num代表数字;
观察保存变量是否成功
添加调试处理器 Debug postprocessor ,执行之后在View Result Tree(结果树)中查看即可,如果在Response data 中显示保存的变量则为保存成功,否则保存失败,具体失败原因可查看执行日志,日志路径:安装路径/bin/jmeter.log
2、Jmeter一些自带函数的使用
*注意,下划线为两个 - 组成
-
${_threadNum} 获取线程数字
-
${__BeanShell(1+1,)} 一些算法的操作,该函数直接返回结果
-
${__groovy(‘hehe:aa’.split(’:’)[0],)} , 一些基本的方法操作,注意都好需要使用反斜杠转义: , 否则无法正常使用,该函数也可__BeanShell 一样进行算法运算
KaTeX parse error: Expected group after '_' at position 2: {_̲_groovy(vars.ge…{__groovy("${id}".split("?[0],)}
3、Jmeter一些功能 -
JSON Extractor
对JSON数据进行断言,json的表达式: . 节 点 ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20181110231521960. p n g ? x − o s s − p r o c e s s = i m a g e / w a t e r m a r k , t y p e Z m F u Z 3 p o Z W 5 n a G V p d G k , s h a d o w 1 0 , t e x t a H R 0 c H M 6 L y 9 i b G 9 n L m N z Z G 4 u b m V 0 L 3 h y a H l 0 a G 0 = , s i z e 1 6 , c o l o r F F F F F F , t 7 0 ) C o o k i e 操 作 1 、 首 先 需 要 修 改 j m e t e r . p r o p e r t i e s 文 件 ; 2 、 找 到 C o o k i e M a n a g e r . s a v e . c o o k i e s = f a l s e 并 设 置 为 t r u e ; 3 、 保 存 配 置 文 件 重 启 j m e t e r ; 4 、 在 需 要 取 C o o k i e 的 线 程 里 添 加 一 个 H t t p C o o k i e 管 理 器 ( H T T P C o o k i e M a n a g e r ) ; 5 、 可 以 默 认 为 空 , 但 是 一 定 要 添 加 , 否 则 是 不 会 存 储 c o o k i e 变 量 的 ; 6 、 抓 包 工 具 查 看 c o o k i e 命 名 , 若 命 名 为 t t s e s s i o n i d ; 7 、 则 在 整 个 测 试 计 划 需 要 获 取 的 c o o k i e 值 为 .节点  Cookie操作 1、 首先需要修改jmeter.properties文件; 2、 找到CookieManager.save.cookies=false并设置为true; 3、 保存配置文件重启jmeter; 4、 在需要取Cookie的线程里添加一个Http Cookie管理器(HTTP Cookie Manager); 5、 可以默认为空,但是一定要添加,否则是不会存储cookie变量的; 6、 抓包工具查看cookie命名,若命名为tt_sessionid; 7、 则在整个测试计划需要获取的cookie值为 .节点Cookie操作1、首先需要修改jmeter.properties文件;2、找到CookieManager.save.cookies=false并设置为true;3、保存配置文件重启jmeter;4、在需要取Cookie的线程里添加一个HttpCookie管理器(HTTPCookieManager);5、可以默认为空,但是一定要添加,否则是不会存储cookie变量的;6、抓包工具查看cookie命名,若命名为ttsessionid;7、则在整个测试计划需要获取的cookie值为{COOKIE_tt_sessionid},前面的COOKIE为jmeter命名规则; -
登录管理器
添加: HTTP Authorization Manager,输入Username和Password即可
4、监控
- 服务器资源监控
如监控Tomcat, 添加Monitor Result