From 7d3d8cb94f3259490fff0e265922175a56e932ae Mon Sep 17 00:00:00 2001 From: ieemoo Date: Mon, 18 Nov 2024 17:23:31 +0800 Subject: [PATCH] Arthur-Wu committed this file on 2024-11-18 --- YiMao/businessFunc/ClientApiLib.py | 134 ++++++++++++++-- YiMao/businessFunc/ServiceApiLib.py | 149 +++++++++++------- YiMao/data/WuShangSceneData.py | 18 ++- YiMao/data/YMHT_ApiTestCase_0.0.1.xlsx | Bin 55833 -> 55862 bytes YiMao/data/前后端联测业务场景梳理.xlsx | Bin 13259 -> 12421 bytes ..._C005_NonVipAddMultipleItemsForPurchase.py | 5 - ..._NonVipAddDiscountedProductsForPurchase.py | 5 - ...7_NonVipAddPromotionalWhitelistProducts.py | 5 - .../test_C008_NonVipAddWeightToTheProduct.py | 5 - ...ckADs.py => test_C001_NonLoginCheckADs.py} | 6 +- ...2_NonVipAddShoppingBagAndSettlePayment.py} | 20 +-- ...nVipAddNonDiscountedProductsForPurchase.py | 17 +- ...004_NonVipAddMemberPproductsForPurchase.py | 25 +-- ..._C005_NonVipAddMultipleItemsForPurchase.py | 47 ++++++ ..._NonVipAddDiscountedProductsForPurchase.py | 45 ++++++ ...7_NonVipAddPromotionalWhitelistProducts.py | 54 +++++++ .../test_C008_NonVipAddWeightToTheProduct.py | 55 +++++++ 17 files changed, 467 insertions(+), 123 deletions(-) delete mode 100644 YiMao/debugLib/test_C005_NonVipAddMultipleItemsForPurchase.py delete mode 100644 YiMao/debugLib/test_C006_NonVipAddDiscountedProductsForPurchase.py delete mode 100644 YiMao/debugLib/test_C007_NonVipAddPromotionalWhitelistProducts.py delete mode 100644 YiMao/debugLib/test_C008_NonVipAddWeightToTheProduct.py rename YiMao/scripts/BusiScenarios/{test_C001_CheckADs.py => test_C001_NonLoginCheckADs.py} (84%) rename YiMao/scripts/BusiScenarios/{test_C002_AddShoppingBagAndSettlePayment.py => test_C002_NonVipAddShoppingBagAndSettlePayment.py} (72%) create mode 100644 YiMao/scripts/BusiScenarios/test_C005_NonVipAddMultipleItemsForPurchase.py create mode 100644 YiMao/scripts/BusiScenarios/test_C006_NonVipAddDiscountedProductsForPurchase.py create mode 100644 YiMao/scripts/BusiScenarios/test_C007_NonVipAddPromotionalWhitelistProducts.py create mode 100644 YiMao/scripts/BusiScenarios/test_C008_NonVipAddWeightToTheProduct.py diff --git a/YiMao/businessFunc/ClientApiLib.py b/YiMao/businessFunc/ClientApiLib.py index e9c673f..8fbfc4c 100644 --- a/YiMao/businessFunc/ClientApiLib.py +++ b/YiMao/businessFunc/ClientApiLib.py @@ -63,7 +63,7 @@ class YMClientApi(object): logging.info(f"-----------接口返回数据:{response.json()}\n\n") return response.json() - def add_retire_purchase(self, GoodsInfoData, AddPurchaseQuantity, LoginData): + def add_cart_goods(self, GoodsInfoData, AddPurchaseQuantity, LoginData): logging.info("========== [加入购物车] add_retire_purchase ==========") payload = json.dumps({ "addGoods":[{ @@ -82,6 +82,115 @@ class YMClientApi(object): response = requests.request("POST", url, headers=self.headerss, data=payload) logging.info(f"-----------接口返回状态码:{response.status_code}") logging.info(f"-----------接口返回数据:{response.json()}\n\n") + return response.json() + + def delete_cart_goods(self, GoodsInfoData): + logging.info("========== [删除购物车商品] delete_cart_goods ==========") + payload = json.dumps({ + "addGoods": [], + "autoSelectCoupon": True, + "coupons": [], + "deleteGoods": [{ + "inputCode": "6924743915848", + "isNormalAddPurchase": True, + "qty": 1, + "uuid": ["23B2363A224E4933942992F84B937D7D"], + "weight": 0 + }], + "existGoods": [{ + "inputCode": "6924743915848", + "isNormalAddPurchase": True, + "qty": 1, + "uuid": ["23B2363A224E4933942992F84B937D7D"], + "weight": 155 + }], + "orderNo": "1858386778027515904" + }) + + add_2_result = { + "code": 0, + "msg": "成功", + "data": { + "remainAmount": "13.8", + "totalDisc": "0.0", + "orderItemList": [{ + "uuid": ["2BEDF9C6DD954E1FB3DCD9A9F3C57D29"], # + "qty": 1, # + "marketPrice": "5", + "salePrice": "5.00", + "totalSalePrice": "5", + "minWeight": 0, + "weight": 0, + "maxWeight": 0, + "goodsPic": "https://ieemoo-storage.obs.cn-east-3.myhuaweicloud.com/lhpic/6925303796426.jpg", + "barcode": "6925303796426", + "inputCode": "6925303796426", + "goodsName": "统一茄皇蕃茄牛肉面", + "goodsPromotionTags": null, + "measureProperty": 0, + "shoppingBagFlag": false, + "activityId": null, + "activityDescription": null, + "totalPromotionPrice": 0, + "categoryCode": null, + "isOneBarcodeMore": false, + "pkgFlag": false + }, + { + "uuid": ["F9BBA7C9AF7944FF91C717E3D18BD682"], + "qty": 1, + "marketPrice": "8.8", + "salePrice": "8.80", + "totalSalePrice": "8.8", + "minWeight": 0, + "weight": 0, + "maxWeight": 0, + "goodsPic": "https://ieemoo-storage.obs.cn-east-3.myhuaweicloud.com/lhpic/6924743915848.jpg", + "barcode": "6924743915848", + "inputCode": "6924743915848", + "goodsName": "乐事无限翡翠黄瓜味薯片", + "goodsPromotionTags": null, + "measureProperty": 0, + "shoppingBagFlag": false, + "activityId": null, + "activityDescription": null, + "totalPromotionPrice": 0, + "categoryCode": null, + "isOneBarcodeMore": false, + "pkgFlag": false + }], + "bagInfoList": null, + "couponMap": null, + "activityGoodsList": null + } + } + + del_201 = { + "addGoods": [], + "autoSelectCoupon": True, + "coupons": [], + "deleteGoods": [{ + "inputCode": "6924743915848", + "isNormalAddPurchase": True, + "qty": 1, + "uuid": ["F9BBA7C9AF7944FF91C717E3D18BD682"], + "weight": 0 + }], + "existGoods": [{ + "inputCode": "6925303796426", + "isNormalAddPurchase": True, + "qty": 1, + "uuid": ["2BEDF9C6DD954E1FB3DCD9A9F3C57D29"], + "weight": 165 # GoodsInfoData["data"]["weight"] + }, { + "inputCode": "6924743915848", + "isNormalAddPurchase": True, + "qty": 1, + "uuid": ["F9BBA7C9AF7944FF91C717E3D18BD682"], + "weight": 160 # GoodsInfoData["data"]["weight"] + }], + "orderNo": "1858386778027515904" + } def get_coupon_list(self): logging.info("========== [获取优惠券列表] get_coupon_list ==========") @@ -116,13 +225,16 @@ class YMClientApi(object): logging.info(f"-----------接口返回数据:{response.json()}\n\n") return response.json() - def get_cart_goods_info(self, GoodsInfoData): + def get_cart_goods_info(self, GoodsDataList): logging.info("========== [获取购物车商品信息] get_cart_goods_info ==========") - payload = json.dumps({"goodsParamList":[{ - "inputCode": GoodsInfoData["data"]["inputCode"], - "qty": GoodsInfoData["data"]["qty"], - "weight": int(GoodsInfoData["data"]["weight"]), - }]}) + goods_param_lList = [] + for goods_data in GoodsDataList: + goods_dict = {} + goods_dict["inputCode"] = goods_data["data"]["inputCode"] + goods_dict["qty"] = goods_data["data"]["qty"] + goods_dict["weight"] = int(goods_data["data"]["weight"]) + goods_param_lList.append(goods_dict) + payload = json.dumps({"goodsParamList": goods_param_lList}) url = self.Domain+"/v2/shopping/cart/goods/info" response = requests.request("POST", url, headers=self.headerss, data=payload) logging.info(f"-----------接口返回状态码:{response.status_code}") @@ -142,12 +254,6 @@ class YMClientApi(object): logging.info(f"-----------接口返回数据:{response.json()}\n\n") return response.json() - ''' 加购购物袋 - POST - https://api.test.yimaogo.com/cart/v2/shopping/add/retire/purchase - - ''' - ''' 2- without sessionid ''' def get_ads_list(self): logging.info("========== [获取广告列表] get_ads_list ==========") @@ -185,7 +291,7 @@ if __name__ == '__main__': CouponListData = ymc.get_coupon_list() # step6:获取优惠券列表 ymc.receive_coupon(CouponListData) # step7:领取优惠券 ymc.query_coupon_list_user() # step8:查询用户持有的优惠券列表 - ymc.add_retire_purchase(GoodsInfoData, 1, LoginData) # step9:加购商品 ------ 6924882486100 + ymc.add_cart_goods(GoodsInfoData, 1, LoginData) # step9:加购商品 ------ 6924882486100 ymc.get_cart_goods_info(GoodsInfoData) # step10:获取购物车商品信息 ymc.request_order_settlement(LoginData) # step11:请求订单结算 diff --git a/YiMao/businessFunc/ServiceApiLib.py b/YiMao/businessFunc/ServiceApiLib.py index 0a2db71..c1c07ec 100644 --- a/YiMao/businessFunc/ServiceApiLib.py +++ b/YiMao/businessFunc/ServiceApiLib.py @@ -6,6 +6,7 @@ import requests,json, time, logging from configs.globalParams import * from commons.SignatureYM import SignatureYM +from commons.FileHandler import Txt class YMServiceApi(object): @@ -14,65 +15,105 @@ class YMServiceApi(object): self.headerss = SignatureYM().return_headers() ''' 1-广告模块 ''' - def publish_ad(self, ADDetail, MarketAndStoreDetail): + def publish_ad(self, ADDetailList, MarketAndStoreDetail): logging.info("========== [发布广告] ==========") - timeStamp = str(int(time.time())) - PublicParams = { - "status": 4, "name": "Auto"+timeStamp, - "agencyId": 3, "agencyName": "洪家班", "advertiserId": 3, - "advertiserName": "阿宝传媒", "adsUse": 1, "customerTag": 3, - "putRangeCycle": "[7,6,5,1,2,3,4]", - "addType": 1, "pricingType": 1, "standardPrice": "1", "minPrice": "1", - "putStart": GlobalParams["todayDate"], "putEnd": GlobalParams["todayDate"], - "putStartTime": "00:00:00", "putEndTime": "23:00:00" - } - payload = json.dumps(PublicParams | ADDetail | MarketAndStoreDetail) - url = self.Domain + "admin/ads" + def __publish(ADDetail, MarketAndStoreDetail): + timeStamp = str(int(time.time())) + PublicParams = { + "status": 4, "name": "Auto"+timeStamp, + "agencyId": 3, "agencyName": "洪家班", "advertiserId": 3, + "advertiserName": "阿宝传媒", "adsUse": 1, "customerTag": 3, + "putRangeCycle": "[7,6,5,1,2,3,4]", + "addType": 1, "pricingType": 1, "standardPrice": "1", "minPrice": "1", + "putStart": GlobalParams["todayDate"], "putEnd": GlobalParams["todayDate"], + "putStartTime": "00:00:00", "putEndTime": "23:00:00" + } + payload = json.dumps(PublicParams | ADDetail | MarketAndStoreDetail) + url = self.Domain + "admin/ads" + response = requests.request("POST", url, headers=self.headerss, data=payload) + logging.info(f"-----------接口返回状态码:{response.status_code}") + logging.info(f"-----------接口返回数据:{response.json()}\n\n") + + for adDetail in ADDetailList: + __publish(adDetail, MarketAndStoreDetail) + time.sleep(0.5) + + def add_promotional_product_whitelist(self, GoodsInfo, MarketAndStoreInfo): + logging.info("========== [新增促销白名单] ==========") + payload = json.dumps({ + "goodsType": 3, + "dataScope": 1, + "categoryCode": "", + "categoryName": "", + "barcode": GoodsInfo["GoodsInputcode"], + "goodsName": GoodsInfo["GoodsName"], + "storeId": MarketAndStoreInfo["StoreId"], + "marketId": MarketAndStoreInfo["MarketId"] + }) + url = self.Domain + "admin/goods/promotion" response = requests.request("POST", url, headers=self.headerss, data=payload) logging.info(f"-----------接口返回状态码:{response.status_code}") logging.info(f"-----------接口返回数据:{response.json()}\n\n") + if response.status_code == 200: + time.sleep(0.5) + rspJson = response.json() + goodsWhiteListID = rspJson["data"]['id'] + writeResult = Txt().append_write_txt("ScenarioTest_GoodsWhiteListID.txt", str(goodsWhiteListID)) + if not writeResult: + logging.error(f"---写入 新建促销商品白名单ID 失败!") + + def delete_whitelist_goods(self): + logging.info("========== [删除促销白名单商品] ==========") + GoodsWhiteListIDList = Txt().read_txt("ScenarioTest_GoodsWhiteListID.txt") + for i in range(len(GoodsWhiteListIDList)): + if GoodsWhiteListIDList[i] not in [None, '']: + url = self.Domain + "admin/goods/promotion/{GoodsWhiteListID}".replace( + "{GoodsWhiteListID}", str(GoodsWhiteListIDList[i])) + logging.info(f"---删除促销白名单商品接口URL为:: {url}") + response = requests.request(method="DELETE", url=url, headers=HEADERS, data={}) + logging.info(f"---接口返回状态码为:: {response.status_code}") + logging.info(f"---接口返回体为:: {response.json()}\n") + + def add_weight_to_whitelist(self, GoodsInfo, MarketAndStoreInfo): + logging.info("========== [新增重量放通白名单] ==========") + payload = json.dumps({ + "goodsType": 4, + "content": GoodsInfo["GoodsInputcode"], + "type": 1, + "dataScope": 1, + "reason": "自动化测试之场景测试", + "storeId": MarketAndStoreInfo["StoreId"], + "marketId": MarketAndStoreInfo["MarketId"] + }) + url = self.Domain + "admin/goods/weight/promotion" + response = requests.request("POST", url, headers=self.headerss, data=payload) + logging.info(f"-----------接口返回状态码:{response.status_code}") + logging.info(f"-----------接口返回数据:{response.json()}\n\n") + if response.status_code == 200: + time.sleep(0.5) + rspJson = response.json() + weightWhiteListID = rspJson["data"]['id'] + writeResult = Txt().append_write_txt("ScenarioTest_WeightWhiteListID.txt", str(weightWhiteListID)) + if not writeResult: + logging.error(f"---写入 新建重量放通白名单ID 失败!") + + def delete_weight_whitelist_goods(self): + logging.info("========== [删除重量放通白名单商品] ==========") + WeightWhiteListIDList = Txt().read_txt("ScenarioTest_WeightWhiteListID.txt") + for i in range(len(WeightWhiteListIDList)): + if WeightWhiteListIDList[i] not in [None, '']: + url = self.Domain + "admin/goods/weight/promotion/{WeightWhiteListID}".replace( + "{WeightWhiteListID}", str(WeightWhiteListIDList[i])) + logging.info(f"---删除重量放通白名单商品接口URL为:: {url}") + response = requests.request(method="DELETE", url=url, headers=self.headerss, data={}) + logging.info(f"---接口返回状态码为:: {response.status_code}") + logging.info(f"---接口返回体为:: {response.json()}\n\n") if __name__ == '__main__': yms = YMServiceApi() - ''' 武商 ''' - ADDetail = [ - { # 登录页 - "adsAreaId": 1, "mediaType": 1, - "mediaUrl": "ads/content/534ae9d7-3f65-48da-bc2e-3d5e66fe56d8.jpg", - "showOrder": 1, "showTime": 5, - }, - { # 登录后弹窗 - "adsAreaId": 2, "mediaType": 1, - "mediaUrl": "ads/content/93e34d0e-9f4c-499b-ad8b-5741e55528b5.jpg", - }, - { # 购物车主页 - "adsAreaId": 3, "mediaType": 1, - "mediaUrl": "ads/content/581ec30a-4d90-43f3-b0e9-b5c8fe0006b4.jpg", - "showOrder": 1, "showTime": 5, - }, - { # 待机页 - "adsAreaId": 4, "mediaType": 1, - "mediaUrl": "ads/content/8c8f6de0-6eb7-4b66-98cd-2c85eb057ed5.png", - "showOrder": 1, "showTime": 5, - }, - { # 扫码 - "adsAreaId": 5, "mediaType": 1, - "mediaUrl": "ads/content/9d5555e3-fec1-4e1a-94e7-b517f4e88aba.jpg", - }, - { # 支付后 - "adsAreaId": 6, "mediaType": 1, - "mediaUrl": "ads/content/e2e2e892-1a81-4b0f-9af2-cb46f04a5dc4.jpg", - }, - { # 小票 - "adsAreaId": 7, "mediaType": 1, - "mediaUrl": "ads/content/6d9c14ca-3fd1-4fe7-b04a-84cf18937e60.jpg", - } - ] - MarketAndStoreDetail = {"putMarketId": 50, "putStoreId": ["29"]} - for ad in ADDetail: - yms.publish_ad(ad, MarketAndStoreDetail) - time.sleep(0.5) - - - + GoodsInfo = {"GoodsInputcode": "6924743915848"} + MarketAndStoreInfo = {"MarketId": 50, "StoreId": 29} + yms.add_weight_to_whitelist(GoodsInfo, MarketAndStoreInfo) + time.sleep(10) + yms.delete_weight_whitelist_goods() \ No newline at end of file diff --git a/YiMao/data/WuShangSceneData.py b/YiMao/data/WuShangSceneData.py index c951223..c075897 100644 --- a/YiMao/data/WuShangSceneData.py +++ b/YiMao/data/WuShangSceneData.py @@ -3,9 +3,21 @@ # @Author:: Arthur Wu # @Date:: 2024/11/15-14:46 # @Description:: -''' 武商场景数据集 ''' +''' 武商场景数据集 +adsAreaId-1: 登录页广告 +adsAreaId-2: 登录后弹窗广告 +adsAreaId-3: 购物车主页广告 +adsAreaId-4: 待机广告 +adsAreaId-5: 扫码广告 +adsAreaId-6: 支付后广告 +adsAreaId-7: 小票广告 +''' -ADDetail = [ +MarketAndStoreInfo = {"MarketId": 50, "StoreId": 29} + +MarketAndStoreDetail = {"putMarketId": 50, "putStoreId": ["29"]} + +WuShangADDetail = [ { "adsAreaId": 1, "mediaType": 1, "mediaUrl": "ads/content/534ae9d7-3f65-48da-bc2e-3d5e66fe56d8.jpg", @@ -38,4 +50,4 @@ ADDetail = [ "mediaUrl": "ads/content/6d9c14ca-3fd1-4fe7-b04a-84cf18937e60.jpg", } ] -MarketAndStoreDetail = {"putMarketId": 50, "putStoreId": ["29"]} + diff --git a/YiMao/data/YMHT_ApiTestCase_0.0.1.xlsx b/YiMao/data/YMHT_ApiTestCase_0.0.1.xlsx index e781899211b7d6818bf2a8d309a57bf52ed56094..4ece09675d4175166ecf46dd92e653b936b5cd8e 100644 GIT binary patch delta 25447 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 KG%^3r68{I>lG;T8 diff --git a/YiMao/data/前后端联测业务场景梳理.xlsx b/YiMao/data/前后端联测业务场景梳理.xlsx index 962e3e1c357abebda8d7cd0bf39d3a61fca26034..396ddd485e49435b674af3a5ecca76f6799b001e 100644 GIT binary patch delta 6768 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 delta 7658 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 RhyRW^3p~PS1N}4S{{X~pr| None: self.timestamp = int(time.time()) self.ymc = YMClientApi() + self.vip_goods_inputcode = "6924743915848" # 乐事薯片 - @allure.story('[购物车客户端] 加购无优惠商品并试算验证-01') - def test_C00201_AddShoppingBagAndSettlePayment(self): - allure.dynamic.description("描述:加购无优惠商品") + @allure.story('[场景测试] 003-非会员加购无优惠商品并试算验证-01') + def test_C003_NonVipAddNonDiscountedProductsForPurchase(self): + allure.dynamic.description("描述:非会员加购无优惠商品") allure.step("步骤1:session开始") self.ymc.session_start() allure.step("步骤2:匿名登录") Payload01 = {"action": 0, "isAnon": True} LoginData = self.ymc.login_app_v2(Payload01) allure.step("步骤3:获取商品信息") - GoodsInfoData = self.ymc.get_goods_info(InputCode=6924743915848) + GoodsInfoData = self.ymc.get_goods_info(InputCode=self.vip_goods_inputcode) allure.step("步骤4:添加无优惠商品") - self.ymc.add_retire_purchase(GoodsInfoData, 5, LoginData) + self.ymc.add_cart_goods(GoodsInfoData, 5, LoginData) allure.step("步骤5:获取购物车商品信息") - self.ymc.get_cart_goods_info(GoodsInfoData) + self.ymc.get_cart_goods_info([GoodsInfoData]) allure.step("步骤6:请求订单结算") self.ymc.request_order_settlement(LoginData) diff --git a/YiMao/scripts/BusiScenarios/test_C004_NonVipAddMemberPproductsForPurchase.py b/YiMao/scripts/BusiScenarios/test_C004_NonVipAddMemberPproductsForPurchase.py index 483f1f1..7133c34 100644 --- a/YiMao/scripts/BusiScenarios/test_C004_NonVipAddMemberPproductsForPurchase.py +++ b/YiMao/scripts/BusiScenarios/test_C004_NonVipAddMemberPproductsForPurchase.py @@ -8,32 +8,35 @@ from configs.globalObj import LOGGER from YiMao.businessFunc.ClientApiLib import YMClientApi -class Test_C002_AddShoppingBagAndSettlePayment(unittest.TestCase): +class Test_C004_NonVipAddMemberPproductsForPurchase(unittest.TestCase): '''@Date:: 2024/11/15 @Author:: Arthur Wu @Desc:: - [购物车客户端] 加购无优惠商品并试算验证 - 1、武商测试环境,普通无优惠商品inputcode为: - 6924743915848 + [购物车客户端] 加购会员商品并结算验证 + 1、武商测试环境,会员有优惠商品inputcode为: + !!!!会员有优惠商品暂未提供 ''' def setUp(self) -> None: self.timestamp = int(time.time()) self.ymc = YMClientApi() + # 会员有优惠商品暂未提供 + self.vip_goods_inputcode = "6924743915848" # 乐事薯片 + self.vip_goods_inputcode = "6925303796426" # 统一番茄牛肉面 - @allure.story('[购物车客户端] 加购无优惠商品并试算验证-01') - def test_C00201_AddShoppingBagAndSettlePayment(self): - allure.dynamic.description("描述:加购无优惠商品") + @allure.story('[场景测试] 004-非会员加购会员商品并结算验证-01') + def test_C004_NonVipAddMemberPproductsForPurchase(self): + allure.dynamic.description("描述:非会员加购会员有优惠商品") allure.step("步骤1:session开始") self.ymc.session_start() allure.step("步骤2:匿名登录") Payload01 = {"action": 0, "isAnon": True} LoginData = self.ymc.login_app_v2(Payload01) allure.step("步骤3:获取商品信息") - GoodsInfoData = self.ymc.get_goods_info(InputCode=6924743915848) - allure.step("步骤4:添加无优惠商品") - self.ymc.add_retire_purchase(GoodsInfoData, 5, LoginData) + GoodsInfoData = self.ymc.get_goods_info(InputCode=self.vip_goods_inputcode) + allure.step("步骤4:添加会员有优惠商品") + self.ymc.add_cart_goods(GoodsInfoData, 1, LoginData) allure.step("步骤5:获取购物车商品信息") - self.ymc.get_cart_goods_info(GoodsInfoData) + self.ymc.get_cart_goods_info([GoodsInfoData]) allure.step("步骤6:请求订单结算") self.ymc.request_order_settlement(LoginData) diff --git a/YiMao/scripts/BusiScenarios/test_C005_NonVipAddMultipleItemsForPurchase.py b/YiMao/scripts/BusiScenarios/test_C005_NonVipAddMultipleItemsForPurchase.py new file mode 100644 index 0000000..79c7449 --- /dev/null +++ b/YiMao/scripts/BusiScenarios/test_C005_NonVipAddMultipleItemsForPurchase.py @@ -0,0 +1,47 @@ +# !/usr/bin/python +# -*- coding: utf-8 -*- +# @Author:: Arthur Wu +# @Description:: 游客登录,加购多件商品并结算 +# @Date:: 2021-05-10 16:30:23 +import unittest,allure,time +from configs.globalObj import LOGGER +from YiMao.businessFunc.ClientApiLib import YMClientApi + + +class Test_C005_NonVipAddMultipleItemsForPurchase(unittest.TestCase): + '''@Date:: 2024/11/15 + @Author:: Arthur Wu + @Desc:: + [购物车客户端] 加购多件商品并结算 验证 + 1、武商测试环境,多件商品的 inputcode 分别为: + ''' + def setUp(self) -> None: + self.timestamp = int(time.time()) + self.ymc = YMClientApi() + self.vip_goods_inputcode1 = "6924743915848" # 乐事薯片 + self.vip_goods_inputcode2 = "6925303796426" # 统一番茄牛肉面 + + @allure.story('[场景测试] 005-非会员加购会员商品并结算验证') + def test_C005_NonVipAddMultipleItemsForPurchase(self): + allure.dynamic.description("描述:非会员加购会员有优惠商品") + allure.step("步骤1:session开始") + self.ymc.session_start() + allure.step("步骤2:匿名登录") + Payload01 = {"action": 0, "isAnon": True} + LoginData = self.ymc.login_app_v2(Payload01) + allure.step("步骤3:获取商品1信息") + GoodsInfoData1 = self.ymc.get_goods_info(InputCode=self.vip_goods_inputcode1) + allure.step("步骤4:添加商品1") + self.ymc.add_cart_goods(GoodsInfoData1, 1, LoginData) + allure.step("步骤5:获取商品2信息") + GoodsInfoData2 = self.ymc.get_goods_info(InputCode=self.vip_goods_inputcode2) + allure.step("步骤6:添加商品2") + self.ymc.add_cart_goods(GoodsInfoData2, 1, LoginData) + allure.step("步骤7:获取购物车商品信息") + self.ymc.get_cart_goods_info([GoodsInfoData1, GoodsInfoData2]) + allure.step("步骤8:请求订单结算") + self.ymc.request_order_settlement(LoginData) + + +if __name__ == '__main__': + unittest.main(verbosity=2) \ No newline at end of file diff --git a/YiMao/scripts/BusiScenarios/test_C006_NonVipAddDiscountedProductsForPurchase.py b/YiMao/scripts/BusiScenarios/test_C006_NonVipAddDiscountedProductsForPurchase.py new file mode 100644 index 0000000..3528690 --- /dev/null +++ b/YiMao/scripts/BusiScenarios/test_C006_NonVipAddDiscountedProductsForPurchase.py @@ -0,0 +1,45 @@ +# !/usr/bin/python +# -*- coding: utf-8 -*- +# @Author:: Arthur Wu +# @Description:: 游客登录,加购打折商品并结算 +# @Date:: 2021-05-10 16:30:22 +import unittest,allure,time +from configs.globalObj import LOGGER +from YiMao.businessFunc.ClientApiLib import YMClientApi + + +class Test_C006_NonVipAddDiscountedProductsForPurchaset(unittest.TestCase): + '''@Date:: 2024/11/15 + @Author:: Arthur Wu + @Desc:: + [购物车客户端] 加购打折商品并结算 验证 + 1、武商测试环境,会员有优惠商品inputcode为: + !!!!折扣商品暂未提供 + ''' + def setUp(self) -> None: + self.timestamp = int(time.time()) + self.ymc = YMClientApi() + # 折扣商品暂未提供 + self.vip_goods_inputcode1 = "6924743915848" # 乐事薯片 + + @allure.story('[场景测试] 006-非会员加购打折商品并结算-01') + def test_C006_NonVipAddDiscountedProductsForPurchase(self): + allure.dynamic.description("描述:非会员加购打折商品并结算") + allure.step("步骤1:session开始") + self.ymc.session_start() + allure.step("步骤2:匿名登录") + Payload01 = {"action": 0, "isAnon": True} + LoginData = self.ymc.login_app_v2(Payload01) + allure.step("步骤3:获取折扣商品信息") + GoodsInfoData1 = self.ymc.get_goods_info(InputCode=self.vip_goods_inputcode1) + allure.step("步骤4:加购折扣商品") + self.ymc.add_cart_goods(GoodsInfoData1, 1, LoginData) + + allure.step("步骤5:获取购物车商品信息") + self.ymc.get_cart_goods_info([GoodsInfoData1]) + allure.step("步骤6:请求订单结算") + self.ymc.request_order_settlement(LoginData) + + +if __name__ == '__main__': + unittest.main(verbosity=2) \ No newline at end of file diff --git a/YiMao/scripts/BusiScenarios/test_C007_NonVipAddPromotionalWhitelistProducts.py b/YiMao/scripts/BusiScenarios/test_C007_NonVipAddPromotionalWhitelistProducts.py new file mode 100644 index 0000000..c45e336 --- /dev/null +++ b/YiMao/scripts/BusiScenarios/test_C007_NonVipAddPromotionalWhitelistProducts.py @@ -0,0 +1,54 @@ +# !/usr/bin/python +# -*- coding: utf-8 -*- +# @Author:: Arthur Wu +# @Description:: 游客登录,加购促销白名单商品并结算 +# @Date:: 2021-05-10 16:30:23 +import unittest,allure,time +from configs.globalObj import LOGGER +from YiMao.businessFunc.ClientApiLib import YMClientApi +from YiMao.businessFunc.ServiceApiLib import YMServiceApi + + +class Test_C007_NonVipAddPromotionalWhitelistProducts(unittest.TestCase): + '''@Date:: 2024/11/15 + @Author:: Arthur Wu + @Desc:: test_C007_NonVipAddPromotionalWhitelistProducts + [购物车客户端] 加购促销白名单商品并结算 验证 + 1、武商测试环境,促销白名单商品inputcode为: + 6925303796426 + ''' + def setUp(self) -> None: + self.timestamp = int(time.time()) + self.ymc = YMClientApi() + self.yms = YMServiceApi() + # 促销白名单商品暂未提供 + + @allure.story('[场景测试] 007-非会员加购促销白名单商品并结算') + def test_C007_NonVipAddPromotionalWhitelistProducts(self): + allure.dynamic.description("描述:非会员加购促销白名单商品并结算") + allure.step("[前置条件]:先调用管理平台接口,将指定商品添加到促销白名单中") + GoodsInfo = {"GoodsInputcode": "6925303796426", "GoodsName": "统一茄皇蕃茄牛肉面"} + MarketAndStoreInfo = {"MarketId": 50, "StoreId": 29} + self.yms.add_promotional_product_whitelist(GoodsInfo, MarketAndStoreInfo) + + allure.step("[业务步骤]:再调用客户端接口,执行加购操作") + allure.step("步骤1:session开始") + self.ymc.session_start() + allure.step("步骤2:匿名登录") + Payload01 = {"action": 0, "isAnon": True} + LoginData = self.ymc.login_app_v2(Payload01) + allure.step("步骤3:获取白名单商品信息") + GoodsInfoData1 = self.ymc.get_goods_info(InputCode=GoodsInfo["GoodsInputcode"]) + allure.step("步骤4:加购白名单商品") + self.ymc.add_cart_goods(GoodsInfoData1, 1, LoginData) + allure.step("步骤5:获取购物车商品信息") + self.ymc.get_cart_goods_info([GoodsInfoData1]) + allure.step("步骤6:请求订单结算") + self.ymc.request_order_settlement(LoginData) + + allure.step("[后置处理]:删除添加的促销白名单商品") + self.yms.delete_whitelist_goods() + + +if __name__ == '__main__': + unittest.main(verbosity=2) \ No newline at end of file diff --git a/YiMao/scripts/BusiScenarios/test_C008_NonVipAddWeightToTheProduct.py b/YiMao/scripts/BusiScenarios/test_C008_NonVipAddWeightToTheProduct.py new file mode 100644 index 0000000..ebe10cf --- /dev/null +++ b/YiMao/scripts/BusiScenarios/test_C008_NonVipAddWeightToTheProduct.py @@ -0,0 +1,55 @@ +# !/usr/bin/python +# -*- coding: utf-8 -*- +# @Author:: Arthur Wu +# @Description:: 游客登录,加购重量放通商品并结算 +# @Date:: 2021-05-10 16:30:22 +import unittest,allure,time +from configs.globalObj import LOGGER +from YiMao.businessFunc.ClientApiLib import YMClientApi +from YiMao.businessFunc.ServiceApiLib import YMServiceApi + + +class Test_C008_NonVipAddWeightToTheProduct(unittest.TestCase): + '''@Date:: 2024/11/15 + @Author:: Arthur Wu + @Desc:: + [购物车客户端] 加购重量放通商品并结算 验证 + 1、武商测试环境,重量放通商品inputcode为: + 6924743915848 + ''' + def setUp(self) -> None: + self.timestamp = int(time.time()) + self.ymc = YMClientApi() + self.yms = YMServiceApi() + # 重量放通白名单商品暂未提供 + + @allure.story('[场景测试] 008-非会员加购重量放通商品并结算') + def test_C008_NonVipAddWeightToTheProduct(self): + allure.dynamic.description("描述:非会员加购重量放通商品并结算") + allure.step("[前置条件]:先调用管理平台接口,将指定商品添加到重量放通白名单中") + GoodsInfo = {"GoodsInputcode": "6924743915848", "GoodsName": "乐事无限翡翠黄瓜味薯片"} + MarketAndStoreInfo = {"MarketId": 50, "StoreId": 29} + self.yms.add_weight_to_whitelist(GoodsInfo, MarketAndStoreInfo) + + ''' 2-再调用客户端接口,执行加购操作 ''' + allure.step("[业务步骤]:再调用客户端接口,执行加购操作") + allure.step("步骤1:session开始") + self.ymc.session_start() + allure.step("步骤2:匿名登录") + Payload01 = {"action": 0, "isAnon": True} + LoginData = self.ymc.login_app_v2(Payload01) + allure.step("步骤3:获取白名单商品信息") + GoodsInfoData1 = self.ymc.get_goods_info(InputCode=GoodsInfo["GoodsInputcode"]) + allure.step("步骤4:加购白名单商品") + self.ymc.add_cart_goods(GoodsInfoData1, 1, LoginData) + allure.step("步骤5:获取购物车商品信息") + self.ymc.get_cart_goods_info([GoodsInfoData1]) + allure.step("步骤6:请求订单结算") + self.ymc.request_order_settlement(LoginData) + + allure.step("[后置处理]:删除添加的重量放通白名单商品") + self.yms.delete_weight_whitelist_goods() + + +if __name__ == '__main__': + unittest.main(verbosity=2) \ No newline at end of file