beanshellgetstring失败

beanshellgetstring失败,第1张

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9435412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存