Example #1
0
 def get_expect_for_db(self):
     if self.db_data and self.db_data[settings.EXPECT_FOR_DB]:
         expect = self.db_data[settings.EXPECT_FOR_DB]
         # 如果有多个参数,比如前面是sql语句,后面是期望这个sql语句返回的结果
         expect_list = expect.split("|")
         expect_list[0] = self.replace_randnum_for_str(expect_list[0])
         db_and_sql = expect_list[0].split(">")
         if len(db_and_sql) == 2:
             db_name = db_and_sql[0]
             sql = db_and_sql[1]
         else:
             db_name = settings.DEV_DB_NAME
             sql = db_and_sql[0]
         # 从设备上把db文件拷贝下来,传过来的需要告知是查询哪张表,如果不传给个默认
         # print(settings.SQLITE_CMD.format(db_name,db_name,settings.win_ip))
         # do_telnet(settings.SQLITE_CMD.format(db_name,db_name,settings.win_ip))
         # 打开数据库连接
         # op_db = OperationDB("sqlite", db_name)
         op_db = OperationDB(settings.DB_TYPE, db_name)
         expect_list[0] = op_db.search_one(sql)
         if len(expect_list) == 2:
             # 如果查不到的就预期空值,比如删除了的
             if expect_list[1] == "None":
                 expect_list[1] = eval(expect_list[1])
             elif "{" in expect_list[1]:
                 if "##" in expect_list[1]:
                     # 如果里面有需要替换的动态变量,才去走替换函数,提高性能,否则每次不管有没有要替换的变量,都要去递归判断每个变量是否需要替换,接口比较多的话会耗时多
                     expect_list[1] = self.replace_randnum(
                         json.loads(expect_list[1]))
                 else:
                     expect_list[1] = json.loads(expect_list[1])
                 if "true" in json.dumps(expect_list[1]):
                     expect_list[1] = self.replace_true(expect_list[1])
         return expect_list
Example #2
0
class RunMain:
    _instance_lock = threading.Lock()

    def __init__(self, data):
        self.data = data
        self.get_field()
        self.op_db = OperationDB()

    def __new__(cls, *args, **kwargs):
        '''
        实现单例模式
        :param args:
        :param kwargs:
        :return:
        '''
        if not hasattr(cls, "_instance"):
            with cls._instance_lock:
                if not hasattr(cls, "_instance"):
                    cls._instance = super().__new__(cls)
        return cls._instance

    def get_field(self):
        dc = DataConfig(self.data)
        self.case_id = dc.get_case_id()
        self.sql_exp = dc.get_sql_exp()
        self.result = dc.get_result()

    def run_main(self):
        r = self.op_db.search_one(self.sql_exp)
        print(
            settings.BEAUTIFUL_REPORT_CONTENT.format(self.case_id,
                                                     self.sql_exp, r))
        self.write_res(r)
        return r

    def write_res(self, res):
        dc = DataConfig(self.data)
        res = json.dumps(res)
        para = (res, self.case_id)
        sql = settings.UPDATE_RESULT_SQL
        dc.write_result(sql, para)
Example #3
0
class DependData:
    def __init__(self, data):
        self.db = OperationDB()
        self.data = data

    def get_request_data(self):
        '''获取当前case的数据'''
        data_config = DataConfig(self.data)
        params = data_config.get_data()
        return params

    def get_case_id(self):
        '''
        获取依赖的case_id,如果有依赖多个case用 | 去分隔
        :return:
        '''
        data_config = DataConfig(self.data)
        case_ids = data_config.get_depend_case_id()
        case_id_list = case_ids.split("|")
        return case_id_list

    def get_line_data(self, depend_case_id):
        '''
        获取数据库里一行数据
        :return:
        '''
        sql = settings.LINE_DATA_SQL
        return depend_case_id and self.db.search_one(sql, depend_case_id)

    def get_field(self, depend_case_id):
        '''
        获取依赖接口的字段
        :return:
        '''
        self.line_data = self.get_line_data(depend_case_id)
        data_config = DataConfig(self.line_data)
        self.url = data_config.get_url()
        self.method = data_config.get_method()
        self.has_cookie = data_config.has_cookie()
        self.header = data_config.get_header()
        self.request_param = data_config.get_param()
        self.request_data = data_config.get_data()
        self.request_file = data_config.get_file()
        self.depend_case_id = data_config.get_depend_case_id()
        self.save_value = data_config.get_save_value()

    def send_depend_request(self, depend_case_id):
        '''
        发送依赖的接口
        :return:
        '''
        sr = SendRequest()
        oc = OperaCookie()
        self.get_field(depend_case_id)
        if self.depend_case_id:
            data_depend = DependData(self.line_data)
            self.request_data = data_depend.replace_request_data()
        if isinstance(self.request_data, dict):
            self.request_data = HandleListOrDict().handle_value(
                self.request_data)
        if self.has_cookie:
            cookie = oc.get_cookie()
            res = sr.send_request(self.method, self.url, self.request_data,
                                  self.request_file, self.request_param,
                                  self.header, cookie)
        else:
            res = sr.send_request(self.method, self.url, self.request_data,
                                  self.request_file, self.request_param,
                                  self.header)
        if self.save_value:
            HandleSaveValue().save_response_data(res.json(), self.save_value)
        print(res.json())
        return res.json()

    def get_response_field(self):
        '''
        获取返回的依赖字段,如果有依赖多个case用 | 去分隔
        :return:
        '''
        data_config = DataConfig(self.data)
        res_fields = data_config.get_depend_response_field()
        # if res_fields:
        res_fields_list = res_fields.split("|")
        return [res_fields.split(";")
                for res_fields in res_fields_list]  # ;用于分隔多个字段

    def get_response_data(self):
        '''
        取出依赖的多个字段
        :return:
        '''
        depend_fields_list = self.get_response_field()
        depend_case_ids = self.get_case_id()
        fields_list = []
        for i, depend_case_id in enumerate(depend_case_ids):
            response_data = self.send_depend_request(depend_case_id)
            fields = []
            #做判空处理,有时依赖多个接口,但并不需要所有接口的字段,用| 但是 | 前面不写内容即可
            if depend_fields_list[i] and depend_fields_list[i] == ['']:
                fields_list.append([''])
            if depend_fields_list[i] and depend_fields_list[i] != ['']:
                for depend_field in depend_fields_list[i]:
                    depend_field = parse(depend_field)
                    madle = depend_field.find(response_data)
                    res = [match.value for match in madle][0]
                    fields.append(res)
                fields_list.append(fields)
        return fields_list

    def get_request_field(self):
        '''
            获取返回的请求字段
            :return:
        '''
        data_config = DataConfig(self.data)
        req_fields = data_config.get_depend_request_field()
        if req_fields:
            req_fields_list = req_fields.split("|")
        return req_fields_list

    def replace_request_data(self):
        response_fields_list = self.get_response_data()
        request_fields_list = self.get_request_field()
        params = self.get_request_data()
        for num, request_fields in enumerate(request_fields_list):
            if request_fields:
                if "{" in request_fields:
                    request_fields = json.loads(request_fields)
                    fields = request_fields["field"].split(";")
                    conn = request_fields["connection"]
                else:
                    fields = request_fields.split(";")
                    conn = None
                for i in range(len(fields)):
                    if conn:
                        params[fields[i]] = conn.join(
                            response_fields_list[num])
                    else:
                        field = fields[i].split(".")
                        params = self.replace_json(
                            params, field, response_fields_list[num][i])
        print("替换后的请求数据:{}".format(str(params)))
        return params

    #替换json中的value,key值传入list
    def replace_json(self, data, key, value):
        if len(key) == 1:
            data[key[0]] = value
        else:
            data[key[0]] = self.replace_json(data[key[0]], key[1:], value)
        return data
Example #4
0
class DataConfig:
    def __init__(self, data):
        self.db_data = data
        self.op_db = OperationDB()
        self.read_i = ReadIni()

    def get_case_id(self):
        return self.db_data and self.db_data[settings.CASE_ID]

    def get_case_name(self):
        return self.db_data and self.db_data[settings.CASE_NAME]

    def get_url(self):
        if self.db_data:
            url = self.db_data[settings.URL]
            base_url = self.read_i.get_value("base_url", "url")
            #如果用例里没写base_url才加上
            if base_url not in url:
                url = base_url + url
        return url

    def get_method(self):
        return self.db_data and self.db_data[settings.METHOD]

    def get_header_info(self):
        if self.db_data and not self.db_data[settings.HEADER_INFO]:
            return settings.URL_ENCODE
        return self.db_data and self.db_data[
            settings.HEADER_INFO] and json.loads(
                self.db_data[settings.HEADER_INFO])

    def is_write(self):
        header_info = self.get_header_info()
        if header_info and settings.IS_WRITE in header_info:
            return header_info[settings.IS_WRITE]
        else:
            return None

    def has_cookie(self):
        header_info = self.get_header_info()
        if header_info and settings.COOKIE in header_info:
            return header_info[settings.COOKIE]
        else:
            return None

    def get_header(self):
        header_info = self.get_header_info()
        if header_info:
            if not (settings.HEADER in header_info or settings.IS_WRITE
                    in header_info or settings.COOKIE in header_info):
                header = header_info
            elif settings.HEADER in header_info:
                header = header_info[settings.HEADER]
            if settings.TOKEN in header:
                ot = OperaToken()
                header[settings.TOKEN] = ot.get_token()
            return header
        else:
            return None

    def get_params(self):
        return self.db_data and self.db_data[settings.PARAMS] and json.loads(
            self.db_data[settings.PARAMS])

    def get_data(self):
        params = self.get_params()
        if params:
            if not (settings.PARAM in params or settings.FILE in params
                    or settings.DATA in params):
                data = params
            elif settings.DATA in params:
                data = params[settings.DATA]
            return data
        else:
            return None

    def get_param(self):
        params = self.get_params()
        if params and settings.PARAM in params:
            return params[settings.PARAM]
        else:
            return None

    def get_file(self):
        params = self.get_params()
        if params and settings.FILE in params:
            return json.dumps(params[settings.FILE])
        else:
            return None

    def get_is_run(self):
        return self.db_data and self.db_data[settings.IS_RUN]

    def get_depend_case_id(self):
        return self.db_data and self.db_data[settings.DEPEND_CASE_ID]

    def get_depend_request_field(self):
        return self.db_data and self.db_data[settings.DEPEND_REQUEST_FIELD]

    def get_depend_response_field(self):
        return self.db_data and self.db_data[settings.DEPEND_RESPONSE_FIELD]

    def get_post_action(self):
        if self.db_data:
            post_action = self.db_data[settings.POST_ACTION]
            if post_action:
                post_action_list = post_action.split("|")
                # for i,post_action in post_action_list:
                #     if "case_id" in post_action:
                #         post_action_list[i] = post_action.split("case_id=")[1]
            return post_action_list
        return None

    def get_post_params(self):
        if self.db_data:
            post_params = self.db_data[settings.POST_PARAMS]
            if post_params:
                post_params_list = post_params.split("|")
                for i, post_params in enumerate(post_params_list):
                    if "{" in post_params:
                        if "##" in post_params:
                            post_params_list[i] = self.replace_rand_param(
                                json.loads(post_params))
                        else:
                            post_params_list[i] = json.loads(post_params)
                return post_params_list
        return None

    def replace_rand_param(self):
        pass

    def get_expext(self):
        return self.db_data and self.db_data[settings.EXPECT]

    def get_expect_for_db(self):
        expect = self.get_expext()
        if expect and "{" in expect:
            expect = json.loads(expect)
            if settings.EXPECT_SQL in expect:
                sql = expect[settings.EXPECT_SQL]
                expect = self.op_db.search_one(sql)
        return expect

    def get_result(self):
        return self.db_data and self.db_data[settings.RESULT]

    def write_result(self, sql, param):
        self.op_db.sql_DML(sql, param)
Example #5
0
    def replace_rand_param(self):
        pass

    def get_expext(self):
        return self.db_data and self.db_data[settings.EXPECT]

    def get_expect_for_db(self):
        expect = self.get_expext()
        if expect and "{" in expect:
            expect = json.loads(expect)
            if settings.EXPECT_SQL in expect:
                sql = expect[settings.EXPECT_SQL]
                expect = self.op_db.search_one(sql)
        return expect

    def get_result(self):
        return self.db_data and self.db_data[settings.RESULT]

    def write_result(self, sql, param):
        self.op_db.sql_DML(sql, param)


if __name__ == "__main__":
    db = OperationDB()
    sql = "select * from cases where case_id=%s"
    pa = ("qingguo_001", )
    data = db.search_one(sql, pa)
    d = DataConfig(data)
    r = d.get_header()
    print(r, type(r))
Example #6
0
class PostAct:
    def __init__(self, post_action, post_params, depend_case_id, url):
        self.db = OperationDB()
        self.url = url
        self.post_action = post_action
        self.post_params = post_params
        self.depend_case_id = depend_case_id

    def change_base_url(self, host=None):
        #如果没有传host,则从第一个用例里用正则表达式去匹配host,否则就直接用传入的host
        if not host:
            r = re.search(settings.URL_RE, self.url)
            host = r[0]
        #将host记录到ini文件中,方便后续接口使用
        read_i = ReadIni()
        read_i.write_data("base_url", host, "url")

    def handle_post_action(self):
        if self.post_action:
            for i, post_act in enumerate(self.post_action):
                #参数对应顺序传,否则我不知道你想传给谁
                if "case_id" in post_act:
                    case_id = post_act.split("case_id=")[1]
                    self.send(case_id, post_param[i])
                else:
                    func = getattr(self, post_act)
                    func(post_param[i])
        #给依赖的接口所做的操作做清理
        if self.depend_case_id:
            data = self.get_line_data(depend_case_id)
            self.get_request_data(data)
            #由依赖的接口产生对象去递归调用,这里虽然叫clear什么的,但是此时他是依赖的数据了,并不是清理的
            post_act_obj = PostAct(self.clear_post_action,
                                   self.clear_post_params, self.depend_case_id,
                                   self.url)
            post_act_obj.handle_post_action()

    def get_line_data(self, case_id):
        '''
        获取数据库里一行数据
        :return:
        '''
        sql = settings.LINE_DATA_SQL
        return case_id and self.db.search_one(sql, case_id)

    def send(self, case_id, post_param):
        sr = SendRequest()
        clear_interface_data = self.get_line_data(case_id)
        self.get_request_data(clear_interface_data)
        #防止递归的时候,依赖的数据的清理动作调用的就是自身,而其实自身已经相当于做了数据清理了
        if self.url != self.clear_url:
            sr.send_request(method=self.clear_method,
                            url=self.clear_url,
                            data=post_param,
                            header=self.clear_header)

    def get_request_data(self, clear_interface_data):
        '''获取当前case的数据'''
        data_config = DataConfig(clear_interface_data)
        self.clear_url = data_config.get_url()
        self.clear_method = data_config.get_method()
        self.clear_header = data_config.get_header()
        self.clear_post_action = data_config.get_post_action()
        self.clear_post_params = data_config.get_post_params()
        self.depend_case_id = data_config.get_depend_case_id()
Example #7
0
 def get_verify_code(self, key):
     redis_db = OperationDB("redis")
     code = redis_db.search_one(key)
     read_i = ReadIni()
     code = json.loads(code).get("code")
     read_i.write_data(key.split(":")[0], code)
Example #8
0
class PostAct:
    def __init__(self, post_action, post_params, depend_case_id, url):
        self.db = OperationDB()
        self.url = url
        self.post_action = post_action
        self.post_params = post_params
        self.depend_case_id = depend_case_id
        self.logger = get_logger()

    def change_base_url(self, host=None):
        #如果没有传host,则从第一个用例里用正则表达式去匹配host,否则就直接用传入的host
        if not host:
            r = re.search(settings.URL_RE, self.url)
            host = r[0]
            self.logger.info(
                "没有传host,从第一个用例里用正则表达式去匹配host,匹配结果是{}".format(host))
        #将host记录到ini文件中,方便后续接口使用
        read_i = ReadIni()
        read_i.write_data("base_url", host, "url")
        self.logger.info("将host记录到ini文件中,方便后续接口使用")

    def get_verify_code(self, key):
        redis_db = OperationDB("redis")
        code = redis_db.search_one(key)
        read_i = ReadIni()
        code = json.loads(code).get("code")
        read_i.write_data(key.split(":")[0], code)

    def handle_post_action(self):
        if self.post_action:
            for i, post_act in enumerate(self.post_action):
                #参数对应顺序传,否则我不知道你想传给谁
                if "case_id" in post_act:
                    case_id = post_act.split("case_id=")[1]
                    if self.post_params:
                        self.send(case_id, self.post_params[i])
                    else:
                        self.send(case_id)
                else:
                    func = getattr(self, post_act)
                    if self.post_params and len(self.post_action) == len(
                            self.post_params):
                        func(self.post_params[i])
                    else:
                        func()
            self.logger.info("给当前接口做数据清理")
        #给依赖的接口所做的操作做清理
        if self.depend_case_id:
            depend_case_id_list = self.depend_case_id.split("|")
            for depend_case_id in depend_case_id_list:
                data = self.get_line_data(depend_case_id)
                self.get_request_data(data)
                #由依赖的接口产生对象去递归调用,这里虽然叫clear什么的,但是此时他是依赖的数据了,并不是清理的
                post_act_obj = PostAct(self.clear_post_action,
                                       self.clear_post_params,
                                       self.clear_depend_case_id, self.url)
                post_act_obj.handle_post_action()
            self.logger.info("给依赖接口做数据清理")

    def get_line_data(self, case_id):
        '''
        获取数据库里一行数据
        :return:
        '''
        sql = settings.LINE_DATA_SQL
        return case_id and self.db.search_one(sql, case_id)

    def send(self, case_id, post_param=None):
        sr = SendRequest()
        clear_interface_data = self.get_line_data(case_id)
        self.get_request_data(clear_interface_data)
        if isinstance(post_param, dict):
            post_param = HandleListOrDict().handle_value(post_param)
        #防止递归的时候,依赖的数据的清理动作调用的就是自身,而其实自身已经相当于做了数据清理了
        # if self.url != self.clear_url:
        sr.send_request(method=self.clear_method,
                        url=self.clear_url,
                        data=post_param,
                        header=self.clear_header)

    def get_request_data(self, clear_interface_data):
        '''获取当前case的数据'''
        data_config = DataConfig(clear_interface_data)
        self.clear_url = data_config.get_url()
        self.clear_method = data_config.get_method()
        self.clear_header = data_config.get_header()
        self.clear_post_action = data_config.get_post_action()
        self.clear_post_params = data_config.get_post_params()
        self.clear_depend_case_id = data_config.get_depend_case_id()
Example #9
0
class DependData:
    def __init__(self,data):
        self.db = OperationDB()
        self.data = data

    def get_request_data(self):
        data_config = DataConfig(self.data)
        params = data_config.get_data()
        return params

    def get_case_id(self):
        '''
        获取依赖的case_id
        :return:
        '''
        data_config = DataConfig(self.data)
        return data_config.get_depend_case_id()

    def get_line_data(self):
        '''
        获取数据库里一行数据
        :return:
        '''
        depend_case_id = self.get_case_id()
        sql = settings.LINE_DATA_SQL
        return depend_case_id and self.db.search_one(sql,depend_case_id)

    def get_field(self):
        '''
        获取依赖接口的字段
        :return:
        '''
        line_data = self.get_line_data()
        data_config = DataConfig(line_data)
        self.url = data_config.get_url()
        self.method = data_config.get_method()
        self.has_cookie = data_config.has_cookie()
        self.header = data_config.get_header()
        self.request_data = data_config.get_params()

    def send_depend_request(self):
        '''
        发送依赖的接口
        :return:
        '''
        sr = SendRequest()
        oc = OperaCookie()
        self.get_field()
        if self.has_cookie:
            cookie = oc.get_cookie()
            res = sr.send_request(self.method, self.url, self.request_data, self.header, cookie)
        else:
            res = sr.send_request(self.method, self.url, self.request_data, self.header)
        return res.json()

    def get_response_field(self):
        '''
        获取返回的依赖字段
        :return:
        '''
        data_config = DataConfig(self.data)
        res_fields = data_config.get_depend_response_field()
        return res_fields and res_fields.split(";")

    def get_response_data(self):
        '''
        取出依赖的多个字段
        :return:
        '''
        response_data= self.send_depend_request()
        depend_fields = self.get_response_field()
        fields = []
        if depend_fields:
            for depend_field in depend_fields:
                depend_field = parse(depend_field)
                madle = depend_field.find(response_data)
                res = [match.value for match in madle][0]
                fields.append(res)
        return fields

    def get_request_field(self):
        '''
            获取返回的请求字段
            :return:
        '''
        data_config = DataConfig(self.data)
        req_fields = data_config.get_depend_request_field()
        return json.loads(req_fields)

    def replace_request_data(self):
        response_fields = self.get_response_data()
        request_fields = self.get_request_field()
        params = self.get_request_data()
        if request_fields:
            fields = request_fields["field"]
            conn = request_fields["connection"]
            if conn:
                params[fields] = conn.join(response_fields)
            else:
                for i in range(len(fields)):
                    params[fields[i]] = response_fields[i]
        return params

    def handle_depend_data(self):
        if self.get_case_id():
            params = self.replace_request_data()
            return params and json.dumps(params)
        else:
            params = self.get_request_data()
            return params and json.dumps(params)
Example #10
0
class DependData:
    def __init__(self, data):
        self.db = OperationDB()
        self.data = data

    def get_request_data(self):
        '''获取当前case的数据'''
        data_config = DataConfig(self.data)
        params = data_config.get_data()
        return params

    def get_case_id(self):
        '''
        获取依赖的case_id,如果有依赖多个case用 | 去分隔
        :return:
        '''
        data_config = DataConfig(self.data)
        case_ids = data_config.get_depend_case_id()
        case_id_list = case_ids.split("|")
        return case_id_list

    def get_line_data(self, depend_case_id):
        '''
        获取数据库里一行数据
        :return:
        '''
        sql = settings.LINE_DATA_SQL
        return depend_case_id and self.db.search_one(sql, depend_case_id)

    def get_field(self, depend_case_id):
        '''
        获取依赖接口的字段
        :return:
        '''
        self.line_data = self.get_line_data(depend_case_id)
        data_config = DataConfig(self.line_data)
        self.url = data_config.get_url()
        self.method = data_config.get_method()
        self.has_cookie = data_config.has_cookie()
        self.header = data_config.get_header()
        self.request_param = data_config.get_param()
        self.request_data = data_config.get_data()
        self.request_file = data_config.get_file()
        self.depend_case_id = data_config.get_depend_case_id()
        self.post_action = data_config.get_post_action()
        self.post_params = data_config.get_post_params()

    def send_depend_request(self, depend_case_id):
        '''
        发送依赖的接口
        :return:
        '''
        sr = SendRequest()
        oc = OperaCookie()
        self.get_field(depend_case_id)
        if self.depend_case_id:
            data_depend = DependData(self.line_data)
            self.request_data = data_depend.replace_request_data()
        if self.has_cookie:
            cookie = oc.get_cookie()
            res = sr.send_request(self.method, self.url, self.request_data,
                                  self.request_file, self.request_param,
                                  self.header, cookie)
        else:
            res = sr.send_request(self.method, self.url, self.request_data,
                                  self.request_file, self.request_param,
                                  self.header)
        return res.json()

    def get_response_field(self):
        '''
        获取返回的依赖字段,如果有依赖多个case用 | 去分隔
        :return:
        '''
        data_config = DataConfig(self.data)
        res_fields = data_config.get_depend_response_field()
        if res_fields:
            res_fields_list = res_fields.split("|")
        return [res_fields.split(";")
                for res_fields in res_fields_list]  # ;用于分隔多个字段

    def get_response_data(self):
        '''
        取出依赖的多个字段
        :return:
        '''
        depend_fields_list = self.get_response_field()
        depend_case_ids = self.get_case_id()
        fields_list = []
        for i, depend_case_id in enumerate(depend_case_ids):
            response_data = self.send_depend_request(depend_case_id)
            fields = []
            if depend_fields_list[i]:
                for depend_field in depend_fields_list[i]:
                    depend_field = parse(depend_field)
                    madle = depend_field.find(response_data)
                    res = [match.value for match in madle][0]
                    fields.append(res)
                fields_list.append(fields)
        return fields_list

    def get_request_field(self):
        '''
            获取返回的请求字段
            :return:
        '''
        data_config = DataConfig(self.data)
        req_fields = data_config.get_depend_request_field()
        if req_fields:
            req_fields_list = req_fields.split("|")
        return [json.loads(req_fields) for req_fields in req_fields_list]

    def replace_request_data(self):
        response_fields_list = self.get_response_data()
        request_fields_list = self.get_request_field()
        params = self.get_request_data()
        for num, request_fields in enumerate(request_fields_list):
            if request_fields:
                fields = request_fields["field"].split(";")
                conn = request_fields["connection"]
                for i in range(len(fields)):
                    if conn:
                        params[fields[i]] = conn.join(
                            response_fields_list[num])
                    #params[fields[i]] = response_fields_list[num][i]  #fields是参数的数组,需要与返回参数的数组顺序一致
                    else:
                        field = fields[i].split(".")
                        params = self.replace_json(
                            params, field, response_fields_list[num][i])
        return params

    #替换json中的value,key值传入list
    def replace_json(self, data, key, value):
        if len(key) == 1:
            data[key[0]] = value
        else:
            data[key[0]] = self.replace_json(data[key[0]], key[1:], value)
        return data

    def post_act(self, case_id, post_prams):
        if self.case_id:
            #获取要帮助清理的case的数据
            self.get_field(case_id)
            #把数据替换成我们要清理的data数据
            self.request_data = post_prams
            sr = SendRequest()
            sr.send_request(self.method, self.url, self.request_data,
                            self.request_file, self.request_param, self.header)
        while (self.depend_case_id):
            data_depend = DependData(self.line_data)
            if data_depend.post_action and self.url != data_depend.post_action:
                func = getattr(data_depend, )