当前位置 博文首页 > 繁华似锦Fighting:『动善时』JMeter基础 — 35、JMeter接口关联
相信做过自动化测试的朋友经常会遇到这样的场景:我想调用系统中的某个业务接口,但是需要先登录系统。也就是现在很多接口的访问,都是需要登录接口的token做为基础。
在JMeter中先访问登录接口,使用后置处理器提取出来token或者Cookie的值,然后将该值带到后续的业务接口中,这时就会用到JSON提取器组件。
为什么要用 JSON 提取器
添加JSON提取器组件操作:选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器
。
界面如下图所示:
下面是JSON提取器组件的详细说明:
(1)Apply to
:作用范围(返回内容的取值范围)
Main sample and sub-samples
:作用于父节点的取样器及对应子节点的取样器。Main sample only
:仅作用于父节点的取样器。(选默认的 main sample only
就行了)Sub-samples only
:仅作用于子节点的取样器。JMeter Variable Name to use
:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。(2)第二部分内容
Names of created variables
:定义引用提取值的变量名,后面接口中使用${变量名}
引用,必填项。JSON Path expression
:填写JSON Path表达式,用来提取某个值。必填项。Match No.(0 for Random)
:表示取值是第几个匹配结果,因为有可能XPath表达式会匹配到多个值。0表示随机,-1表示全部,1代表第一个,2代表第二个,以此类推。(非必填项)Compute concatenation var(suffix_ALL)
:勾选此项后,如果匹配到多个结果,JMeter会使用,
将他们连接起来,存储在的变量中,会自动命名为<variable name>_ALL
。Default Values
:缺省值,如果JSON Path表达式匹配不到值的时候,将使用该默认值。(非必填项)需求:用户登录系统,并在系统中查询个人信息。
实现思路:
添加元件操作步骤:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP Cookie管理器
。选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
。选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器
。选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树
。提示:需要重复添加的组件这里不重复描述。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
什么都不用填写,保持原样即可。
简单说明一下:
Debug Sampler
组件查看)发送一个标准POST请求,参数格式为JSON,这里就不做解释了。
界面内容如下图所示:
我们在编辑JSON提取器组件之前,一般先请求一下需要提取返回数据的接口。
因为我们需要先查看一下需要提取的数据在什么位置,同时我们也能够提前编写一下JSON Path
表达式。
如下图所示:
然后选择JSON Path Tester
视图模式,先手动编写JSON Path
表达式,看看是否能够取到需要的数据。
如下图所示:
之后我们就可以编写JSON提取器组件界面了,如下:
编写引用名称、JSON表达式、匹配数据选择,如下图:
提示:如果要获取多个元素,则可以在HTTP请求组件中,加入多个后置处理器来提取需要的值。即:每一个后置处理器只能获取一个值。
JSON提取器组件提取出来的数据,会存储在线程变量中,供其他后续接口使用。
填写接口的基本请求信息,然后把JSON提取器提取出来的数据,作为参数化变量应用到请求中。
如下图所示:
我们可以看到在第二个请求中,拿到了第一个请求提取出来的用户ID数据。
如下图所示:
再来看看第二个请求响应的结果,可以看到对应用户的信息我们已经查询到了。
提示:可以添加
Debug PostProcessor
(调试后置处理器),或者Debug Sampler
(调试取样器),来查看JSON提取器中,提取出的内容是否正确。注意:正常跑用例时删除或禁用它们。
JSON提取器通常在接口返回是JSON格式的数据,并提取数据时用的比较多。提取完参数后,相当于把参数以 key-value
的形式放到参数池,以便后面的请求使用。
注意:不能超前引用。
JSON提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key
,其中key
为返回结果map中的一个键,如果是多层则继续用.key
进行即可,如果遇到key的value值为一个List,则使用.key[n]
,其中n
为list中元素的编号。
常用JSON Path
表达式使用实例,如下:
$.key
。$.result[0].name
。$.result[1].approver[0]
。$.result[*].name
。$.result.records[2].id
。$.result.records[-2].id
。$.result.records[?(@.object_id==0)].id
。$.result.records[?(@.object_id==0)].["id","name","is_active"]
。参考:https://blog.csdn.net/df0128/article/details/86535117