Hellow大家好,我又来了,在上篇文章我们了解了使用jmeter在一个线程组中进行http的接口测试,但是往往我们接到一个性能测试任务需要对某一个接口进行压测时不需要每一次请求都取登录(这样会影响测试结果),那么遇到这种情况我们就要通过登录接口获取session了,然后用另一个线程组进行压测,这节课给大家分享一下这种情况我们该怎么做。
其中__setProperty是设置全局变量,__property或__P是调用全局变量
这节课要用到新的处理器
BeanShell PostProcessor,JSON提取器,顺便再给大家介绍一下HTTP信息头管理器和HTTP请求默认值
新的元件介绍:
BeanShell PostProcessor:在介绍BeanShell PostProcessor之前先给大家介绍一下BeanShell,
BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
BeanShell是一种松散类型的脚本语言(这点和JS类似);
BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
jmeter中拥有多种Beanshell
定时器: BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器: BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言: BeanShell断言
监听器: BeanShell Listener
那么我们怎么使用BeanShell 呢?有两种方法,一种是使用jmeter内置的函数,还有一种方法我们可以导入自己写的jar包并调用其中的方法。
然后了解下JSON提取器的使用:
JSON Extractor使用json path表达式匹配,可以一次取多个变量值。$表示响应的根对象。取子对象或对象的属性用. 取数组里的对象用[],数组索引从0开始。
示例:例1 找一个响应结果是json格式的,分析响应结果。
比如下面的响应整个是个数组,其中有4个对象。因此取值用$[索引取0-3或*取所有].属性值
例2 如果响应类似{“属性”:[{“sx”:1},{},{}]},整个响应是个对象。取sx的值:$.属性[0].sx
json 提取器参数介绍
names of created variables :接收值的变量名,多个变量时用分号分隔
json path: json path表达式,也是用分号分隔
match no:0随机;n取第几个匹配值;-1匹配所有,后续引用用 变量名_N 取第N个值。
default values: 缺省值,匹配不到值的时候取该值
好啦,现在核心的元件我们都了解啦,那么接下来就开始我们的学习啦
一、我们先新建一个setUp线程组用来做登录使用,命名为getsession(随便起名字)
二、添加Http请求
三、添加一个后置处理器-Json提取器,用来获取返回结果
四、再添加后置处理器BeanShell-这一步操作是为了设置全区变量,绿圈中的为我们再json提取器中提取到的变量
不会写的小伙伴可以通过函数助手生成函数,然后复制即可
我们再给这个请求添加个查看结果树并运行,可以看到请求成功
五、我们现在已经获取了session,改在另一个线程中调用他啦
我们添加另一个线程组
这里因为有可能会有多个接口的请求地址一样,所以我们添加一个Http请求默认值
好啦,接下来进入正题啦,我们把另一个线程获取的session放入这个线程每个请求的头部,所以要给这个线程组添加一个http信息头管理器
取值的函数已经说过了这里就不再提了