jmeterbeanshell取样器,jmeter提取
JMeter的取样器(采样器)
访问路径如图一:Test Plan添加-线程-线程组?
访问路径如图二:线程组-添加-取样器
用途:用来验证结果是否正确
访问路径如图三:线程组-添加-断言
用途:添加结果监听,并且保存测试结果到文件,这些结果数据可以供再次分析使用;以表格及图形的形式展现结果,方便测试人员分析测试结果。
访问路径如图四:线程组-添加-监听器
将取样器、断言、监听器组合在一起就可以完成发送请求、验证结果及记录结果三项操作。
用途:在发送前做环境或者参数的准备工作
访问路径如图五:线程组-添加-前置处理器
用途:进行JMeter参数化配置,模拟大量用户操作;记录服务器的返回数据;为取样器提供预备数据,然后由取样器发出请求。
访问路径如图六:线程组-添加-配置元件
用途:一般放在取样器之后,用来处理服务器的返回结果
访问路径如图七:线程组-添加-配置元件
前置处理器、配置元件、后置处理器提供数据支持,取样器关注的是业务逻辑。
用途:进行逻辑控制
访问路径如图八:线程组-添加-逻辑控制器
用途:设置任务定时执行
访问路径如图九:线程组-添加-定时器
用途:在性能测试时,模拟大量用户负载的情况
访问路径如图十:Test Plan添加-线程-线程组
用途:在脚本开发过程中备份元件;测试片段中的元件可以被模块控制器调用,可以利用它进行模块化请求,供模块控制器调用(可以利用其进行业务封装成方法进行复用)。
访问路径如图十一:Test Plan添加-测试片段-测试片段
用途:在运行JMeter录制http协议脚本时,可以在它下面建立一个http代理服务器元件,设置代理信息然后录制;
JMeter5工作台模块已去除,但是可以通过以下途径:Test Plan添加-非测试元件-HTTP代理服务器,建立一个http代理服务器元件,设置代理信息然后录制,如图十二。
Jmeter之BeanShell的使用
背景:在一次接口压测过程中,接口的参数值是通过java类中的方法获取的,此方法没有封装成接口,又因参数值存在有效期(15min),所以导致在执行压测的过程中需考虑在执行的时长内参数值是否失效的问题。
在未使用beanshell的时候(当时不知道如何使用,且时间紧,没时间研究),就先在IntelliJ Idea运行Java程序获取参数值,然后将参数值复制出来粘贴到jmeter中,然后再执行脚本进行压测。暂时不影响测试,但是操作起来有点麻烦。
趁着测试工作结束,正好有时间研究下jmeter中beanshell的使用,总结如下:
1、先将java程序打成jar包;
打jar包参考:
2、将1中jar包复制到jmeter安装路径D:\Program Files\apache-jmeter-5.3\lib\ext\下,如果jave程序中有引用到其它jar包(import导入的),也一并复制到该目录下;
3、启动jmeter,在测试计划右侧页面下方,添加2中复制的jar包:
4、然后在测试计划下,创建线程组,添加BeanShell取样器,在取样器右侧页面脚本处,编写java脚本:
注:脚本可接收传参,参数传入方式:${参数名1} ${参数名2} ...,参数之间用空格隔开,在脚本中可使用bsh.args[i]获取参数值,i表示参数在数组中的索引。参数的定义,放在用户定义的变量中,在线程组下添加用户定义的变量:
5、在线程组下添加HTTP请求,在消息体数据中传递请求参数(json):
6、在线程组下添加查看结果数,执行HTTP请求,查看结果树中请求body中的参数(成功获取):
至此,使用BeanShell的方式成功传参,解决了手动获取参数的麻烦。
如何通过jmeter读取csv文件行数来设置循环控制器的总数
1、线程组里添加beanshell取样器
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.csvreader.CsvReader;
import java.nio.charset.Charset;
String Num1;
int Num=0;
try
{
? ? String readerCsvFilePath = "/Users/接口测试/orderno.csv";//csv文件路径
? ? CsvReader csvReader = new CsvReader(readerCsvFilePath, ',', Charset.forName("UTF-8"));
//? ? ? csvReader.readHeaders(); *// 跳过表头? 如果需要表头的话,不要写这句。*? ? ? ?
? ? while (csvReader.readRecord())
? ? {
? ? ? Num++;
? ? }
? ? csvReader.close();
}
catch (IOException ioe)
{
? ? ioe.printStackTrace();
}
vars.put("Num1",String.valueOf(Num));
log.info("====================================" + Num);
2、添加调试取样器来检查是否获取到数据
3、添加jar包方式:
方法1:在线程组里添加需要的jar包
方法2:jar包放到jmeter/lib或者jmeter/lig/ext目录下,重启jmeter