#-*-coding:utf-8  -*-
__testauthor__ = "huangchengcheng"
__time__ = "2021/5/20 9:47"

import os
import allure
import config
import pytest
import xlrd
from common.tools import request_main
from common.utils import getExcelData



@allure.feature("首页基础功能")
class TestHomebasic:
    workbook=xlrd.open_workbook(f'{config.BaseConfig.root_path}/test_case_data/bmc/bmc_home_basic_functions_2021513.xlsx')

    def setup_class(self):
        config.BMCConfig.headers["Pvt-Token"] = getattr(config.BMCConfig, "bmc_pvt_token")
        config.BMCConfig.headers["Token"] = getattr(config.BMCConfig, "bmc_token")
        self.headers = config.BMCConfig.headers


    @allure.story("获取开通城市列表")
    @allure.link("")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","SwitchList"))
    def test_switchList(self,indata):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        data=indata["reqData"]
        expectdata=indata["expectData"]
        self.res=request_main(url,self.headers,method,data)
        try:
            assert self.res["code"]==expectdata["code"]
            assert self.res["success"]==expectdata["success"]
        except Exception as e:
            raise e


    @allure.story("城市切换保存")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","Switchchange"))
    def test_switchchang(self,indata):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        data=indata["reqData"]
        expectdata=indata["expectData"]
        self.res=request_main(url=url,data=data,method=method,headers=self.headers)
        try:
            assert self.res["code"]==expectdata["code"]
        except Exception as e:
            raise e


    @allure.story("获取资讯分类")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","Newsclassify"))
    def test_Newsclassify(self,indata):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        data=indata["reqData"]
        expectdata=indata["expectData"]
        self.res=request_main(url=url,data=data,method=method,headers=self.headers)
        try:
            assert self.res["code"]==expectdata["code"]
        except Exception as e:
            raise e

    @allure.story("文章banner列表")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","Newsgetbanner"))
    def test_newsgetbanner(self,indata):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        expectdata=indata["expectData"]
        data=indata["reqData"]
        self.res=request_main(url=url,method=method,data=data,headers=self.headers)
        try:
            assert self.res["code"]==expectdata["code"]
        except Exception as e:
            raise e


    @allure.story("获取资讯列表")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","Newsgetlist"))
    def test_newsgetlist(self,indata):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        expectdata=indata["expectData"]
        data=indata["reqData"]
        self.res=request_main(url=url,method=method,data=data,headers=self.headers)
        try:
            assert self.res["code"]==expectdata["code"]
        except Exception as e:
            raise e

    @pytest.fixture(scope='function')
    def newsgetlist(self):
        url = f'{config.BMCConfig.host}/news/categoryItems'
        method = "get"
        data = {"categoryId":"1","page":"1","size":"20"}
        res=request_main(url,self.headers,method,data,)
        return res



    @allure.story("获得文章详情")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","Newsdetail"))
    def test_newsdetail(self,indata,newsgetlist):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        expectdata=indata["expectData"]
        try:
            newlist=newsgetlist["data"]["list"]
            if newlist==[]:
                pytest.skip("没有文章,无法获取文章详情")
            else:
                if len(indata["reqData"]["id"])==0:
                    data = indata["reqData"]
                else:
                    indata["reqData"]["id"]=newlist[0]["id"]
                    data=indata["reqData"]
        except Exception as e:
            raise e
        self.res=request_main(url=url,method=method,data=data,headers=self.headers)
        try:
            assert self.res["code"]==expectdata["code"]
        except Exception as e:
            raise e



    @allure.story("资讯列表搜索")
    @allure.description("creator:liaohui,autoCreator:huangchengcheng")
    @allure.title("{indata[testPoint]}")
    @pytest.mark.parametrize("indata",getExcelData.get_excelData(workbook,"首页基础功能","Newssearch"))
    def test_newssearch(self,indata):
        url=f'{config.BMCConfig.host}/{indata["url"]}'
        method=indata["method"]
        expectdata=indata["expectData"]
        data=indata["reqData"]
        self.res=request_main(url=url,method=method,data=data,headers=self.headers)
        try:
            assert self.res["code"]==expectdata["code"]
        except Exception as e:
            raise e

    def teardown(self):
        allure.attach(f'{self.res}','相应结果',allure.attachment_type.TEXT)


# if __name__ == '__main__':
#
#     # 生成报告数据
#     pytest.main(['-v', '-s', "test_homebasic.py", '--alluredir', './bmc/report',"--clean-alluredir"])
#     # pytest.main(['-v', '-s', "test_homebasic.py::TestHomebasic::test_newsdetail", '--alluredir', './bmc/report', "--clean-alluredir"])
#     # 打开报告
#     os.system('allure serve ./bmc/report')