jmeter 之 BSF,BeanShell(转载)
jmeter无法自行处理javascript,但是它可以用自带的BSF PreProcessor(BSF:面向java的脚本语言,支持javascript)
(使用这个之前要把bsh-2.0b2.jar包放到jmeter的lib下)
以出售带号寄售信息为例:
页面里有一个totalCommission的变量,它的值是根据price和amount的值来计算的,这里可以在发布带号寄售的取样器请求页面添加一个前置处理器:BSF
PreProcessor
如下图:
其中的script脚本为:
vars.put('price',${price});
var priceInput =vars.get('price');
(这里要使用变量的时候都要声明,如这里:vars.put('price',${price});你直接用log.info(vars.get(price))的话会报错,要先声明它:var
priceInput =vars.get('price');然后再log.info(priceInput)的话就OK了,也不知道why:世界之大,无奇不有!!)
vars.put('amount',${amount})
var quantity =vars.get('amount');
var commissionRate=vars.get('commissionRate');
var
totalCommission=vars.get('totalCommission');(注意这里要定义var
totalCommission,如果直接用vars.get('totalCommission')会报错,至于why还不是太清楚)
log.info("before total:"+priceInput);
log.info('commissionRate='+commissionRate);
var additionalCommission=vars.get("additionalCommission");
log.info('additionalCommission='+additionalCommission);
var commissiontext;
commissiontext = priceInput*commissionRate;
commissiontext = commissiontext.toFixed(3);
log.info('commissiontext='+commissiontext);
var temp = parseInt(commissiontext);
log.info('temp='+temp);
if(temp<commissiontext)
{temp+=1;}
commissiontext=parseInt(temp) +
parseInt(additionalCommission);
log.info('commissiontext1='+commissiontext);
vars.put("totalCommission",commissiontext);
log.info("after total:"+vars.get('totalCommission'));
------------------------------------------------------------------------------------------------
处理中出现问题的话,可以到jmeter的bin下面查看jmeter.log看看问题出在哪,相应的就可以解决它了
--------------------------------------------------------------------------------------------------
上述问题也可以用BeanShell PreProcessor来解决:
BeanShell是一个小型的,免费的,可嵌入式的,具有面向对象脚本语言特性的Java代码解释器。它是用Java语言写的。它能执行标准的Java
语句和表达式,还自带简单的脚本命令和语法。它把编程对象当成一个简单的方法,这很像Perl和JavaScript.
你可以在写Java测试或调试时使用BeanShell,也可以用它作为你的应用程序的脚本引挚。简而言之,BeanShell可以动态的解释JAVA语
言。也就是说BeanShell在许多方面对于Java的用处就像Tcl/Tk对于C的用处一样:BeanShell是可嵌入式的---你可以在运行时从
你的应用程序调用BeanShell去动态的执行Java代码或是为你的应用程序提供脚本扩展。相反,你也可以从BeanShell调用你的应用程序及其
对象,它可以让JAVA对象和API动态运行。正因为BeanShell是用JAVA写的,所以它可以和你的应用程序运行在同一个JVM空间内,你也可以
自由的传递实时对象的参照(References)到脚本代码中并且作为结果返回。
这里跟BSF一样新建一个前置处理器:BeanShell PreProcessor
代码如下:
var priceInput=${price};
log.info("price="+priceInput);
var quantity=${amount};
log.info("quantity="+quantity);
var commissionRate=vars.get("commissionRate");
float abc=Float.parseFloat(commissionRate);
log.info("commissionRate="+abc);
float commissiontext=priceInput*abc;
log.info("commissiontext="+commissiontext);
int temp=(int)commissiontext+1;
log.info("temp="+temp);
var additionalCommission=vars.get("additionalCommission");
log.info("additionalCommission="+additionalCommission);
commissiontext=temp +Integer.parseInt(additionalCommission);
log.info("="+commissiontext);
vars.put("totalCommission",String.valueOf(commissiontext));
因为BeanShell的变量定义比较宽松,所以很容易在转换的时候出错,这里要很注意。
.BeanShell 脚本处理:如果在测试用例中用到了 BeanShell 脚本,则需要将
BeanShell 包拷贝到 JMeter bin 目录下。BeanShell 是一种兼容 Java
语言的轻量级脚本语言,JMeter 脚本中可能会经常用它来做日志处理,正则表达式后处理(Post-
Process)等。如果在测试用例中用到了 Mail Visualiser, Mail Reader 以及 Web Services
(SOAP) sampler,则需要将 MAIL 包拷贝到 JMeter bin 目录下。如果在测试用例中用到了 JMS 相关的
sampler,则需要将 JMS 包拷贝到 JMeter bin 目录下。
http://www.ibm.com/developerworks/cn/webservices/1004_sunch_jmeter_soap/index.html
jmeter 之 BSF,BeanShell(转载)的更多相关文章
- Jmeter中通过BeanShell获取当前时间
第一步编写需要的java类: 第二步:将编写好的java类打包成jar包 第三步:将jar包放到\apache-jmeter-2.13\lib\ext下面 第四步:在Jmeter中通过BeanShel ...
- 性能测试八:jmeter进阶之beanshell
* BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; * BeanShell是一种松散类型的脚本语言(这点和JS类似); * BeanShell是用Java ...
- 【Jmeter测试】BeanShell介绍和使用
BeanShell是什么? BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言: BeanShell是用Jav ...
- jmeter中通过beanshell访问eclipse中导出jar中的java类的方法
主要步骤 1.在eclipse中导出要引用的java代码为jar文件 2.将生成的jar文件放到jmeter的lib的ext目录下 3.在jmeter的jsr223处理器中导入要引用的java类型文件 ...
- 用BSF + Beanshell使Java程序能够运行字符串形式的代码(转载)
BSF(Bean Scripting Framework)最初是IBM Alpha工作组的项目,后来贡献给了Apache,BSF使Java能够更好的与各种流行脚本语言整合,实现不同语言之间的交互功能. ...
- JMeter学习(十四)JMeter函数学习(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter函数是一些能够转化在测试树中取样器或者其他配置元件的域的特殊值.一个函数的调用就像这样:${_functio ...
- JMeter学习-033-JMeter BeanShell 脚本应用实例之参数变量修改
BeanShell脚本是JMeter自动化测试过程中不可或缺的提升技能之一,BeanShell脚本编写类似于Java脚本.它可以获取.修改系统定义或用户定义的变量值,同时也可以进行一些相应的测试数据处 ...
- jmeter 中的 Beanshell 使用
一.操作变量:通过使内置对象vars可以对变量进行存取操作 a) vars.get("name"):从jmeter中获得变量值 b) vars.put("key" ...
- Jmeter组件8. BeanShell Sampler
BeanShell是一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性,像JavaScript和perl那样 ...
随机推荐
- Delphi:对TNotifyEvent的理解
type TNotifyEvent = procedure (Sender: TObject) of object; 在Delphi中事件也是一个类,类型就是事件类型,不同的事件属于不同的类.TNot ...
- Jquery 学习之路(四)高大上的图片轮换
网站首页没有一点动画怎么可以,我以前用过Flash As3做过图片切换,效果非常不错,可是麻烦,改变起来麻烦.一直都想自己做个图片切换效果,总认为比较麻烦,今天自己实践了一下,其实还比较简单.不过有个 ...
- set注入
顾名思义set注入必须要有set方法. 基本类型的注入.引用类型注入.List注入.Set注入.Map注入.Properties注入 public class person { private car ...
- 安装Team Services Agent Win7
现状:项目现时使用的是Team Services,使用Team Services可以控制其中的一台Build Server,从Github提取代码,并在Build Server进入编译打包处理(son ...
- Nodejs微信开发使用wechat-api回复多条消息
在上一往篇文章<Nodejs微信开发>中,微信后台能够正常的接收到客户端的消息,并能够简单的回复一条消息至客户端. 但我的目录是将微信与Bot Framework进行关联,那么肯定就有一些 ...
- ACM数论-欧几里得与拓展欧几里得算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...
- luogu P1938找工就业
一头牛在一个城市最多只能赚D元,然后它必须到另一个城市工作.当然它可以在别处工作一阵子后,又回到原来的城市再最多赚D美元.而且这样的往返次数没有限制城市间有P条单向路径,共有C座城市,编号1~C,奶牛 ...
- 01、Mecanim动画系统
序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统.本文是作为自己的学习来讲解的, 可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻. 一.文件的 ...
- String和StringBuffer的机制差别
String是不可变的,StringBuffer是可变的:StringBuffer是线程安全的,StringBuilder是非线程安全的. 因而在大部分情况下字符串的拼接速度为:StringBuild ...
- (转)Unity3D在WebPlayer模式下的异常上报探索
我们知道,Unity3D在WebPlayer的发布模式下是沙箱环境中运行的.根据Unity3D的官方文档所述,WebPlayer模式下不能使用非托管的DLL,也就是说,传统C++游戏客户端的生成Min ...