1、变量引用格式:${ip},变量可以是用户自定义变量或者来自csv数据文件。
2、执行流程和作用域。各组件之间有层级关系。例如:吞吐量控制和事务控制器可以相互包含,而取样器只能包含在事务或者吞吐量控制器之内。仅一次控制器只在执行一次,类似init。吞吐量控制器可以按照百分比例或者数量分配该控制器下面的事务或者请求的发生情况。可通过组件之间相互包含或者组合,灵活制定各种测试场景。
吞吐量控制器百分比模式分配方式: 吞吐量控制器设定了百分比后,该控制器下业务发送总量为总交易数量的*百分比,混合场景中所有事务相加必须等于100。如果比例大于100,那么将会运行全部数量的交易。
3、Http信息头管理器:
加在每个具体请求前面
报文格式 :content-type application/json (json格式)
4、响应断言:用来判断事务是否执行成功。如果断言失败,那么该事务就算失败事务。判断摸个请求的话,直接加在请求内部。
5、if控制器:用来控制业务执行流程,通过函数判断某个值,当未真时流程才往下走。
6、一般来说,Get请求参数直接跟在URL后面:http://cn.bing.com/search?q=${boke}+${user},Post请求参数在参数或者Body中。(BODY可以是json、xml等格式)
7、事务控制器:把要做的一笔完成的交易放在一个事务中,可能包含一个或者多个接口。
循环控制器:比如登录后反复查询交易,那么把登录放入一次控制器,查询加入循环控制器,设置循环的次数或者永久。
循环控制器:
1、永远选项:勾选上这一项表示一直循环下去
2、如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的下面的接口运行的次数为两个数值相乘的结果。
仅一次控制器:
将仅一次控制器作为循环控制器的子节点,仅一次控制器在每次循环的第一次迭代时均会被执行。
8、边界提取器:通过左右边界来从响应结果中提取值,定义变量去引用
9、
自动重定向:HttpClient接收到请求后,如果请求中包含重定向请求,HttpClient是可以自动跳转的,但是只针对GET和Head请求,勾选此项则“跟随重定向”失效;自动重定向可以自动转向到最终目标页面,但是JMeter是不记录重定向过程内容的,比如在查看结果树中是无法找到重定向过程内容的(A重定向到B,此时只记录B的内容不记录A的内容,A的响应内容我们暂时且叫过程内容),如果此时你想做关联,那就比较遗憾了,你无法关联到。
跟随重定向:Http Request取样器的默认选项,但响应Code是3XX时(比如301是重定向),自动跳转至目标地址。与自动重定向不同,JMeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,所以你可以对响应的内容做关联
比如你要测试登录,你把POST请求改为跟随重定向就可以了
10、beanshell用法笔记
参考文章:https://www.cnblogs.com/xxyBlogs/p/5966194.html
(1)分为beanshell取样器,前置处理器,后置处理器,监听器。根据情况选择具体类型
(2)简单语法:
String str1 = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
vars.put("str2", str1);
log.info("Get my encode:" + str1);
String get_str = vars.get("str2");
log.info("Get my encode2:" + get_str);
要点:vars相当于一个map,作用域是当前线程组。可放置任何类型变量(props使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象)
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
请求中使用自定义或者beanshell vars中放置的变量采用${变量名}的 格式,在beanshell脚本中输出变量,直接变量名。
(3)从外部引用类:
定义java文件:
package test;
public class Myclass
{
public int add(int a, int b)
{
return a + b;
}
}
source("E:\\test.java");
int res = new Myclass().add(5,6);
vars.put("add", res.toString());
log.info("res:" + vars.get("add"));
log.info("res:" + res.toString());
注意:log输出必须是string类型的,因此需要做一些转化
如果是class文件,用addClassPath("D:\\")方法引入 class文件,在用import导入包及类,然后就可以像java一样调用了
-
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
11、关联
参考文章:https://www.cnblogs.com/puresoul/p/4742587.html
正则表达式提取器:
1、比如需要提取如下响应文本中的 “<title>百度一下,你就知道</title>” 里面的 “百度一下,你就知道”:
2、设置正则表达式提取器:<title>(.+?)</title>
说明:
(1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
(2)正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
(5)缺省值:如果参数没有取得到值,那默认给一个值让它取。
(6)这里的正则表达式和编程语言中的有所不同,(.+?)配合要提取内容的前后字符基本通用了
3、关于正则表达式的举例说明:
1、提取单个字符串:
假如想匹配Web页面的如下部分:name = "file" value = "readme.txt">并提取readme.txt。一个合适的正则表达式:name = "file" value = "(.+?)">。
():封装了待返回的匹配字符串。
.:匹配任何单个字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
2、提取多个字符串:
假如想匹配Web页面的如下部分:name = "file.name" value = "readme.txt">并提取file.name和readme.txt。一个合适的正则表达式:name = "(.+?)" value = "(.+?)"。这样就会创建2个组,分别用于$1$和$2$
比如:
引用名称:MYREF
模板:$1$$2$
如下变量的值将会被设定:
MYREF: file.namereadme.txt
MYREF_g0: name = "file.name"value = "readme.txt"
MYREF_g1: file.name
MYREF_g2: readme.txt
在需要引用地方可以通过:${MYREF}, ${MYREF_g1进行使用。
12、录制
使用http代理服务器原件,配置本地浏览器代理实现录制,让录制生成的脚本放入指定目标控制器内。浏览器配置代理后无法进行网络访问,但在运行代理服务器期间可以访问网络。需要将录制生成的请求进行筛选,重新组合成新的脚本
需要登录后操作的压测,一般都需要在登录事务前加上一个cooki管理器。一般如果没有特别的参数设定,只需要加上cookie管理器即可,不需要额外配置。
13、细节性问题:
Ramp-Up period(in seconds):用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程,假设ramp-up period 设置成1秒, 全部线程数设置成2个, JMeter 将每隔0.5秒建立一个线程(即ramp-up period时间内执行完所有的线程)
14、缺少插件:https://www.cnblogs.com/fppblog/p/13084811.html
插件存放地址:apache-jmeter-5.3\apache-jmeter-5.3\lib\ext
jmeter 打开文件报错:CannotResolveClassException: kg.apc.jmeter.perfmon.PerfMonCollector解决方法
(1)下载:plugins-manager.jar
(2)将jjmeter-plugins-manager-1.4.jar包复制到Jmeter的Lib目录下面的ext目录下面,然后重新启动;
(3)检查标准:在监听器中会出现许多选项;