9.Jmeter-beanshell基础使用

1.   什么是BeanShell

1.BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

2.BeanShell是一种松散类型的脚本语言(这点和JS类似);

3.BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。

4.BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

2.   Jmeter有哪些Bean Shell

(1)   定时器:  BeanShell Timer

(2)   前置处理器:BeanShell PreProcessor

(3)   采样器:  BeanShell Sampler

(4)   后置处理器:BeanShell PostProcessor

(5)   断言:   BeanShell断言

(6)   监听器:  BeanShell Listener

3.   Bean Shell常用内置变量

1.log:写入信息到jmeter.log文件,使用方法:log.info(“....”)

2.ctx:该变量引用了当前线程的上下文

3.vars:操作Jmeter变量,直接从Jmeter中获取变量值,常用方法:

·vars.get("name"):从jmeter中获得变量值

·vars.put("key","value"):数据存到jmeter变量中

4.   beanshell sampler

概念:自定义脚本,函数,可以在beanshell中写程序,也可以引用外部的java程序,测试接口等;


4.1 引用外部(java class方法)

具体查看jmx文件,jmeter 引用的时候source(路径);

个人不建议这么使用,建议把自定义java文件打包成jar包,然后加载使用

 

4.3 介绍个人常用的方法

个人认为,不同的接口可能会使用不同的方法,自定义程序打包jar包,然后再程序中引用,然后把jar包拖到(jd-gui)反编译工具中可以查看,也可以自己导入到eclipse中做优化修改处理;

步骤一:eclipse中自定义java文件打包成jar

这个不做多解释:根据连接自己打包

http://blog.csdn.net/thesnowboy_2/article/details/51787352

步骤二:场景:登入xxx(场景一)

我们分析抓包的数据,发现传的密码是MD5的格式,如果到数据库里拿也不是一种很好的办法,所以我们可以自己写一段生成MD5的程序,随机性更强一些

步骤三:我们根据步骤一已经生成了jar,(1)我们在测试计划中引用进来,(2)直接放到jmeter文件下的lib文件下,但是注意要重启;

步骤三:新增-sampler-beanshell sampler

程序解析:

importJTL_MD5.inputMD5; //引用md5方法

inputMD5 inputMD5= new inputMD5(); //声明一个inputMD5的实例

String res =inputMD5.MD5("123456"); //定义一个res字符串类型,inputMD5 调用MD5的方法(这个方法是用来把 123456 生成一个MD5

print (res); //输出 res结果

vars.put("md5",res);//res的数据存到自定义变量md5

 

步骤四:运行

1)cmd中打印出123456的MD5

2)debug sampler中也有显示123456的md5

步骤五:完成以上4步,只是前提作用,我们现在要创建登入供应链系统的实例(供应链测试环境密码是1:场景二

我们在场景一中把密码存在变量md5中,所以场景二的时候,直接调用变量,运行成功,并且在cmd中打印出来;判断是否正确还可以添加beanshell断言,标题5有讲到,(详细看标题5

5.   beanshell 断言

概念:beanshell 断言是在sampler 运行后对http request返回的数据做判断。

场景:例如我现在访问www.jtljia.com,提取网页<title></title>的内容,然后与真实的内容做对比,如果是一样的就pass,不一样就fails;

5.1步骤(场景一)

步骤:

1.   先根据http request返回的html文本提取<title></title>内容,用后置处理器提取(查看1.Jmeter参数化实例

2.      新增 beanshell assertion

1)     参数:

String Paramenters:定义单个变量

String[]bash.args:定义字符串的一组数据,每个参数变量中间用[空格]分开(备注:具体可以参考场景2

2)     脚本文件:包含要运行beanshell的脚本文件,文件名储存在脚本变量中;(备注:不常使用,为空即可

3)     Script:beanshell脚本

5.2步骤中的参数介绍(分析beanshell断言)

1.      首先我们根据步骤1,我们提取了${title}这个变量

2.      根据步骤二,我们把要打印的变量名放在参数,beanshell执行的时候,会读取

3.      print(bsh.args[0])

这个意思就是,

print: 输出,跟java语言一致

bsh.args: 从参数输入框中获取的参数值的数组

[0]  : 我现在只在传了一个参数,所以后缀加[0]表示我读取的第一个参数,指向${title};

4.      看cmd输出的结果就可以明白了

5.3 多个参数输出 (场景二)

场景2:供应链系统查询功能,提取两个变量数据,我们都要打印出来怎么办?


1)具体查看(5.2步骤中的参数介绍)

2) 参数:中间要空格隔开;

3) 数组下标对应参数;


5.4 多个参数输出 (场景三)

正式使用的时候,beanshell 断言是用来判断与真实数据是否一致;

脚本:

1)Jmeter提供给我集中方法(介绍常用的):

可读写:Failure, FailureMessage,SampleResult, vars, props, log

只读:Response[Data|Code|Message|Headers],RequestHeaders, SampleLabel, SamplerData, ctx

2)下面这段话的意思是:根据http request提取的参数值是否与我们实际值相等,如果相等就是对的,如果不想等就失败;这边主要用到Failure ,FailureMessage 方法;

if(bsh.args[0].equals("${title_www}"))

{

       Failure = false;

       FailureMessage = "正常运行";

}

else Failure =true;


猜你喜欢

转载自blog.csdn.net/wangtesting/article/details/80541069