mock返回最好分开写/关于api取数据(结构多层的情况)/

  @staticmethod
    def __get_dx_cmp_no_dx_time_info():
        cmp_info = {
            "requestId": "ff937c2e-ceec-4ea1-a8cb-f1d47d7302aa",
            "code": 0,
            "message": "success",
            "data": {
                "companyName": "北京龙盛源小额贷款有限公司",
                "province": "bj",

                "basicList": [
                    {
                        "enterpriseName": "北京龙盛源小额贷款有限公司",
                        "esDate": "2009-12-11",
                        "openFrom": "2009-12-11",
                        "openTo": "",
                        "enterpriseStatus": "吊销",
                        "cancelDate": "",
                        "revokeDate": "",
                        "address": "北京市房山区良乡长虹东路2号1号楼一层、二层",
                        "abuItem": "",
                        "cbuItem": "",
                        "industryCode": "6639",
                        "industryName": "金融业",
                        "recCap": "",
                        "auditDate": "2018-01-18"
                    }
                ],
                "alterList": [
                    {
                        "altDate": "2016-04-26",
                        "altItem": "董事(理事)、经理、监事"
                    },
                    {
                        "altDate": "2015-11-18",
                        "altItem": "投资人"
                    },
                    {
                        "altDate": "2014-11-17",
                        "altItem": "股东改变姓名或名称"

                    },
                    {
                        "altDate": "2014-11-17",
                        "altItem": "投资人"
                    },
                    {
                        "altDate": "2012-07-03",
                        "altItem": "董事(理事)、经理、监事"
                    },
                    {
                        "altDate": "2012-07-03",
                        "altItem": "董事(理事)、经理、监事"
                    },
                    {
                        "altDate": "2011-10-12",
                        "altItem": "注册资本"
                    },
                    {
                        "altDate": "2011-10-12",
                        "altItem": "实收资本(金)"
                    },
                    {
                        "altDate": "2011-10-12",
                        "altItem": "注册资本"
                    },
                    {
                        "altDate": "2010-09-01",
                        "altItem": "住所"
                    },
                    {
                        "altDate": "2010-04-02",
                        "altItem": "住所"
                    }
                ]
            }
        }
        dx_time = {
            "earliestActiveTime": "2017-08-02",
            "latestActiveTime": ""
        }
        return cmp_info, dx_time
 这样写容易出错,最好分开写:
  @staticmethod
    def __get_cmp_info_shi_xin():
        return {
            "requestId": "ff937c2e-ceec-4ea1-a8cb-f1d47d7302aa",
            "code": 0,
            "message": "success",
            "data": {
                "companyName": "北京龙盛源小额贷款有限公司",
                "province": "bj",

                "basicList": [
                    {
                        "enterpriseName": "北京龙盛源小额贷款有限公司",
                        "esDate": "",
                        "openFrom": "",
                        "openTo": "",
                        "enterpriseStatus": "吊销",
                        "cancelDate": "",
                        "revokeDate": "",
                        "address": "北京市房山区良乡长虹东路2号1号楼一层、二层",
                        "abuItem": "",
                        "cbuItem": "",
                        "industryCode": "6639",
                        "industryName": "金融业",
                        "recCap": "",
                        "auditDate": "2018-01-18"
                    }
                ],
                "alterList": [
                    {
                        "altDate": "2016-04-26",
                        "altItem": "董事(理事)、经理、监事"
                    },
                    {
                        "altDate": "2015-11-18",
                        "altItem": "投资人"
                    },
                    {
                        "altDate": "2014-11-17",
                        "altItem": "股东改变姓名或名称"

                    },
                    {
                        "altDate": "2014-11-17",
                        "altItem": "投资人"
                    },
                    {
                        "altDate": "2012-07-03",
                        "altItem": "董事(理事)、经理、监事"
                    },
                    {
                        "altDate": "2012-07-03",
                        "altItem": "董事(理事)、经理、监事"
                    },
                    {
                        "altDate": "2011-10-12",
                        "altItem": "注册资本"
                    },
                    {
                        "altDate": "2011-10-12",
                        "altItem": "实收资本(金)"
                    },
                    {
                        "altDate": "2011-10-12",
                        "altItem": "注册资本"
                    },
                    {
                        "altDate": "2010-09-01",
                        "altItem": "住所"
                    },
                    {
                        "altDate": "2010-04-02",
                        "altItem": "住所"
                    }
                ]
            }
        }

    @staticmethod
    def __get_open_time_shi_xin():
        return {
            "earliestActiveTime": "2015-05-07",
            "latestActiveTime": ""
        }
 备注1:项目中出现过的问题——当直接写返回三个mock值,进入其中一个mock后,其company_name被改写了,并不是原来输入到模型当中额那个值,分开写后就正常了!
 备注2:最好把要用到类写到init里面,而不是放在最外面,这样不容易出现跑测试mock与debug出来的不一样,
 class ShiXinFeaturesDealSvc(object):
    """
    获取特征数据 -- 按时间节点排列
    """

    def __init__(self):
        # 依赖对象
        self.__network_features_time = NetworkFeaturesTime()
        self.featureExtractTimeNodeApiSvc = FeatureExtractTimeNodeApiSvc() 写在类的init初始化方法里面,而不要写在class类的外面!!!只是调用的时候都带上self
 失信特征的提取:
 只获取失信时间以前的特征——1)确定失信时间,2)获取特征;3)将特征写入数据库;
 1)确定失信时间:一个公司有多个失信记录,取最早的失信时间,
 def __get_shixin_end_time(self, company_name):
        """
        获取最后一个点的截止时间
        """
        # 获取返回失信的相关数据
         #通过与时间无关的api调;
        shixin_info = self.feature_extract_api_svc.get_cmp_shixin_api(company_name)
        # 工商信息
        shixin_cmp_data = shixin_info.get(sx_model.DATA_1, {})#这个地方取到的是第一层data里面的数据
        publish_date_list = Stream(shixin_cmp_data).take_path(sx_model.DATA_1, [])  #这个地方sx_model.DATA_1与前面键名字相同,但取到得是第二层data里面的数据; \
                .map(lambda PUBLISHDATE: str(PUBLISHDATE.get('publishDate', ''))[:10]) \
                .get()
        if len(publish_date_list)>0:
            publish_date_list.sort()
            sx_time = publish_date_list[0]
        else :
            sx_time = self.now_time

        sx_cnt = Stream(shixin_cmp_data) \
            .take_path(sx_model.Data.TOTAL, 0) \
            .get()
        sx_label = 0
        if float(sx_cnt) > 0:
            sx_label = 1
        return sx_time,sx_label
 注意:通过api取参数,ShiXinInfoModel as sx_model;
 其中 take_path中sx_model.DATA_1 与 sx_model.Data.DATA 取到的东西一样,其本质都是'data',注意take_path()-take_path(sx_model.Data.TOTAL, 0)函数的理解,第一个参数是路径(可以理解为键值--既可以为单个键,也可以是键列表),第二个参数是如果没有取到则默认为0class ShiXinInfoModel(object):
    '''
    基本信息(收费)    照面信息(注册信息,股东信息,主要人员,分支机构),
    工商变更,企业年报.
    http://192.168.31.157:8200/doku.php?id=huangyu:%E5%B7%A5%E5%95%86:%E6%B4%9E%E6%82%89api
    '''

    DATA_1 = 'data' # 数据源
    class Data(object):  #这样定义一个Data类的原因,可以直接取多个键,比如Data.TOTAL和Data.DATA这样对应两个键:'total','data';而在类里面再定义一个类则是模拟了数据的结构,表明PUBLISHDATE在键'total','data'这个层级结构的里面;
 **疑问:貌似取PUBLISHDATE里面的内容的时候,其根本没有根据逐一取,比如先把外层数据取出来,再取内层里面需要的键值,而是直接用键,不管内层,外层,难道这已经避免了外层不会有这个键,所以就这样取??
 答复:根据前面两处对sx_model.DATA_1的分析,取值的时候用到了内外层的,是逐层取得,这样本才符合逻辑!**

        TOTAL = 'total'
        DATA = 'data'
        class data(object):
            PUBLISHDATE = "publishDate" #公布日期

猜你喜欢

转载自blog.csdn.net/sinat_26566137/article/details/80285128