__author__ = 'fanxun' __data__ = "2021-05-18 14:41" import allure, xlrd, pytest, os from config import BMCConfig,BaseConfig from common.utils.getExcelData import get_excelData from common.tools import request_main from common.db import MYSQL from service.login import BMC import requests @allure.feature("出行服务") class TestVehicleSteward(): def setup_class(self): # def test_setup_class(self): """链接数据库""" # 出行服务 self.ms = MYSQL('10.197.236.190', 3306, 'root', '123456', 'edl_public') # 获取账号的userId -- 目前已经在excel中写死为 17822000000 账号的userId resList = self.ms.ExecuQuery('SELECT * FROM edl_public.user where phone=17822000000;') self.user_id = resList[0]['id'] workBook = xlrd.open_workbook(f'{BMCConfig.root_path}/test_case_data/bmc/bmc_vehicle_steward_29_39_20210513.xlsx') # 更改自动记账状态 gasLog = '' trafficFine = '' @pytest.fixture() def test_pre_info(self): """首页套件""" url = f"{BMCConfig().host}/vehicle/steward/index/info" method = 'get' req_data = None headers = None res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) return res @pytest.fixture() def test_pre_custody(self): """开启授权""" method = 'post' req_data = {"plateType": "02","plateNum": "贵ARR008"} headers = None url = f"{BMCConfig().host}/vehicle/steward/authorization/agree" res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) @allure.story("获取用户授权") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/75421") @allure.description("/vehicle/steward/authorization/authorizationOfUse") @allure.title("{inData[testPoint]}") @pytest.mark.run('first') @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'authorizationOfUsevehiclesteward')) def test_authorization_of_use_vehicle_steward(self, inData, test_pre_info, test_pre_custody): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] try: is_auth = test_pre_info['data']['auth'] except Exception as e: res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") setattr(TestVehicleSteward, 'gasLog', res['data']['gasLog']) setattr(TestVehicleSteward, 'trafficFine', res['data']['trafficFine']) assert res['code'] == expectData['code'] else: # 开启授权 test_pre_custody @allure.story("更改自动记账") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/75191") @allure.description("/vehicle/steward/authorization/update") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'gasvehiclesteward')) def test_gas_vehicle_steward(self, inData, test_pre_info): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] # 查询账号对应的id resList = self.ms.ExecuQuery(f'SELECT * FROM edl_public.vehicle_steward_authorization where user_id={self.user_id};') id = resList[0]['id'] req_data['id'] = id try: is_auth = test_pre_info['data']['auth'] except Exception as e: if not self.gasLog : req_data['gasLog'] = True res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) elif self.gasLog: req_data['gasLog'] = False res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] else: pytest.skip(msg="未开启授权,跳过此用例") @allure.story("车辆列表") @allure.link("") @allure.description("/pvtapi/vehicle/manage/list") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'listvehiclesteward')) def test_list_vehicle_steward(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("更改自动记账") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/75191") @allure.description("/vehicle/steward/authorization/update") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'trafficFinevehiclesteward')) def test_traffic_fine_vehicle_steward(self, inData, test_pre_info): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] # 查询账号对应的id resList = self.ms.ExecuQuery(f'SELECT * FROM edl_public.vehicle_steward_authorization where user_id={self.user_id};') id = resList[0]['id'] req_data['id'] = id try: is_auth = test_pre_info['data']['auth'] except Exception as e: if not self.gasLog : req_data['trafficFine'] = True res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) elif self.gasLog: req_data['trafficFine'] = False res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] else: pytest.skip(msg="未开启授权,跳过此用例") @allure.story("自动记账") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74446") @allure.description("/vehicle/steward/accounts/autoSyncAccounts") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'autoSyncAccountsvehiclesteward')) def test_auto_sync_count_vehicle_steward(self, inData, test_pre_info): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] try: is_auth = test_pre_info['data']['auth'] except Exception as e: res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] else: pytest.skip(msg="未开启授权,跳过此用例") @allure.story("更新获取新费用") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/75456") @allure.description("/vehicle/steward/index/updateLastTime") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'updateLastTimevehiclesteward')) def test_update_last_time_vehicle_steward(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("自动记账授权") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74441") @allure.description("") @allure.title("{inData[testPoint]}") @pytest.mark.run('last') @pytest.mark.flaky(reruns=2) @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'agreedisagreevehiclesteward')) def test_custody_vehicle_steward(self, inData, test_pre_info): method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] headers = inData['headers'] try: is_auth = test_pre_info['data']['auth'] automatic = test_pre_info['data']['automatic'] if automatic: url = f"{BMCConfig().host}/vehicle/steward/authorization/disagree" else: url = f"{BMCConfig().host}/vehicle/steward/authorization/agree" res = request_main(url=url, headers=headers, method=method, data=req_data, has_token=False) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] except Exception as e: # 清除记录 重新执行此用例 self.ms.ExecuQuery( f'delete from edl_public.vehicle_steward_authorization where user_id={self.user_id};') @allure.feature("出行服务") class TestViolationWarn(): workBook = xlrd.open_workbook(f'{BMCConfig.root_path}/test_case_data/bmc/bmc_vehicle_steward_40-58_20210513.xlsx') def setup_class(self): Headers={'City-Code': "520100", 'Device-Brand': "vivo", 'Device-Code': "000000001e167ed7000000001e167ed7", 'Device-Model': "vivo vivo X20", 'Device-Name': "vivo+X20", 'Device-Type': "Android", 'Mac': "38:6E:A2:A0:0E:AF", 'mimeType': "application/json", 'Net': "wifi", 'OS-Type': "Android", 'OS-Version': "27", 'Resolution': "2034x1080", 'Version': "2.2.6", 'Pvt-Token': "", 'Token': "", } self.headers1 = Headers indata = {"phone": "13688468803", "encodedGesture": "d4a68e08430ac8bd3bd497d95cbfa5de"} res = BMC().bmc_login(indata) self.headers1['Pvt-Token'] = res[1] self.headers1['Token'] = res[0] self.headers2 = Headers indata = {"phone": "15283936302", "encodedGesture": "67e6d10010533eed4bbe9659863bf6ee"} #public user res = BMC().bmc_login(indata) self.headers2['Pvt-Token'] = res[1] self.headers2['Token'] = res[0] self.headers3 = Headers indata = {"phone": "19900000001", "encodedGesture": "67e6d10010533eed4bbe9659863bf6ee"} # public user res = BMC().bmc_login(indata) self.headers3['Pvt-Token'] = res[1] self.headers3['Token'] = res[0] self.headers4 = Headers indata = {"phone": "18311111111", "encodedGesture": "67e6d10010533eed4bbe9659863bf6ee"} # public user res = BMC().bmc_login(indata) self.headers4['Pvt-Token'] = res[1] self.headers4['Token'] = res[0] @allure.story("违法提醒首页") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55122") @allure.description("/violationWarn/vioInfo/round") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'vioInfoRound')) def test_vioInfoRound(self, inData): url = f"{BMCConfig().pvthost}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers1, method, req_data,has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("违法提醒首页") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55122") @allure.description("/violationWarn/vioInfo/round") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'BvioInfoRound')) def test_BvioInfoRound(self, inData): url = f"{BMCConfig().pvthost}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers2, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("违法提醒首页") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55122") @allure.description("/violationWarn/vioInfo/round") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'CvioInfoRound')) def test_BvioInfoRound(self, inData): url = f"{BMCConfig().pvthost}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers3, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("违法类型") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55104", name='点我看接口文档') @allure.description("/violationWarn/vioType/list") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'vioTypeList')) def test_vioTypeList(self, inData): url = f"{BMCConfig().pvthost}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers1, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("违法点详情") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55266", name='点我看接口文档') @allure.description("/violationWarn/vioPoint/vehicle/list") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'vioPointVehicleList')) def test_vioPointVehicleList(self, inData): url = f"{BMCConfig().pvthost}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers1, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("违法通知") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55338", name='点我看接口文档') @allure.description("/violationWarn/getSwitch") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'violationWarn')) def test_vioPointVehicleList(self, inData): url = f"{BMCConfig().pvthost}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers1, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("违法提醒去添加车辆") @allure.link("http://yapi.hikcreate.com/project/32/interface/api/55122") @allure.description("/violationWarn/vioInfo/round") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'eventData')) def test_BvioInfoRound(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers3, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_首页信息") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74426") @allure.description("/vehicle/steward/index/info") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'stewardIndexInfo')) def test_stewardIndexInfo(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers3, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_费用类型") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74431") @allure.description("/vehicle/steward/index/expenseType") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'stewardIndexExpenseType')) def test_stewardIndexExpenseType(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers3, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_广告") @allure.link("http://yapi.hikcreate.com") @allure.description("/banner/list") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'bannerList')) def test_bannerList(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers3, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_车辆信息") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/75256") @allure.description("/vehicle/steward/vehicle/vehicleOfUser") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'vehicleOfUser')) def test_vehicleOfUser(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers3, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_完善车辆信息") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74471") @allure.description("/vehicle/steward/vehicle/add") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'stewardvehicleAdd')) def test_stewardvehicleAdd(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_手动记账") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74451") @allure.description("/vehicle/steward/accounts/manualBookkeeping") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'manualBookkeeping')) def test_manualBookkeeping(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_记账明细") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/75086") @allure.description("/vehicle/steward/vehicle/accountingStatistics") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'accountingStatistics')) def test_accountingStatistics(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("车管家_删除记账明细") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74571") @allure.description("/vehicle/steward/accounts/delete") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'accountsDelete')) def test_accountsDelete(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """处理""" req_data["id"]=int(req_data["id"]) """请求""" res =requests.post(url,data=req_data,headers=self.headers4) # res = request_main(url, self.headers4, method, req_data, has_token=True) # 此接口的content—type实际要用表单才行,所以不用这个 allure.attach("{0}".format(res.json()), "用例结果") assert res.json()['code'] == expectData['code'] @allure.story("车管家_更新记账明细") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/74461") @allure.description("/vehicle/steward/accounts/update") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'accountsUpdate')) def test_accountsUpdate(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("油耗记录概况") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/78636") @allure.description("/vehicle/steward/petrol/consumption/summarise") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'consumptionSummarise')) def test_consumptionSummarise(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("油耗记录列表") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/78646") @allure.description("/vehicle/steward/petrol/consumption/list") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'consumptionList')) def test_consumptionList(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("油耗记录详情") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/78640") @allure.description("/vehicle/steward/petrol/consumption/detail") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'consumptionDetail')) def test_consumptionDetail(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] @allure.story("删除油耗记录") @allure.link("http://yapi.hikcreate.com/project/31/interface/api/78642") @allure.description("/vehicle/steward/petrol/consumption/delete") @allure.title("{inData[testPoint]}") @pytest.mark.parametrize("inData", get_excelData(workBook, '出行服务', 'consumptionDelete')) def test_consumptionDelete(self, inData): url = f"{BMCConfig().host}{inData['url']}" method = inData['method'] req_data = inData['reqData'] expectData = inData['expectData'] """请求""" res = request_main(url, self.headers4, method, req_data, has_token=True) allure.attach("{0}".format(res), "用例结果") assert res['code'] == expectData['code'] if __name__ == '__main__': pytest.main(['-s', '-v', 'test_vehicle_steward.py', r'--alluredir=D:\项目\接口自动化\InterfaceAutoTest\report' , '--clean-alluredir']) os.system('allure serve D:\项目\接口自动化\InterfaceAutoTest\\report')