auto_test_dev/YiMao/scripts/YMService/test_04LotteryDraw.py

113 lines
6.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# !/usr/bin/python
# -*- coding: utf-8 -*-
import unittest,allure,ddt,json,requests
from configs.globalObj import LOGGER
from configs.globalParams import *
from YiMao.config.ServiceApiInfo import *
from commons.FileHandler import ReadExcel,Txt
from commons.AssertLib import _assert_result
ExlFilePath = GlobalPath['YMDataPath'] + '/YMHT_ApiTestCase_0.0.1.xlsx'
ExcelContent = ReadExcel().get_data(FilePath=ExlFilePath, SheetName='04-抽奖活动')
@ddt.ddt
class Test_LotteryDraw_Module(unittest.TestCase):
@allure.story("[管理后台] 抽奖活动模块")
@ddt.data(*ExcelContent)
def test_lottery_draw(self, data):
'''@Date:: 2024/10/25
@Desc::
管理后台 -> 抽奖活动 模块接口
'''
''' step01- 前置数据、接口信息描述等 '''
allure.dynamic.title(data['CaseName'])
allure.dynamic.description("描述:抽奖活动 模块接口自动化测试")
caseModule_c = data['BusinessModule'] # 用例编号
caseNO_c = data['NO.'] # 用例编号
caseName_c = data['CaseName'] # 用例名称
requestType_c = str(data['RequestType']) # 请求方式
expStaCode_c = data['ExpStatusCode'] # 预期的状态码
expRespJson_c = eval(data['RespJson']) # 预期的返回体
LOGGER.info(f">>> 开始执行->{caseModule_c}接口自动化测试 <<<\n")
LOGGER.info(f"---用例编号为:{caseNO_c}")
LOGGER.info(f"---用例名称为:{caseName_c}")
LOGGER.info(f"---请求方式为:{requestType_c}")
# LOGGER.info(f"---请求Header为{HEADERS}")
LOGGER.info(f"---预期接口返回码为:{expStaCode_c}")
LOGGER.info(f"---预期返回体为:{expRespJson_c}\n")
''' step02- 请求接口 '''
rspJson = {}
if caseModule_c in ["新建抽奖活动", "查询抽奖活动"]:
# 新建、查询
api_url = api_env[ProCfgData['ExecutionEnv']] + ManagementPlatformApi_zh[caseModule_c] # 请求地址
LOGGER.info(f"---请求接口为:{api_url}")
payload_c = json.dumps(eval(data['Payload']), indent=4, ensure_ascii=False) # 请求体为json格式
LOGGER.info(f"---请求体为:{payload_c}\n")
response = requests.request(method=requestType_c, url=api_url, headers=HEADERS, data=payload_c)
rspJson = response.json()
LOGGER.info(f"---接口返回状态码为:: {response.status_code}")
LOGGER.info(f"---接口返回体为:: {json.dumps(response.json(), indent=4, ensure_ascii=False)}\n")
if caseModule_c == "新建抽奖活动":
if "存为草稿" in caseName_c:
LottreyActID = rspJson["data"]['id']
writeResult = Txt().append_write_txt("04_LottreyDrawID.txt", str(LottreyActID))
if not writeResult:
LOGGER.error(f"---写入 抽奖活动(新建)ID 失败!")
else:
LottreyActID = rspJson["data"]['id']
writeResult = Txt().append_write_txt("04_CreateLottreyActID.txt", str(LottreyActID))
if not writeResult:
LOGGER.error(f"---写入 抽奖活动(草稿)ID 失败!")
else:
# 编辑抽奖活动状态
if "存为草稿" in caseName_c:
lotteryActIDList = Txt().read_txt("04_LottreyDrawID.txt")
LOGGER.info(f"---新建抽奖活动 存为草稿的活动ID list为{lotteryActIDList}")
elif requestType_c == "DELETE":
lotteryActIDList = (Txt().read_txt("04_CreateLottreyActID.txt") +
Txt().read_txt("04_LottreyDrawID.txt"))
LOGGER.info(f"---新建并发布的抽奖活动ID list为{lotteryActIDList}")
else:
lotteryActIDList = Txt().read_txt("04_CreateLottreyActID.txt")
LOGGER.info(f"---新建并发布的抽奖活动ID list为{lotteryActIDList}")
if requestType_c == "DELETE" or caseModule_c == "编辑抽奖活动状态":
# 编辑抽奖活动状态、删除抽奖活动
for i in range(len(lotteryActIDList)):
lotteryId = lotteryActIDList[i]
if lotteryId not in [None, '']:
api_url = api_env[ProCfgData['ExecutionEnv']] + ManagementPlatformApi_zh[caseModule_c] # 请求地址
last_api_url = api_url.replace("{LotteryActID}", str(lotteryId))
LOGGER.info(f"---请求接口为:{last_api_url}")
payload_c = json.dumps(eval(data['Payload']), indent=4, ensure_ascii=False) # 请求体为json格式
LOGGER.info(f"---请求体为:{payload_c}\n")
time.sleep(0.5)
response = requests.request(method=requestType_c, url=last_api_url, headers=HEADERS, data=payload_c)
rspJson = response.json()
LOGGER.info(f"---接口返回状态码为:: {response.status_code}")
LOGGER.info(f"---接口返回体为:: {json.dumps(response.json(), indent=4, ensure_ascii=False)}\n")
else:
# 编辑抽奖活动、复制抽奖活动
lotteryId = lotteryActIDList[0]
if lotteryId not in [None, '']:
api_url = api_env[ProCfgData['ExecutionEnv']] + ManagementPlatformApi_zh[caseModule_c] # 请求地址
last_api_url = api_url.replace("{LotteryActID}", str(lotteryId))
LOGGER.info(f"---请求接口为:{last_api_url}")
payload_c = json.dumps(eval(data['Payload']), indent=4, ensure_ascii=False) # 请求体为json格式
LOGGER.info(f"---请求体为:{payload_c}\n")
response = requests.request(method=requestType_c, url=last_api_url, headers=HEADERS, data=payload_c)
rspJson = response.json()
rspJsonFormat = json.dumps(response.json(), indent=4, ensure_ascii=False)
LOGGER.info(f"---接口返回状态码为:: {response.status_code}")
LOGGER.info(f"---接口返回体为:: {rspJsonFormat}\n")
''' step03- 断言处理 '''
assert _assert_result(rspJson, expRespJson_c, LOGGER) == True, AssertionError(f"---断言失败!")
LOGGER.info(f">>> {caseModule_c}接口请求 & 断言执行结束 <<<\n\n")
if __name__ == '__main__':
unittest.main(verbosity=2)