本文為霍格沃茲測試學院優秀學員課程學習系列筆記,希望大家可以從中學到想了解的知識。
在上一篇文章完成首頁瀏覽壓測任務後,我們開始下單-支付場景的壓測實踐。
1. 分步拆解
1.1 POST /cart/add
1.1.1 接口分析
在電商購物場景中,最為常見和典型的就是添加購物車了,按照之前選定的接口,來看看添加購物車接口
POST /cart/add
的情況。
從接口文檔中我們可以知道添加購物車需要例如價格、品牌、分類id、商品id、商品sku等信息,相對還是比較多的,這個時候再到源碼中分析查看一下:
找到添加購物車的實現方法:可以看到首先需要獲取到當前的 Member,再通過 UmsMember 對象來獲取對應的Member 信息,其中
CurrentMember
中就包含了
id
、
nickName
和
deleteStatus
信息,可以依此自動獲取到,其實是無需我們填寫的參數。
那我們需要填寫的參數是什麼,可以得到這個
CurrentMember
信息呢?
再找到
getCurrentMember()
的實現方法:
從這裡就可以看到它需要獲取一個鑑權信息去解密,然後獲取當前的Member信息,也就是我們最開始需要在請求
Header
中帶入的
Authorization:${token}
:
最終如果購物車不存在就新增一個購物車,如果購物車已經存在就更新購物車信息;
1.1.2 接口數據構造
購物車數據構造注意事項:到這裡,我們看似已經知道了購物車如何添加,調用接口傳參隨意插入數據即可,但是要注意的是:
如果我們隨意的插入數據,可能接口會通過,數據也能插入成功,但是很可能會影響其他相關一系列業務的接口;例如我們可能插入了某個sku的商品,而這個商品已經庫存不足了,那麼接下來下單的業務就必然會失敗。因此我們需要添加符合真實邏輯的購物車數據。
通過梳理傳參可以知道了購物車的數據來源於兩張表
pms_sku_stock
和
pms_sku_stock
:
在
pms_sku_stock
表中構建
sku
數據時,需要注意的是
stock
數,下單一定要有庫存的概念,
Real_stock真實庫存
+
lock_stock鎖定庫存
一定不能大於固定的總庫存值,否則就會下單失敗,這是構造數據的限制。從源碼中也可以看到
realStock
=
stock
-
lockStock
購物車數據構造:現在我們開始構造數據,通過MySQL的join多表查詢,將
pms_sku_stock
和
pms_sku_stock
表中涉及到的請求字段且庫存數大於50的商品都查找出來:
<code>select p1.id, p1.product_category_id, p1.product_sn, p1.brand_name, p1.price, p1.name, p1.pic, p1.sub_title, p2.sku_code, p2.id/<code><code>as product_sku_id, p2.sp1, p2.sp2 from mall.pms_product as p1 join mall.pms_sku_stock as p2 on p1.id = p2.product_id/<code><code>where p1.stock gt=50 and p2.stock gt 50;/<code>
將數據保存:
1.1.3 Jmeter 腳本編寫
1.1.4 Jmeter 腳本調試
經過上面一通分析與操作,還要考實踐來驗證腳本的正確性:
OK,順利通過了!(其實沒有那麼順利,只是我踩過坑了,在嘗試了各種失敗後將成功的一次展現到了這裡而已~)
在去數據庫中看一下,沒問題,成功插入:
補充說明:調試過程中出了可以看Jmeter的結果樹中的數據,還可以查看對應容器的spring.log,進入容器,在目錄/var/logs/下:
1.2 GET /cart/list
GET /cart/list
1.2.1 接口分析
由於日常我們添加完購物車的時候都會去刷新一下購物車信息,並且通過cart/list也可以驗證購物車是否添加成功,所以對於
/cart/list
接口的測試是很有意義的
此接口比較簡單,只是一個get請求來獲取當前用戶的購物車信息:
1.2.2 Jmeter腳本編寫
1.3 GET/cart/list/promotion
GET /cart/list/promotion
1.3.1 接口分析
訂單信息是通過購物車去生成,在生成訂單的同時可能還會涉及到優惠券,積分等信息,因此在生成訂單的時候需要check一下會員的各種優惠促銷信息。
此接口也是個比較簡單的get接口:
1.3.2 Jmeter腳本編寫
閱讀更多 霍格沃茲軟件測試學院 的文章