Arthur-Wu committed this file on 2024-11-15

This commit is contained in:
ieemoo
2024-11-15 17:35:57 +08:00
parent c871e12b16
commit 298268c133
20 changed files with 595 additions and 18 deletions

View File

@ -0,0 +1,112 @@
# !/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)