JMeter技术总结
- 一、JMeter运行原理
- 二、JMeter测试计划要素
- 三、Jmeter环境介绍
- 四、BeanShell取样器
- 1.BeanShell常用内置变量
- 2. 自定义函数
- 3. 引入外部java文件
- 4. 引入外部class文件
- 5. 引入外部jar包
- 6. 其他用法
- 五、参数化
- 六、JMeter元件运行顺序
一、JMeter运行原理
JMeter是运行在JVM虚拟机上的,再者Java也是支持多线程的,所以JMeter是以线程的方式来运行的。JMeter运行场景不仅可以在GUI方式中完成,还可以使用命令行,而且命令行运行的方式对于负载机的资源消耗会更小。
Jmeter调用Python预研结果:
方案一:使用jython调Python代码;但jython只支持到2.7.2版本,无法支持Python3;–排除
方案二:编写C代码,通过java调C,然后C调Python;绕的很远,且无法监控到响应时间等详细信息,除非自己再封装;–排除
方案三:抛弃jmeter,使用locust;locust工具支持Python代码进行性能测试。
二、JMeter测试计划要素
1、脚本中测试计划只能有一个
2、测试计划中至少要有一个线程组
3、至少要有一个取样器
取样器的作用:模拟用户请求
4、至少要有一个监听器
监听器的作用:用于衡量系统性能
三、Jmeter环境介绍
由于JMeter是纯Java开发的,所以一般来说。能运行Java程序的系统一般都可以运行JMeter。JMeter下载好之后只需要解压到相关目录即可,配置好Java环境变量就可以启动,JDK建议安装1.6或者以上版本,不然会出现版本不匹配的问题。
Jmeter组件以jar包的形式放置在lib/ext目录下,如果我们要扩展JMeter组件,扩展后的jar包即放在此目录,JMeter启动时会加载此目录下的jar包。JMeter依赖的一些基础包则要放在lib根目录下。
启动:Windows双击jmeter.bat,Linux双击jmeter.sh。
如果启动过程中屏幕一闪而过多半是启动不成功,请检查你的JAVA_HOME配置是否正确。
如果启动完成后能够进入上图界面且红色标记处显示0代表正常启动了,如果非0代表加载组件出错了,即加载lib/ext目录下的jar包出错了,往往是我们扩展JMeter功能时出错,错误原因通常是依赖的jar包缺失。
四、BeanShell取样器
1.BeanShell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量的使用方法如下:
(1)log:写信息到jmeter.log文件,使用方法log.info(“this is log info!”)
(2)vars:操作JMeter变量
vars.get(“变量名”):获得变量的值
vars.put(“变量名”, “变量值”):将数据存到JMeter变量中
(3)ctx:该变量引用了当前线程的上下文
(4)props:操作JMeter属性
props.get(“属性名”),属性名定义于jmeter.properties
props.put(“属性名”, “属性值”)
(5)prev:获取当前的sample返回的信息,常用方法
getResponseDateAsString():获取响应信息
getResponseCode():获取响应code
SamplerResult:Jmeter中的一个对象
//设置响应代码
ResponseCode = 500;
//设置响应信息
ResponseMessage = "This is a test";
//设置是否成功
IsSuccess = false;
//设置响应数据
SampleResult.setResponseData("Hello world");
2. 自定义函数
(1)在TestPlan中添加一个变量,hello=word
(2)BeanSell取样器前后的调试取样器什么都不处理,用来查询对比Beahshell处理前后的结果
调试取样器(Debug Sampler)的作用:
(1)想知道参数化的变量取值是否正确
(2)想知道正则表达式提取的值是否正确
(3)想知道JMeter属性
(4)调试时服务器返回了些什么内容
通常与察看结果树元件组合使用!
3. 引入外部java文件
(1)生成一个java源文件,名为:Myclass.java,代码如下
package com.xxx;
public class MyClass {
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
}
}
(2)BeanShell使用代码如下:
在BeanShell中通过source(“代码路径”)方法引入java,然后调用方法和java一样,new一个class,然后调用add方法。
4. 引入外部class文件
(1)直接将上个示例中的Myclass.java编译成class文件;
(2)BeanShell使用代码如下:
用addClassPath(“文件路径”)的方法引入class文件,再用import导入包以及类,然后就可以像java一样调用了。
5. 引入外部jar包
JMeter中引入外部jar包两种方式:
(1)把jar包放在jmeter\lib\ext目录下
(2)在测试计划的右侧面板最下方直接添加需要引用的jar包,如下图
6. 其他用法
在Test Plan中定义如下三个变量:a,b,c,如下图所示:
BeanShell可以接受传入参数,如下图:${a} ${b} ${c},参数可通过bsh.args[]顺序提取
BeanShell提供了一个内置变量Parameters,来保存参数的集合
Java代码里必须要写main方法,不然Open Module Settings -> Artifacts会找不着自己写的主类,配置好之后会在src同级目录下生成META_INF目录即为配置成功。
点击Build -> Build Artifacts -> Build/Rebuild,会在工程目录下生成一个out目录,jar包就存放在里面。
五、参数化
① 用户定义的变量
② CSV数据文件设置:可以从指定的文件中一行一行的提取文本内容,根据分隔符拆解这一行内容并把内容与变量名对应上,然后这些变量就可以供取样器调用了
③ 函数助手
六、JMeter元件运行顺序
JMeter执行顺序逻辑如下:
(1)配置元件(如果存在)
(2)前置处理器(如果存在)
(3)定时器(如果存在)
(4)取样器(如果存在)
(5)后置处理器(如果存在且取样器的结果不为空)
(6)断言(如果存在且取样器的结果不为空)
(7)监听器(如果存在且取样器的结果不为空)