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)
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)
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
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)
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)
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)