一 、运用参数

在BeanShell脚本中 ,贴上此代码,会输出一个test1为json格式的的字符串。


import org.json.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
JSONObject request_data = new JSONObject();
request_data.put("merCode", "${mercode}");
request_data.put("batchNo", "${a}${b}");
request_data.put("insCode","${mercode}");
request_data.put("insName","${insName}");
request_data.put("orderId","${a}${b}");
request_data.put("idCard","${idCard}");
request_data.put("settAmt","${settAmt}");
request_data.put("userName","${userName}");
request_data.put("settAcctName","${settAcctName}");
request_data.put("tranType","${tranType}");
request_data.put("settAcct","${settAcct}");
request_data.put("acctType","${acctType}");
request_data.put("merCbName","${merCbName}");
request_data.put("merCbCode","${merCbCode}");
JSONArray jsonArray = JSONArray.fromObject(request_data);
log.info("request_data:"+jsonArray.toString());
vars.put("test1",(String)jsonArray.toString());
log.info("最终的请求参数:"+test1);

如果运行出现问题:

java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException

说明没有相对应的jay包:
commons-beanutils-1.8.3.jar
commons-lang-2.5.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk15.jar

这些包要去国内官方下载:戳这里
这下面这个输入框下面搜你想要的jar包,然后进去,点击,下载,看图!

一,选择第一个:commons-beanutils

二,选择最新版本的

三,下载jar包

完了之后就到本地,再把对应代码放到jemter安装目录下的lib/ext目录下

搞定完了之后,日志就会出来这样的字符串:可以结合实际使用

INFO o.a.j.u.BeanShellTestElement: request_data:[{"merCode":"${mercode}","batchNo":"${a}${b}","insCode":"${mercode}","insName":"${insName}","orderId":"${a}${b}","idCard":"${idCard}","settAmt":"${settAmt}","userName":"${userName}","settAcctName":"${settAcctName}","tranType":"${tranType}","settAcct":"${settAcct}","acctType":"${acctType}","merCbName":"${merCbName}","merCbCode":"${merCbCode}"}]

二、结合代码

举个例子:在BeanShell里面向文件写入内容。参考原文戳这里
请求内容是这样的:{“data”: “[id1, id2, id3…]”}

使用BeanShell实现写入文件的操作,考虑一下3点:
① 写入到文件中的格式要能参数化给待测业务用
② id不可重复使用,那就要求文件中的内容每次都是新的id,即旧文件要删除
③ 虽然前置业务返回的是JSON,但考虑到Java处理JSON要依赖第3方jar包,脚本移植不方便,就直接操作字符串吧

shell代码是:

import java.io.*;var idFile = "data/id.csv";  // 定义存放id的文件路径try{File f = new File(idFile);f.delete();     // 删除旧的idFile文件
}catch(Exception e){e.printStackTrace();
}var idStr = vars.get("data");    // 获取JSON Extractor中提取的data
idStr = idStr.replace("[","");     // 去掉 "[id1, id2, id3...]" 首尾的中括号
idStr = idStr.replace("]","");
String[] temp = idStr.split(",");   // 以"," 分割字符串 "id1, id2, id3...",保存成String类型的数组FileWriter fstream = new FileWriter(idFile);   //FileWriter("file01.txt",true) 追加模式
BufferedWriter out = new BufferedWriter(fstream);for (int i = 0; i < temp.length; i++){out.write(temp[i]);out.write(System.getProperty("line.separator"));  // 换行
}out.close();
fstream.close();

注意这里有个坑,就是JMeter脚本在执行时,会先检查csv文件是否存在,不存在会报错,所以需要先手动创建一个“id.csv”在data目录下,有无内容无所谓,主要为了检查通过

三、实际使用

我需要写一个格式为这样的数据:{"A":"LOCAL","B":"Local","C":[58,76,62,78,71,61,56,70,80,74,67,60,69,55,64,72,63,59,57,73,164,163,162,68,77,75],"endDateTime":"2022-06-02 12:29:04"}到文件里面,结果发现在csv写入不行,最后写在了txt里面。

代码如下:

import org.json.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
JSONObject data = new JSONObject();
data.put("A","LOCAL");
data.put("B","Local");
data.put("C","[58,76,62,78,71,61,56,70,80,74,67,60,69,55,64,72,63,59,57,73,164,163,162,68,77,75]");
data.put("endDateTime",vars.get("date")); //vars.get("date") date = ${__timeShift(YYYY-MM-dd HH:mm:ss,,,,)} 取当前时间
JSONArray jsonArray = JSONArray.fromObject(data);
log.info("data:"+jsonArray.toString());
var idStr = (String)jsonArray.toString();
idStr = idStr.replace("[{","{");     // 去掉 "[{、}]" 首尾的中括号
idStr = idStr.replace("}]","}");
log.info("最终请求的参数:"+idStr);  //日志打印当前的参数import java.io.*;
var idFile = vars.get("blob");  // 定义存放blob的文件路径 C:\\xx\\xx\\xx.txt
try{File f = new File(idFile);f.delete();     // 删除旧的idFile文件
}catch(Exception e){e.printStackTrace();
}FileWriter fstream = new FileWriter(idFile);   //FileWriter("file01.txt",true) 追加模式
BufferedWriter out = new BufferedWriter(fstream);out.write(idStr);//写入文件的内容
out.close();//退出文件写入
fstream.close();//退出追加

数据用到这里:关于https的文件上传相关坑可以戳这里查看

四、BeanShell断言

一、

if("${returnStatus}"=="00"){Failure=false;FailureMessage="交易成功";log.info("交易成功");}
if("${returnStatus}"=="01"){Failure=true;FailureMessage="md5错误";log.info("md5错误");}

二、

针对查询接口import org.apache.log4j.Logger;String response_data = prev.getResponseDataAsString();//获取接口返回的response数据
log.info("##  response_data="+response_data+"  ##");if(response_data.contains(""total":"+${count})||response_data.contains(""total":null")){Failure=false; //设置成false 表示接口跑成功,在结果树中sample是绿色的}else{Failure=true; //直接判断失败 表示接口跑失败,在结果树中sample是红色的FailureMessage="错误信息";prev.setStopThread(true);//如果断言失败,后面的接口不需要再跑,直接暂停
}

五、BeanShell取样器:MD5加密

import org.apache.commons.codec.digest.DigestUtils;
//String md5str847="${merCode}${tranAmt}${key01}";
String md5Str = DigestUtils.md5Hex("${merCode}${tranAmt}${key01}");
vars.put("md5Str",md5Str.toUpperCase());
System.out.println(md5Str);
log.info("加密后:"+md5Str);

六、获取CSV参数文件行数

一、添加用户自定义的变量:

path01 E:\新建文件夹\jmeter造数据\删除当天历史提现数据.csv
path02 E:\新建文件夹\jmeter造数据\刷卡提现.csv
path02 E:\新建文件夹\jmeter造数据\刷卡提现1.csv

二、BeanShell取样器:获取参数文件行数

import java.io.BufferedReader;
import java.io.FileReader;
BufferedReader br =new BufferedReader(new FileReader("${path01}"));
String tmpStr=null;
Integer rowCount=0;
while((tmpStr=br.readLine())!=null){rowCount++;
}
rowCount=rowCount-1;
vars.putObject("rowCount",String.valueOf(rowCount));
log.info("第一个参数文件行数:"+String.valueOf(rowCount));BufferedReader br1 =new BufferedReader(new FileReader("${path02}"));
String tmpStr=null;
Integer rowCount1=0;
while((tmpStr=br1.readLine())!=null){rowCount1++;
}
rowCount1=rowCount1-1;
vars.putObject("rowCount1",String.valueOf(rowCount1));
log.info("第二个参数文件行数:"+String.valueOf(rowCount1));BufferedReader br2 =new BufferedReader(new FileReader("${path03}"));
String tmpStr=null;
Integer rowCount2=0;
while((tmpStr=br2.readLine())!=null){rowCount2++;
}
rowCount2=rowCount2-1;
vars.putObject("rowCount2",String.valueOf(rowCount2));
log.info("第三个参数文件行数:"+String.valueOf(rowCount2));

三、BeanShell取样器:设行数为全局变量

${__setProperty(rowCount01,${rowCount})};
${__setProperty(rowCount02,${rowCount1})};
${__setProperty(rowCount03,${rowCount2})};

六、如果(lf)控制器

举例:${threadID}=="1"&&${returnStatus_1_g0}=="00"

关于jmeter中编写shell脚本json的应用相关推荐

  1. Linux中编写Shell脚本

    目录 Shell Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算

  2. linux 脚本中 -le,Linux中编写Shell脚本

    目录 Shell Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. 用户每输入一条命令,Shell就执行一条.这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式. ...

  3. 在linux中编写shell脚本文件,如何编写简单的Shell脚本(Script)文件之Linux的基本操作...

    如何编写简单的Shell脚本(Script)文件之Linux的基本操作 新建一个文本文件包含所需要的脚本.举例,我会使用pico编辑器写一个脚本用来运行程序tar,带上必要的可选项可以用来解压从因特网 ...

  4. 深信服上网行为管理开启snmp_编写SHELL脚本在CACTI中来实现监控深信服上网行为管理的CPU和内存使用情况...

    一.深信服上网行为管理中的SNMP设置 二.在CACTI中编写SHELL脚本如下: cpu oid: .1.3.6.1.4.1.35047.1.3 内存 oid: .1.3.6.1.4.1.35047 ...

  5. 多宽带联网(三) OpenWrt中使用cURL方法编写Shell脚本自动完成网页宽带认证登录(校园网认证登录解决方案) 使用awk命令

    对于非PPPoE方式认证,而是采用网页认证登录的宽带用户(如校园网).采用<多宽带联网(二)>中的方法一个一个接口进行认证登录过于繁琐.本节将采用Shell脚本和cURL方法,模拟人工认证 ...

  6. Linux中shell编程——编写shell脚本,实现功能:在用户输入年、月后自动打印出对应年月的日

    实验目的 理解shell程序的设计方法 掌握shell程序编辑.运行.调试方法与过程 实验内容 shell简单编程 实验过程 要求: 1.记录实验过程,对关键过程进行文字说明并附上操作截屏. 2.逻辑 ...

  7. 使用 JavaScript 编写 Shell 脚本

    作为程序员,在平时的开发中肯定少不了一些命令行操作了.当然,简单的命令大家都是可以拿捏的,但是涉及到一些逻辑的时候还是比较头疼的. Shell Shell 是一个用 C 语言编写的程序,它是用户使用 ...

  8. 【Linux学习】如何编写Shell脚本调用企业微信api来发消息给企业微信成员?

    一.前言 最近通过python实现了发送消息给企业微信的功能,参考链接: [Jenkins学习 ]如何编写Python脚本来调用企业微信的api通知企业微信成员关于Jenkins的编译结果? http ...

  9. 如何使用zx编写shell脚本

    编写Shell脚本的问题 创建一个由Bash或者zsh执行的shell脚本,是自动化重复任务的好方法.Node.js似乎是编写shell脚本的理想选择,因为它为我们提供了许多核心模块,并允许我们导入任 ...

最新文章

  1. BEM 实战之微信个人页面
  2. 我专严新闻小偷之心得与大家交流
  3. 节能信标组:让我们一起来内卷
  4. bat批处理(二):%0 %1——给批处理脚本传递参数
  5. 粒子滤波Matlab示例
  6. XML中预定义好的实体
  7. Android中ImageView的旋转与缩放
  8. 手写Java线程池_超详细解说_绝对能运行_代码超详细注释
  9. 【codevs2304】【BZOJ1875】HH去散步,第一次的矩阵加速DP
  10. OpenCV4每日一练day2:运行OpenCV示例程序(边缘检测、kmeans聚类)
  11. 给我一个及时的问候——XMPP
  12. Content-type是application/json的作用
  13. 华胜天成助力中国银联实现移动互联时代的多渠道扩张
  14. ubuntu报错:RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted.
  15. Selenium自动化程序被检测为爬虫,怎么屏蔽和绕过
  16. 【C++】-- C++11基础常用知识点(下)
  17. python crc16-ccitt
  18. JavaScript 排他思想
  19. Application做的单叶聊天室
  20. Python爬虫教程-16-破解js加密实例(有道在线翻译)

热门文章

  1. 微软ipv6服务器,IPv6用户危险了!Win10出现严重安全漏洞
  2. 微信小程序授权之getuserInfo
  3. 清理Elasticsearch中过期的日志索引
  4. 微分,不定积分,定积分的简单理解
  5. c语言程序中小括号()和大括号{}的本质是什么,C程序中,用一对大括号{}括起来的多条语句称为复合语句,复合语句在语法上被认为是一条语句。...
  6. 计算机专业毕业设计选题推荐(建议收藏)
  7. 2021-11-02
  8. SAP中销售订单计划行类别中请求/装配对物料需求计划的影响测试
  9. BZOJ4200 洛谷2304 UOJ132:[NOI2015]小园丁与老司机——题解
  10. js获取当前时间 年月日 分秒