Пример #1
0
def request_api(username, pwd, uri, body, send_method='POST'):
    '''
    HTTP请求API
    :param username: 用户名
    :param pwd: 密码
    :param send_method:请求方法
    :param uri: 接口地址
    :param body: 请求报文
    :return:
    '''
    # 登录
    # body = json.loads(body, encoding='utf-8')
    lg = Login(username, pwd)
    access_token, req = lg.login()
    defaultLoc, defaultIns = lg.get_default_setting(req, access_token)
    headers = {
        "Authorization": 'Bearer ' + access_token,
        "k2": defaultLoc,
        "k1": defaultIns
    }
    # 发送接口请求
    url = URL_INFO['TEST']['url'] + uri
    if send_method == 'POST':
        rst = req.send_post(url, data=body, headers=headers)
    else:
        rst = req.send_get(url, data=body, headers=headers)
    return rst
Пример #2
0
def submit_data_and_verify(username, pwd, uri, body, expected_rst, sql_path, yml_path, send_method, **params):
    '''
    提交数据请求后,验证数据库结果
    :param expected_rst: 预期结果
    :param url: 请求url
    :param body: 请求报文
    :param sql_path: sql文件
    :param yml_path: yml格式化文件
    :param send_method: 请求方法
    :return:
    '''
    sql_file = sql_path
    yml_file = yml_path
    # 格式化前置条件传的数据
    setUp_dict = params['setUp']
    body = format_data_by_setup(body, setUp_dict)
    conditions = format_data_by_setup(params['query'], setUp_dict)
    expected_rst = format_data_by_setup(expected_rst, setUp_dict)

    random_obj = RandomData()
    expected_rst = random_obj.get_random_data_value(expected_rst)
    # 登录
    lg = Login(username, pwd)
    access_token, req = lg.login()
    defaultLoc, defaultIns = lg.get_default_setting(req, access_token)
    headers = {"Authorization": 'Bearer '+ access_token,
               "k2": defaultLoc,
               "k1": defaultIns
    }
    # 发送接口请求

    url = URL_INFO['TEST']['url'] + uri
    if send_method == 'POST':
        rst = req.send_post(url, data=body, headers=headers)
    else:
        rst = req.send_get(url, data=body, headers=headers)
    # 数据库查询校验
    # 如果yml配置文件为空,则直接查询数据库,不需要进行格式化
    if yml_path == '':
        db_rst = query_db(sql_file, query=conditions)
        logger('数据库查询结果:').debug(db_rst)
        if len(db_rst) > 0:
            fm_db_rst = json.dumps(db_rst[0])
        else:
            logger('数据库查询结果:').error('数据库查询结果为空')
            fm_db_rst = '{}'
    else:
        fm_db_rst = get_db_format_data(sql_file, yml_file, query=conditions)
        logger('数据库查询结果根据YML格式化为:').debug(fm_db_rst)
    # 数据库查询结果和预期结果比对
    logger('【=====expected_rst预期结果为:=====】').debug(expected_rst)
    logger('【=====数据库需比对数据:=====】').debug(fm_db_rst)
    compare_data(expected_rst, fm_db_rst)
Пример #3
0
def get_query_compare_rst(username, pwd, uri, body, expected_rst,
                          sql_file_name, yml_file_name, send_method, **params):
    '''
    接口查询数据并和数据库结果比对
    :param username: 登录用户名
    :param pwd: 登录密码
    :param uri: 请求uri
    :param body: 请求报文
    :param expected_rst: 期望结果
    :param sql_file_name: sql文件
    :param yml_file_name: yml格式化文件
    :param current_dir: 当前目录
    :param send_method: 请求方法
    :return:
    '''
    sql_file = sql_file_name
    yml_file = yml_file_name
    # 格式化前置条件传的数据
    setUp_dict = params['setUp']
    body = format_data_by_setup(body, setUp_dict)
    conditions = format_data_by_setup(params['query'], setUp_dict)
    expected_rst = format_data_by_setup(expected_rst, setUp_dict)

    # 登录
    lg = Login(username, pwd)
    access_token, req = lg.login()
    defaultLoc, defaultIns = lg.get_default_setting(req, access_token)
    headers = {
        "Authorization": 'Bearer ' + access_token,
        "k2": defaultLoc,
        "k1": defaultIns
    }
    # 发送接口请求
    url = URL_INFO['TEST']['url'] + uri
    if send_method == 'POST':
        rst = req.send_post(url, data=body, headers=headers)
    else:
        rst = req.send_get(url, data=body, headers=headers)
    # 接口返回结果格式化
    target_json = format_data(rst, yml_file)
    logger('接口返回结果格式化结果:').debug(target_json)
    # 如果期望结果expected_rst不为空,则不需要查询数据库,直接使用expected_rst与target_json比对
    if expected_rst:
        compare_data(target_json, expected_rst)
    else:
        # 执行数据库查询并返回格式化后的结果
        fm_db_rst = get_db_format_data(sql_file, yml_file, query=conditions)
        logger('数据库查询结果后根据YML格式化:').debug(fm_db_rst)
        # 数据库查询结果和接口返回结果比对
        logger('【=====接口需比对数据:=====】').debug(target_json)
        logger('【=====数据库需比对数据:=====】').debug(fm_db_rst)
        compare_data(target_json, fm_db_rst)
Пример #4
0
def scene_middle_verify(username, pwd, scene_data, setUp=None):
    '''
    场景类自动化用例验证
    :param username: 登录用户名
    :param pwd: 登陆密码
    :param scene_data: 场景类的驱动数据
    :param setUp: 前置条件返回的结果数据
    :return:
    '''
    lg = Login(username, pwd)
    req = lg.req
    headers = {
        "Authorization": 'Bearer ' + lg.access_token,
        "k2": lg.defaultLoc,
        "k1": lg.defaultIns
    }
    # 将接口依赖关系存存入dict
    interface_relations = {}
    for interface_data in scene_data:
        interface_relations[interface_data['uri']] = interface_data['rely']

    # 解析接口依赖关系,梳理接口依赖关系;决定接口执行顺序,(场景接口数据根据接口依赖重新排序)
    scene_data_new = []
    for interface, rely_interface in interface_relations.items():
        for scene in scene_data:
            if rely_interface == "" and rely_interface == scene['rely']:
                scene_data_new.append(scene)
    for scene_new in scene_data_new:
        for scene in scene_data:
            if scene['rely'] == scene_new['uri']:
                scene_data_new.append(scene)

    # 然后针对每个接口发送请求,根据接口依赖取值,并保存;提供给其他依赖与此接口的返回值;
    # 接口返回结果
    reponse_rst_dict = {}
    for index, interface_data in enumerate(scene_data_new):
        # 发送接口请求
        uri = interface_data['uri']
        # 根据场景的前置条件格式化body
        body = format_data_by_setup(interface_data['body'], setUp)

        if interface_data['rely']:
            # 获取依赖的数据,并格式化body,将依赖的数据写入填充到body里面
            body = format_body_by_rely(
                interface_data['body'],
                reponse_rst_dict[interface_data['rely']])
        # 打印body日志
        logger('【接口' + str(index + 1) + '】请求报文body为:').debug(body)
        if isinstance(body, str):
            body = json.loads(body)
        url = URL_INFO['TEST']['url'] + uri
        if interface_data['send_method'] == 'POST':
            rst = req.send_post(url, data=body, headers=headers)
        else:
            rst = req.send_get(url, data=body, headers=headers)
        # 打印接口返回结果日志
        logger('【接口' + str(index + 1) + '】返回结果为:').debug(rst)
        # 如果SQL执行字段为空,则保存接口返回结果; 否则查询数据库结果保存
        if interface_data['sql'] and index < len(scene_data_new) - 1:
            sql_file = interface_data['sql']
            condition = json.loads(interface_data['condition'])
            db_rst = query_db(sql_file, query=condition)
            reponse_rst_dict[uri] = db_rst[0]
        else:
            if rst:
                reponse_rst_dict[uri] = rst
            else:
                logger(uri).error('接口返回结果错误!')
                raise AssertionError(uri, '接口返回结果错误')
    # 最后一个接口结束后,验证场景结果
    # 如果最后一个接口是查询类,则写SQL查询校验
    if scene_data_new[-1]['interface_type'] == 0:
        rst = reponse_rst_dict[scene_data_new[-1]['uri']]
        yml_file = scene_data_new[-1]['yml']
        sql_file = scene_data_new[-1]['sql']
        expected_rst = scene_data_new[-1]['expected_rst']
        # condition = json.loads(scene_data_new[-1]['condition'])
        condition = json.loads(
            format_body_by_rely(scene_data_new[-1]['condition'],
                                reponse_rst_dict[interface_data['rely']]))
        target_json = format_data(rst, yml_file)
        logger('接口返回结果根据YML格式化为:').debug(target_json)
        # 如果expected_rst 期望结果不为空,则直接expected_rst与target_json比对;
        if expected_rst:
            compare_data(target_json, expected_rst)
        else:
            # 查询数据库,执行数据库查询并返回格式化后的结果
            fm_db_rst = get_db_format_data(sql_file, yml_file, query=condition)
            logger('数据库查询结果根据YML格式化为:').debug(fm_db_rst)
            # 数据库查询结果和接口返回结果比对
            logger('【=====接口需比对数据:=====】').debug(target_json)
            logger('【=====数据库需比对数据:=====】').debug(fm_db_rst)
            compare_data(target_json, fm_db_rst)
    # 如果最后一个接口是提交类,则直接执行SQL查询结果
    else:
        # 数据库查询校验
        expected_rst = scene_data_new[-1]['expected_rst']
        yml_file = scene_data_new[-1]['yml']
        sql_file = scene_data_new[-1]['sql']
        # condition = json.loads(scene_data_new[-1]['condition'])
        condition = json.loads(
            format_body_by_rely(scene_data_new[-1]['condition'],
                                reponse_rst_dict[interface_data['rely']]))
        if yml_file == '':
            db_rst = query_db(sql_file, query=condition)
            logger('数据库查询结果:').debug(db_rst)
            if len(db_rst) > 0:
                fm_db_rst = json.dumps(db_rst[0])
            else:
                logger('数据库查询结果:').error('数据库查询结果为空')
                fm_db_rst = '{}'

        else:
            fm_db_rst = get_db_format_data(sql_file, yml_file, query=condition)
            logger('数据库查询结果根据YML格式化为:').debug(fm_db_rst)
        # 数据库查询结果和预期结果比对
        logger('【=====expected_rst预期结果为:=====】').debug(expected_rst)
        logger('【=====数据库需比对数据:=====】').debug(fm_db_rst)
        compare_data(expected_rst, fm_db_rst)