# -*- coding: utf-8 -*-
import json
import pytest
import requests
import jsonpath
from log_util import logger
class TestLitemall:
def setup_class(self):
# 管理端接口
url = "https://litemall.hogwarts.ceshiren.com/admin/auth/login"
user_data = {
"username": "hogwarts",
"password": "test12345",
"code": ""
}
r = requests.post(url, json=user_data, verify=False)
# 實例化token變量 注意:jsonpath.jsonpath返回的是列表
self.token = jsonpath.jsonpath(r.json(), "$.data.token")[0]
# 客戶端接口
url_client = "https://litemall.hogwarts.ceshiren.com/wx/auth/login"
client_data = {
"username": "user123",
"password": "user123"
}
r = requests.post(url_client, json=client_data, verify=False)
self.token_client = jsonpath.jsonpath(r.json(), "$.data.token")[0]
def teardown_method(self):
# 數據清理
url = "https://litemall.hogwarts.ceshiren.com/admin/goods/delete"
r = requests.post(url, json={"id": self.goods_id}, verify=False, headers={"x-litemall-admin-token": self.token})
logger.info(f"刪除商品接口響應信息為:{json.dumps(r.json(), indent=2, ensure_ascii=False)}")
# ============問題2:goods_name 不能重復,所以需要添加參數化
@pytest.mark.parametrize("goods_name", ["毛巾9020", "毛巾9021", "毛巾9022"])
def test_add_goods(self, goods_name):
# ======================上架商品接口==========================
url = "https://litemall.hogwarts.ceshiren.com/admin/goods/create"
goods_data = {
"goods": {"picUrl": "", "gallery": [], "isHot": False, "isNew": True, "isOnSale": True, "goodsSn": "9012",
"name": goods_name}, "specifications": [{"specification": "規格", "value": "標準", "picUrl": ""}],
"products": [{"id": 0, "specifications": ["標準"], "price": "20", "number": "20", "url": ""}],
"attributes": []}
headers = {"x-litemall-admin-token": self.token}
r = requests.post(url, json=goods_data, verify=False, headers=headers)
logger.info(f"上架商品接口響應信息為:{json.dumps(r.json(), indent=2, ensure_ascii=False)}")
# =====================商品列表接口(可以提取商品ID)======================
goods_list_url = "https://litemall.hogwarts.ceshiren.com/admin/goods/list"
goods_data = {
"name": goods_name,
"order": "desc",
"sort": "add_time"
}
r = requests.get(goods_list_url, params=goods_data, verify=False,
headers={"x-litemall-admin-token": self.token})
self.goods_id = r.json()["data"]["list"][0]["id"]
logger.info(f"商品列表接口響應信息為:{json.dumps(r.json(), indent=2, ensure_ascii=False)}")
# ================商品詳情接口(可以提取商品庫存ID)==================
goods_detail_url = "https://litemall.hogwarts.ceshiren.com/admin/goods/detail"
goods_detail_data = {
"id": self.goods_id
}
r = requests.get(goods_detail_url, params=goods_detail_data, verify=False,
headers={"x-litemall-admin-token": self.token})
products_id = r.json()["data"]["products"][0]["id"]
logger.info(f"商品詳情接口口響應信息為:{json.dumps(r.json(), indent=2, ensure_ascii=False)}")
# =======================添加購物車接口======================================
url = "https://litemall.hogwarts.ceshiren.com/wx/cart/add"
# 問題:goodsId 和 productId 是寫死的,變量的傳遞沒有完成
# 解決方案:goodsId 和 productId 從其他的接口獲取,并傳遞給添加購物車接口
cart_data = {
"goodsId": self.goods_id,
"number": 1,
"productId": products_id
}
r = requests.post(url, json=cart_data, verify=False, headers={"x-litemall-token": self.token_client})
logger.info(f"添加購物車接口響應信息為:{json.dumps(r.json(), indent=2, ensure_ascii=False)}")
# ======問題1:缺少斷言
assert r.json()["errmsg"] == "成功"