首先说明一个概念,jmeter内的变量和属性是不一样的,表现在:
1可用范围:
正则提取器或json提取器或其它提取器赋值后的引用名称都是变量,实际可用范围只有当前线程组;然而当有些后置处理器如BeanShell 后置处理程序处理成jmeter属性时,可用范围将扩展到整个测试计划,也就是说跨线程组使用就会用到这个。
2使用方式:
变量基本就是${变量名}的方式来引用,如${ww}。而属性不同,如下文中的${__property(newtoken,,)}。
一 正则表达式提取器:
(1)提取响应头中的cookie
1.譬如要提取下图中response headers 中set cookies,实际上这在登录请求中非常普遍
2.登录取样器,添加--后置处理器--正则表达式提取器
说明:
- 要检查的响应字段要选择信息头
- 引用名称即变量名,后续记得使用就好,我用ww代替
- 正则表达式:Set-Cookie: SESSION=(.*); Path=/注意:()括起来的部分就是要提取的,即赋值到变量ww的内容
- 因为只有1个部分要提取,所以模板这里填写$1$;如果多个括号,则可以是$2$$3$等等。
3.这时候就根据两种使用情况进行选择:
1.-------正则提取的变量想要整个测试计划可用:
- 打开函数助手
- 点击生成,就可复制,脚本${__setProperty(newtoken,${ww},)},意为将ww变量的值赋值给newtoken属性
- 然后登录取样器--添加--后置处理器--BeanShell PostProcessor
- 在下图位置粘贴复制的脚本即可,
- 在测试计划--配置元件-添加 HTTP信息头管理器
- 同样通过函数助手得到脚本${__property(newtoken,,),意为取值newtoken属性,Cookie一栏输入此脚本
- 这样另外一个线程组项目查询2就可以用这个cookie了。(其它类型提取器也可以用后置处理器置为属性再在别的线程组使用,不再赘述。)
2.-------正则提取的变量仅仅想在本线程组使用:
那么这时候根本就不需要后置处理器,
下图可看到我将http信息头管理器移入线程组内部,Cookie一栏填入的是${ww},直接取变量的值
同个线程组的另外的取样器传值Cookie也是没问题的
说一种可能犯错误的情况:如果你将信息头放在测试计划下,而Cookie这边放的是变量不是属性,可以看到项目查询2线程组内取样器是没有Cookie的
(2)提取响应体中的数据(在响应体结果非标准json格式时常用,如果是标准json格式用json提取器将更加方便)
1、比如需要提取如下响应文本中的 “<title>百度一下,你就知道</title>” 里面的 “百度一下,你就知道”:
2、设置正则表达式提取器:
二 json提取器:
说明:
1.个人认为,json提取器是不好提取响应头的,所以这是上面我用正则提取cookie的原因,如果这里有错误欢迎指正;
2.json提取器是用于提取标准json格式返回数据时用的,我尝试去提取非标准json格式返回数据,结果是没有提取成功的。
至于返回数据格式是不是json,看下响应标头的Content-Type就行。
各个选项填写说明如下:
其中路径表达器中$表示根,而.表达连接下级节点的意思。
三 Xpath提取器:
这个就很局限了,一般只用于提取返回数据是html格式的数据 ,即返回页面。用的不多,不再赘述。