独孤湘瑶  

声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改。

 

背景:购物车中的商品数量可以修改,而这个修改需要有特定的指向才能知道修改的具体是哪个。

思路

1、前提条件:A用户登录,有商品加入购物车。

2、操作:对购物车的某个商品进行数量的修改。

 

 

1.认识JMeter

(1)【JSON提取器】

  JSON提取器是一个可以提取返回响应数据的某个字段值的工具。响应数据基本上都是JSON格式的,而各个接口之间有数据依赖,所以JMeter就提供了一个【JSON提取器】。文后有关于JSONPATH提取的各种应用场景。

(2)【__Random】

就是一个“生成随机数字字符串”函数,现版本JMeter直接引用函数就可以了,不在需要设置__Random函数后再引用。文后有关于JMeter常用的函数列表,只有列表,没有详细说明。

 

2.【HTTP请求默认值】

为后面5个【HTTP请求】设置默认值。

 

3.【登录】

(1)【HTTP请求】

正常的设置登录类型、登录名、密码即可。

(2)【JSON断言】

登录成功

(3)【JSON提取器】

提取登录成功后响应数据返回的token值:login_token。

 

4.【加入购物车】

(1)【HTTP请求】

① URL带login_token

② 商品goods_id参数优化:${__Random(1,12)}

③ 数量stock参数优化:${__Random(1,5)}

(2)【JSON断言】

加入成功

 

5.【查询购物车列表-修改前】

(1)【HTTP请求】

① URL带login_token

(2)【JSON断言】

success

(3)【JSON提取器】

购物车ID - 随机获取到购物车ID

变量名:cart_id_random

表达式:$..id

取数:0(表示随机)

商品ID - 获取随机购物车ID相对应的goods_id

变量名:goods_id_random

表达式:$..data[?(@.${cart_id_random})].goods_id文末有详细说明

取数:0(表示随机)

 

6.【修改购物车数量】

(1)【HTTP请求】

购物车id - ${cart_id_random}

商品goods_id - ${goods_id_random}

数量stock - ${__Random(1,5)}

JSON格式的(别忘了设置【HTTP信息头管理器】)截图:

(2)【JSON断言】

更新成功

 

7.【查询购物车列表-修改后】

直接复制【查询购物车列表-修改前】,名称修改【查询购物车列表-修改后】

 

8.【调试取样器】

有参数名称的,必不可少【调试取样器】。

 

9.【结果树查询】

查看执行结果:

 

10.【JSON提取器】

  众所周知,JSON Path expressions这个是JSON路径表达式,这里先推荐一个在线JSONPath解析器:https://www.lddgo.net/string/jsonpath,体会一下JSONPath的魅力。这个工具只要写出【JSONPath】,【输出结果】那里实时出结果。页面下面部分还有一段示例,以及见过最多的‘JSONPath语法释义’,基本上把所有可能遇到的JSONPath语法都列举了,有兴趣的朋友可以全部都试一遍。

  我把页面没有介绍的【操作符】【函数】【过滤器】等知识点给补充一下,很多知识我自己没遇到过,也不是很明白,末尾记录一下我懂的那些。

  最后再解释一下接口里我所用到的‘随机获取购物车ID后,再获取购物车ID的商品ID’。

(1)操作符

(2)函数

(3)过滤器

(4)JSON提取器[学习过的]

$.字段

  最简单的一个获取JSON字段值的语法,第一次总结JSON断言时就已经用过。就是获取最外层的某个字段的值。JSON格式的数据,可以嵌套多层数据,列表嵌套字典,或者字典嵌套列表等等,而$.字段就是找最外面的层的字段,输出结果是字段值

$..字段

$..:所有的父元素。

$.[?(表达式)]

   另外推荐一个JSONPath解析器:http://www.atoolbox.net/Tool.php?Id=792 各有优势吧。我习惯用上面那个(字体界面比较喜欢),但是上面没有输出结果,我也会在这个解析器里试一下。就比如这次语法:$..[?(@.id==20734)].stock,在JMeter都能有结果,上面那个解析器却提示语法错误,这个解析器就能正常出结果毕竟推荐的解析器网址都是不同开发发版的,所以功能上可能有些许不同。

  $.[?()] / $..[?()] :这个语法适用于很多场景,其中表达式也有很多中组合:操作符、函数、过滤器都可以接。

  需求:修改商品数量,接口参数有3个,购物车ID、商品ID、数量。

  思路:获取购物车列表,然后随机一个购物车ID,一个购物车ID肯定有商品ID以及其它商品信息。最后再修改数量,数量可以用函数获取随机数(不指定修改数量)。

1、先获取随机购物车ID:$..id获取【查询购物车列表】响应数据,然后通过JSONPath解析得到语法(JMeter的JSON Path Teser也好,在线解析也好)。

2、再通过购物车ID拿到相对应的商品ID:。这个用JSONPath解析器比较方便。

$..[?()]:先把这个公式摆上,然后再补充表达式里的内容。

$..[?(@.id)]@表示当前节点,就是$..这个节点,输出结果是包含id字段所在层级的所有字段数据$..id的输出结果是有区别的,后者是只输出id的字段值。

  $..[?(@.id==20735)]:指定购物车ID数据查询。表达式这里要注意字符规范,JSONPath解析器虽然对字符串模糊查询,但是JMeter工具是有严格要求的,所以我们要养成字符规范的习惯。例如把ID换成title,==后面是字符串,一定要英文的单引号或者是双引号。

 

  $..[?(@.id==20735)].goods_id:查询数据里的商品id是多少。一般表达语法到$..[?(@.id==20735)]就算是完了,后面都不会再有什么,之前也没有遇到过。我试着把这个语法的输出结果当做是一个新完整的JSON数据,那么正常的语法是$.字段,我把$替换成$..[?(@.id==20735)],也就是直接在语法后面加上.字段试了一下,结果就出来了。

  当然过程中试过很多没有结果的语法,看了很多网友分享的关于JSONPath的文章,但是没有找到我想要的这种结果。曾经想过放弃,是不是我太想当然,其实根本就没有这种语法。但是想想花了几个小时却什么收货都没有又觉得不甘心,应该是我才疏学浅还没有发现而已。感谢自己的不放弃,虽然只是一个语法而已,但是这次的收获却很多,顺带优化了了一下【添加购物车】时商品ID及数量的参数随机获取。这次的接口是目前跑过的接口中觉得最完美(花的时间最长)的接口,没有之一,以后还会跑出更完美的接口。

11.【JMeter函数】

posted on 2024-07-21 18:39  独孤湘瑶  阅读(6)  评论(0编辑  收藏  举报