コード例 #1
0
def run_by_single(index, base_url, path):
    """
    加载单个case用例信息
    :param index: int or str:用例索引
    :param base_url: str:环境地址
    :return: dict
    """
    config = {
        'config': {
            'name': '',
            'request': {
                'base_url': base_url
            }
        }
    }
    testcase_list = []

    testcase_list.append(config)

    try:
        obj = TestCaseInfo.objects.get(id=index)
    except ObjectDoesNotExist:
        return testcase_list

    include = eval(obj.include)
    request = eval(obj.request)
    name = obj.name
    project = obj.belong_project
    module = obj.belong_module.module_name

    config['config']['name'] = name

    testcase_dir_path = os.path.join(path, project)

    if not os.path.exists(testcase_dir_path):
        os.makedirs(testcase_dir_path)

        try:
            debugtalk = DebugTalk.objects.get(belong_project__project_name=project).debugtalk
        except ObjectDoesNotExist:
            debugtalk = ''

        dump_python_file(os.path.join(testcase_dir_path, '__init__.py'), '')
        dump_python_file(os.path.join(testcase_dir_path, 'debugtalk.py'), debugtalk)

    testcase_dir_path = os.path.join(testcase_dir_path, module)

    if not os.path.exists(testcase_dir_path):
        os.mkdir(testcase_dir_path)

    for test_info in include:
        try:
            if isinstance(test_info, dict):
                config_id = test_info.pop('config')[0]
                config_request = eval(TestCaseInfo.objects.get(id=config_id).request)
                config_request.get('config').get('request').setdefault('base_url', base_url)
                config_request['config']['name'] = name
                testcase_list[0] = config_request
            else:
                id = test_info[0]
                pre_request = eval(TestCaseInfo.objects.get(id=id).request)
                testcase_list.append(pre_request)

        except ObjectDoesNotExist:
            return testcase_list

    if request['test']['request']['url'] != '':
        testcase_list.append(request)

    dump_yaml_file(os.path.join(testcase_dir_path, name + '.yml'), testcase_list)
コード例 #2
0
def run_by_single(index, base_url, path):
    """
    加载单个case用例信息
    :param index: int or str:用例索引
    :param base_url: str:环境地址
    :return: dict
    """
    testcase_list = {
        'config': {
            'name': '',
            'verify': "false",
            'variables': {},
            'base_url': base_url
        }
    }
    testcase_list['teststeps'] = []

    try:
        obj = TestCaseInfo.objects.get(id=index)
    except ObjectDoesNotExist:
        return testcase_list

    include = eval(obj.include)
    request = eval(obj.request)
    name = obj.name
    project = obj.belong_project
    module = obj.belong_module.module_name

    testcase_list['config']['name'] = name

    testcase_dir_path = os.path.join(path, project)
    #加载全局变量
    if request['request']['url'] == '' and "variables" in request.keys():
        testcase_list['config']['variables'] = request['variables']
    if not os.path.exists(testcase_dir_path):
        os.makedirs(testcase_dir_path)

        try:
            debugtalk = DebugTalk.objects.get(
                belong_project__project_name=project).debugtalk
        except ObjectDoesNotExist:
            debugtalk = ''

        dump_python_file(os.path.join(testcase_dir_path, 'debugtalk.py'),
                         debugtalk)

    testcase_dir_path = os.path.join(testcase_dir_path, module)

    if not os.path.exists(testcase_dir_path):
        os.mkdir(testcase_dir_path)

    for test_info in include:
        try:
            if isinstance(test_info, dict):
                config_id = test_info.pop('config')[0]
                config_request = eval(
                    TestCaseInfo.objects.get(id=config_id).request)['config']
                #config_request.get('config').get('request').setdefault('base_url', base_url)
                #config_request['config']['name'] = name
                testcase_list['teststeps'].append(
                    modify_validate(config_request))
            else:
                id = test_info[0]
                pre_request = eval(TestCaseInfo.objects.get(id=id).request)
                testcase_list['teststeps'].append(modify_validate(pre_request))

        except ObjectDoesNotExist:
            return testcase_list

    if request['request']['url'] != '':
        testcase_list['teststeps'].append(modify_validate(request))
    testcase_dir_path = os.path.join(testcase_dir_path, name + '.yml')
    dump_yaml_file(testcase_dir_path, testcase_list)
コード例 #3
0
def run_by_logic_test(index, base_url, path, order_prefix=''):
    config = {'config': {'name': '', 'request': {'base_url': base_url}}}
    testcase_list = []

    testcase_list.append(config)

    try:
        obj = TestCaseLogicInfo.objects.get(id=index)
    except ObjectDoesNotExist:
        return testcase_list

    include = eval(obj.include)
    request = eval(obj.request)
    name = obj.name
    project = obj.belong_project
    module = obj.belong_module.module_name

    project_info = ProjectInfo.objects.get_pro_name(project, type=False)

    # 获取工程关联的配置
    if project_info.config_id is not None:
        try:
            basic_config_request = TestCaseLogicInfo.objects.get(
                id=project_info.config_id).request
            basic_request = eval(basic_config_request)
            if basic_request.get('config').get('request') is not None:
                basic_request.get('config').get('request').setdefault(
                    'base_url', base_url)
            basic_request['config']['name'] = name
            testcase_list[0] = basic_request
        except ObjectDoesNotExist:
            # raise ObjectDoesNotExist('项目关联的配置信息不存在,请检查')
            print('项目关联的配置信息不存在')

    # 获取模块关联的配置
    if obj.belong_module.config_id is not None:
        try:
            basic_config_request = TestCaseLogicInfo.objects.get(
                id=obj.belong_module.config_id).request
            module_request = eval(basic_config_request)
            if module_request.get('config').get('request') is not None:
                module_request.get('config').get('request').setdefault(
                    'base_url', base_url)
            module_request['config']['name'] = name
            # 合并配置信息
            merge_config(testcase_list[0], module_request)
            testcase_list[0] = module_request
        except ObjectDoesNotExist:
            # raise ObjectDoesNotExist('模块关联的配置信息不存在,请检查')
            print('模块关联的配置信息不存在')

    config['config']['name'] = name

    testcase_dir_path = os.path.join(path, project)

    if not os.path.exists(testcase_dir_path):
        os.makedirs(testcase_dir_path)

        path = os.path.abspath(os.path.dirname(sys.argv[0]))
        w = open(path + '/' + 'ApiManager/utils/basic_function.py',
                 encoding='utf8')
        basic_function = w.read()

        try:
            debugtalk = DebugTalk.objects.get(
                belong_project__project_name=project).debugtalk
        except ObjectDoesNotExist:
            debugtalk = ''

        dump_python_file(os.path.join(testcase_dir_path, 'debugtalk.py'),
                         basic_function + '\n' + '\n' + debugtalk)

    testcase_dir_path = os.path.join(testcase_dir_path, module)

    if not os.path.exists(testcase_dir_path):
        os.mkdir(testcase_dir_path)

    for test_info in include:
        try:
            if isinstance(test_info, dict):
                config_id = test_info.pop('config')[0]
                config_request = eval(
                    TestCaseInfo.objects.get(id=config_id).request)
                if config_request.get('config').get('request') is not None:
                    config_request.get('config').get('request').setdefault(
                        'base_url', base_url)
                config_request['config']['name'] = name
                # 合并配置信息
                merge_config(testcase_list[0], config_request)
                testcase_list[0] = config_request
            else:
                id = test_info[0]
                pre_request = eval(TestCaseInfo.objects.get(id=id).request)
                testcase_list.append(pre_request)
                # 清除get_cache_case的缓存
                del_case_cache(id)

        except ObjectDoesNotExist:
            return testcase_list

    if request['test']['request']['url'] != '':
        testcase_list.append(request)

    # 剔除备注使用的特殊关键字
    variables = testcase_list[0].get('config', {}).get('variables')
    if variables:
        for variab in variables:
            if isinstance(variab, dict):
                if '&remark&' in variab.keys():
                    variab.pop('&remark&')

    dump_yaml_file(
        os.path.join(testcase_dir_path, order_prefix + name + '.yml'),
        testcase_list)

    # 清除get_cache_case的缓存
    del_case_cache(obj.id)

    return obj.name
コード例 #4
0
def run_by_single2(request, base_url, path):
    config = {'config': {'name': '', 'request': {'base_url': base_url}}}
    testcase_list = []

    testcase_list.append(config)

    case_info = request.get('test').get('case_info')
    module_id = case_info.get('module')
    belong_module = None
    try:
        belong_module = ModuleInfo.objects.get_module_name(module_id,
                                                           type=False)
        module = belong_module.module_name
    except ObjectDoesNotExist:
        module = '缺省模块'

    include = eval(str(case_info.get('include')))
    name = request.get('test').get('name')
    project = case_info.get('project')

    project_info = ProjectInfo.objects.get_pro_name(project, type=False)

    # 获取工程关联的配置
    if project_info.config_id is not None:
        try:
            basic_config_request = TestCaseInfo.objects.get(
                id=project_info.config_id).request
            basic_request = eval(basic_config_request)
            if basic_request.get('config').get('request') is not None:
                basic_request.get('config').get('request').setdefault(
                    'base_url', base_url)

            basic_request['config']['name'] = name
            testcase_list[0] = basic_request
        except ObjectDoesNotExist:
            # raise ObjectDoesNotExist('项目关联的配置信息不存在,请检查')
            print('项目关联的配置信息不存在')

    # 获取模块关联的配置
    if belong_module is not None and belong_module.config_id is not None:
        try:
            basic_config_request = TestCaseInfo.objects.get(
                id=belong_module.config_id).request
            module_request = eval(basic_config_request)
            if module_request.get('config').get('request') is not None:
                module_request.get('config').get('request').setdefault(
                    'base_url', base_url)
            module_request['config']['name'] = name
            # 合并配置信息
            merge_config(testcase_list[0], module_request)
            testcase_list[0] = module_request
        except ObjectDoesNotExist:
            # raise ObjectDoesNotExist('模块关联的配置信息不存在,请检查')
            print('模块关联的配置信息不存在')

    config['config']['name'] = name

    testcase_dir_path = os.path.join(path, project)

    if not os.path.exists(testcase_dir_path):
        os.makedirs(testcase_dir_path)

        path = os.path.abspath(os.path.dirname(sys.argv[0]))
        w = open(path + '/' + 'ApiManager/utils/basic_function.py',
                 encoding='utf8')
        basic_function = w.read()

        try:
            debugtalk = DebugTalk.objects.get(
                belong_project__project_name=project).debugtalk
        except ObjectDoesNotExist:
            debugtalk = ''

        dump_python_file(os.path.join(testcase_dir_path, 'debugtalk.py'),
                         basic_function + '\n' + '\n' + debugtalk)

    testcase_dir_path = os.path.join(testcase_dir_path, module)

    if not os.path.exists(testcase_dir_path):
        os.mkdir(testcase_dir_path)

    for test_info in include:
        try:
            if isinstance(test_info, dict):
                config_id = test_info.pop('config')[0]
                config_request = eval(
                    TestCaseInfo.objects.get(id=config_id).request)
                if config_request.get('config').get('request') is not None:
                    config_request.get('config').get('request').setdefault(
                        'base_url', base_url)
                config_request['config']['name'] = name
                # 合并配置信息
                merge_config(testcase_list[0], config_request)
                testcase_list[0] = config_request
            else:
                id = test_info[0]
                case = TestCaseInfo.objects.get(id=id)
                pre_request = eval(case.request)
                if case.type == 2:
                    if pre_request.get('config').get('request') is not None:
                        pre_request.get('config').get('request').setdefault(
                            'base_url', base_url)
                    pre_request['config']['name'] = name
                    # 合并配置信息
                    merge_config(testcase_list[0], pre_request)
                    testcase_list[0] = pre_request
                else:
                    testcase_list.append(pre_request)
                    # 清除get_cache_case的缓存
                    del_case_cache(id)
コード例 #5
0
def run_by_single(index, base_url, path):
    """
    对于当个测试用例的运行
    :param index: int or str:用例索引
    :param base_url: str:环境地址 : http://47.94.172.250:33334
    :param path: api接口名字   /api/v1/account/login
    :return:
    """

    test_case_list = []
    config = {'config': {'name': '', 'request': {'base_url': base_url}}}
    test_case_list.append(config)

    try:
        obj = TestCaseInfo.objects.get(id=index)
    except ObjectDoesNotExist:
        return test_case_list

    include = eval(obj.include)
    request = eval(obj.request)
    name = obj.name
    project = obj.belong_project
    module = obj.belong_module.module_name

    config['config']['name'] = name

    test_case_dir_path = os.path.join(path, project)

    if not os.path.exists(test_case_dir_path):
        os.makedirs(test_case_dir_path)

        try:
            debugtalk = DebugTalk.objects.get(
                belong_project__project_name=project).debugtalk
        except ObjectDoesNotExist:
            debugtalk = ''
        # 添加dubugtalk.py文件的路径
        dump_python_file(os.path.join(test_case_dir_path, 'debugtalk.py'),
                         debugtalk)
    # 单个测试用例的运行路径
    test_case_dir_path = os.path.join(test_case_dir_path, module)

    if not os.path.exists(test_case_dir_path):
        os.mkdir(test_case_dir_path)

    for test_info in include:
        try:
            if isinstance(test_info, dict):
                config_id = test_info.pop('config')[0]
                config_request = eval(
                    TestCaseInfo.objects.get(id=config_id).request)
                config_request.get('config').get('request').setdefault(
                    'base_url', base_url)
                # config_request.get('request').setdefault('base_url', base_url)
                config_request['config']['name'] = name
                test_case_list[0] = config_request
            else:
                pk = test_info[0]
                pre_request = eval(TestCaseInfo.objects.get(id=pk).request)
                test_case_list.append(pre_request)

        except ObjectDoesNotExist:
            return test_case_list

    if request['test']['request']['url'] != '':
        test_case_list.append(request)

    dump_yaml_file(os.path.join(test_case_dir_path, name + '.yml'),
                   test_case_list)
コード例 #6
0
ファイル: runner.py プロジェクト: leizixu/HttpRunnerManager3
def run_by_single(index, base_url, path):
    """
    加载单个case用例信息
    :param index: int or str:用例索引
    :param base_url: str:环境地址
    :return: dict
    """
    testcase_list = {
        'config': {
            'name': '',
            'verify': "false",
            'variables': {},
            'base_url': base_url
        }
    }
    testcase_list['teststeps'] = []

    try:
        obj = TestCaseInfo.objects.get(id=index)
    except ObjectDoesNotExist:
        return testcase_list

    include = eval(obj.include)
    request = eval(obj.request)
    name = obj.name
    project = obj.belong_project
    module = obj.belong_module.module_name
    #替换当前用例的端口
    if 'base_url' in request['request'] and request['request']['base_url']:
        testcase_list['config']['base_url'] = request['request']['base_url']
    testcase_list['config']['name'] = name
    testcase_dir_path = os.path.join(path, project)
    #加载全局变量
    if request['request']['url'] == '' and "variables" in request.keys():
        testcase_list['config']['variables'] = request['variables']
    if not os.path.exists(testcase_dir_path):
        os.makedirs(testcase_dir_path)
        try:
            debugtalk = DebugTalk.objects.get(
                belong_project__project_name=project).debugtalk
        except ObjectDoesNotExist:
            debugtalk = ''
        dump_python_file(os.path.join(testcase_dir_path, 'debugtalk.py'),
                         debugtalk)

    #检查debugtakl.py 代码是否有异常,如果有抛出异常
    debugtalk_dir = os.path.join(testcase_dir_path, 'debugtalk.py')
    check_result = checkPath(debugtalk_dir)
    logger.info("check_result的值为:{}".format(check_result))
    if isinstance(check_result, int) and check_result == 1:
        shutil.rmtree(testcase_dir_path)
        raise AnalysisError("python文件解析异常,请检查debugtalk.py文件信息")
    else:
        msg = check_result[0]
        if msg > 0:
            errors = []
            for err in check_result[1]:
                errors.append(str(err.split(separator)[-1]) + "\n")
            shutil.rmtree(testcase_dir_path)
            raise SyntaxError(errors)

    testcase_dir_path = os.path.join(testcase_dir_path, module)
    if not os.path.exists(testcase_dir_path):
        os.mkdir(testcase_dir_path)

    for test_info in include:
        try:
            if isinstance(test_info, dict):
                config_id = test_info.pop('config')[0]
                config_request = eval(
                    TestCaseInfo.objects.get(id=config_id).request)['config']
                testcase_list['teststeps'].append(
                    modify_validate(config_request))
            else:
                id = test_info[0]
                pre_request = eval(TestCaseInfo.objects.get(id=id).request)
                testcase_list['teststeps'].append(modify_validate(pre_request))

        except ObjectDoesNotExist:
            return testcase_list

    if request['request']['url'] != '':
        testcase_list['teststeps'].append(modify_validate(request))
    testcase_dir_path = os.path.join(testcase_dir_path, name + '.yml')
    dump_yaml_file(testcase_dir_path, testcase_list)