| 獨孤湘瑤 |
|
||
|
聲明:本文所記錄的僅本次操作學習到的知識點,其中商城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提取器[學習過的]??重點:jsonpath獲取的數據可能有多個,所以它的返回值是一個列表。正常情況下,我們都是獲取下標0的值。 ① $.字段??最簡單的一個獲取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函數】
|
![]() |
|
|
博客園
|
|