BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的松散类型、命令、闭包等通用脚本来对其进行拓展。
前置处理器:请求发送之前对请求参数做一些处理
后置处理器:请求发送完成之后对响应数据进行处理
具体如下:
1、响应断言,直接用或进行匹配。
2、Beanshell脚本断言。需要线上下载一个jsonjar,放在jmeter目录下的lib下。
通过栈实现,先用栈将中缀表达式转化为后缀表达式,然后再用栈计算后缀表达式的值的
package comsaturday;
import javatextNumberFormat;
import javautilArrayList;
import javautilHashMap;
import javautilList;
import javautilMap;
import javautilStack;
import javautilregexMatcher;
import javautilregexPattern;
public class MyParse {
static Map<String,Integer> optrOrder;
static {
optrOrder=new HashMap<String,Integer>();
optrOrderput("(", 0);
optrOrderput("", 1);
optrOrderput("/", 1);
optrOrderput("%", 1);
optrOrderput("+",2);
optrOrderput("-",2);
optrOrderput("^",3);
optrOrderput("#",3);
}
public static void main(String[] args){
List<String> tokens;
try{
//词法分析
tokens=lex("+2 (-2+34)+-5");
//中缀转后缀
tokens=toRpn(tokens);
//计算结果
Systemoutprintln(calcRpn(tokens));
}catch(Exception ex){
exprintStackTrace();
}
}
/
将输入串转换为 *** 作符串
@param sExpres
@return
/
public static List<String> lex(String sExpres){
List<String> tokens=new ArrayList<String>();
//将表达式分割成符号序列
String sRegExp="(((<=^|\\(|\\+|-|\\|/|%)(\\+|-))\\d+(\\\\d+))"
+"|\\(|\\)|\\|/|\\+|-";
Pattern p=Patterncompile(sRegExp);
Matcher m=pmatcher(sExpresreplaceAll("\\s+",""));
while(mfind()){
tokensadd(mgroup());
}
tokensadd("#");
return tokens;
}
/
将中缀表单时转化为后缀表达式
@param tokens
@return
/
public static List<String> toRpn(List<String> tokens)
throws Exception{
List<String> rpnList=new ArrayList<String>();
Stack<String> optrStack=new Stack<String>();
optrStackadd("^");
for(String token:tokens){
if(tokenmatches("^(\\+|-)\\d+(\\\\d+)$")){
rpnListadd(token);
}else{
outputOptr(token,optrStack,rpnList);
}
}
if(!optrStackisEmpty()
&&optrStacklastElement()equals("#")){
return rpnList;
}else{
throw new Exception("后缀表达式转化错误!");
}
}
/
计算后缀表达式的值
@param rpnTokens
@return
@throws Exception
/
public static double calcRpn(List<String> rpnTokens)
throws Exception{
NumberFormat nf=NumberFormatgetInstance();
Stack<Double> numStack=new Stack<Double>();
for (String token : rpnTokens) {
if (tokenmatches("^(\\+|-)\\d+(\\d+)$")) {
token=tokenindexOf('+')==0
tokensubstring(1)
:token;
numStackadd(nfparse(token)doubleValue());
} else {
doCalcByOptr(token, numStack);
}
}
if (!numStackisEmpty() && numStacksize() == 1) {
return numStacklastElement();
} else {
throw new Exception("计算错误!");
}
}
/
将运算符输出到后缀表达式序列
@param optr
@param optrStack
@param rpnList
@throws Exception
/
public static void outputOptr(String optr,
Stack<String> optrStack,
List<String> rpnList)
throws Exception{
String preOptr;
if(optrequals("(")){//处理左括号
optrStackpush(optr);
return;
}
if(optrequals(")")){//处理右括号
while(!optrStackisEmpty()){
preOptr=optrStackpop();
if(!preOptrequals("(")){
rpnListadd(preOptr);
}else{
break;
}
}
if(optrStackisEmpty()){
throw new Exception("括号未闭合!");
}
return;
}
/按优先级处理其他运算符,若当前运算符优先级较高
直接入栈,否则将栈中运算符出战直至栈顶运算符
低于当前运算符
/
preOptr=optrStacklastElement();
if(optrCmp(optr,preOptr)<0){
optrStackpush(optr);
}else{
while(!preOptrequals("(")
&&!optrStackisEmpty()
&&optrCmp(optr,preOptr)>=0){
preOptr=optrStackpop();
if(!preOptrequals("^")){
rpnListadd(preOptr);
}
}
optrStackpush(optr);
}
}
/
运算符优先级比较函数,optr1优先级大于optr2返回小于0值,
优先级相等返回0,optr1小于optr2返回大于0值
@param optr1
@param optr2
@return
/
public static int optrCmp(String optr1,String optr2){
int order1=optrOrderget(optr1);
int order2=optrOrderget(optr2);
return order1-order2;
}
/
根据运算符对数据栈中的内容进行 *** 作
@param optr
@param numStack
/
public static void doCalcByOptr(String optr,
Stack<Double> numStack){
double n1,n2;
n2=numStackpop();
n1=numStackpop();
if(optrequals("+")){
numStackpush(n1+n2);
}else if(optrequals("-")){
numStackpush(n1-n2);
}else if(optrequals("")){
numStackpush(n1n2);
}else if(optrequals("/")){
numStackpush(n1/n2);
}else if(optrequals("%")){
numStackpush(n1%n2);
}
}
}
可以用jmeter写一些小脚本。
背景:测试一个职位需要投递20个人投递,比较麻烦,不想手工投递,就来偷个懒
思路:用CSV参数化用户,获取用户的cookie,再去投递就OK。
历程:
1、>
以上就是关于beanshellgetstring失败全部的内容,包括:beanshellgetstring失败、有多个输入多个响应结果怎么断言、输入运算公式 得到结果 java等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)