def run_batch_test(request, Webhook=None): """ 批量运行用例 :param request: :return: """ if Webhook is None: if request.session.get('login_status'): kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): try: kwargs = json.loads(request.body.decode('utf-8')) except ValueError: logging.error('待运行用例信息解析异常:{kwargs}'.format(kwargs=kwargs)) return HttpResponse('信息解析异常,请重试') test_list = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') report_name = kwargs.get('report_name', None) run_by_batch(test_list, base_url, testcase_dir_path, type=type) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: type = request.POST.get('type', None) base_url = request.POST.get('env_name') test_list = request.body.decode('utf-8').split('&') if type: run_by_batch(test_list, base_url, testcase_dir_path, type=type, mode=True) else: run_by_batch(test_list, base_url, testcase_dir_path) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) return render_to_response('report_template.html', runner.summary) else: return HttpResponseRedirect("/api/login/") elif Webhook == 'Webhook': testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) test_list = request.pop('id') base_url = request.pop('env_name') type = request.pop('type') report_name = request.get('report_name', None) run_by_batch(test_list, base_url, testcase_dir_path, type=type) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告')
def run_logic_test(request): account = request.session["now_account"] kwargs = { "failfast": False, } runner = HttpRunner_ext(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): request_data = json.loads(request.body.decode('utf-8')) # report_name = kwargs.get('report_name', None) main_hrun.delay(testcase_dir_path, account, request_data) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') type = request.POST.get('type', 'test') report_name = run_by_logic_test(id, base_url, testcase_dir_path) runner.run3(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) add_test_reports(runner, report_name=report_name, report_type=type, executor=account) return render_to_response('report_template.html', runner.summary)
def module_hrun(name, base_url, module, receiver, config=None): """ 异步运行模块 :param env_name: str: 环境地址 :param project: str:项目所属模块 :param module: str:模块名称 :return: """ logger.setup_logger('INFO') kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) module = list(module) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) try: for value in module: run_by_module(value[0], base_url, testcase_dir_path, config) except ObjectDoesNotExist: return '找不到模块信息' run_time = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime(time.time())) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) add_test_reports(run_time, report_name=name, **runner.summary) if receiver != '': send_html_reports(receiver, runner) return runner.summary
def run_batch_test(request): """ 批量运行用例 :param request: :return: """ testcase_dir_path = os.path.join(os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) logger.info("前台传入参数:{}".format(kwargs)) test_list = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') logger.info("当前运行的用例类型为:{}".format(type)) logger.info("-" * 30) report_name = kwargs.get('report_name', None) run_by_batch(test_list, base_url, testcase_dir_path, type=type) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: type = request.POST.get('type', None) base_url = request.POST.get('env_name') test_list = request.body.decode('utf-8').split('&') if type: run_by_batch(test_list, base_url, testcase_dir_path, type=type, mode=True) else: run_by_batch(test_list, base_url, testcase_dir_path) summary = main_run_cases(testcase_dir_path) return render_to_response('report_template.html', summary)
def project_hrun(name, base_url, project, receiver): """ 异步运行整个项目 :param env_name: str: 环境地址 :param project: str :return: """ logger.setup_logger('INFO') kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) id = ProjectInfo.objects.get(project_name=project).id testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) run_by_project(id, base_url, testcase_dir_path) # runner.run(testcase_dir_path) runner.summary = runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary) report_path = add_test_reports(runner, report_name=name)[0] if receiver != '': send_email_reports(receiver, report_path, name=name) os.remove(report_path)
def project_hrun(name, base_url, project, receiver, config=None): """ 异步运行整个项目 :param env_name: str: 环境地址 :param project: str :return: """ logger.setup_logger('INFO') kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) id = ProjectInfo.objects.get(project_name=project).id testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) run_by_project(id, base_url, testcase_dir_path, config) run_time = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime(time.time())) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) add_test_reports(run_time, report_name=name, **runner.summary) if receiver != '': send_html_reports(receiver, runner) return runner.summary
def suite_hrun(name, base_url, suite, receiver): """ 异步运行模块 :param env_name: str: 环境地址 :param project: str:项目所属模块 :param module: str:模块名称 :return: """ logger.setup_logger('INFO') kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) suite = list(suite) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) try: for value in suite: run_by_suite(value[0], base_url, testcase_dir_path) except ObjectDoesNotExist: return '找不到Suite信息' runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary) add_test_reports(report_name=name, **runner.summary) if receiver != '': send_html_reports(receiver, runner) return runner.summary
def module_hrun(name, base_url, module, receiver): """ 异步运行模块 :param env_name: str: 环境地址 :param project: str:项目所属模块 :param module: str:模块名称 :return: """ logger.setup_logger('INFO') kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) module = list(module) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) try: for value in module: run_by_module(value[0], base_url, testcase_dir_path) except ObjectDoesNotExist: return '找不到模块信息' # runner.run(testcase_dir_path) runner.summary = runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary) report_path = add_test_reports(runner, report_name=name)[0] if receiver != '': send_email_reports(receiver, report_path, name=name) os.remove(report_path)
def run_test(request): """ 运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) id = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') run_test_by_type(id, base_url, testcase_dir_path, type) report_name = kwargs.get('report_name', None) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') type = request.POST.get('type', 'test') run_test_by_type(id, base_url, testcase_dir_path, type) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) return render_to_response('report_template.html', runner.summary)
def admin_test(request): try: base_url = tools.get(request,'env_name') name = tools.get(request,'name') except Exception: return JsonResponse({"status":2000,"message":"parameter 'base_url' or 'name' is Missing"}) else: id = TestCaseInfo.objects.get(name=name).id kwargs = {"failfast": False,} runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) type = request.POST.get('type', 'test') run_test_by_type(id, base_url, testcase_dir_path, type) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) report_name = kwargs.get('report_name', None) reports_url = add_test_reports(runner, report_name=report_name) timeStamp = tools.getRe(reports_url,r"\\(\d+?)\.") name = tools.getTime(int(timeStamp)) id = TestReports.objects.get(report_name=name).id reports_url = "http://192.168.80.86:8000/admin/view_report/%d/" %(id) status = runner.summary.get('success') successes = runner.summary.get('stat').get('successes') testsRun = runner.summary.get('stat').get('testsRun') response_data = {'status':status,'success':successes,'testsRun':testsRun,'reports_url':reports_url} return JsonResponse(response_data)
def suite_hrun(name, base_url, suite, receiver): """ 异步运行模块 :param env_name: str: 环境地址 :param project: str:项目所属模块 :param module: str:模块名称 :return: """ logger.info("异步运行套件") suite = list(suite) testcase_dir_path = os.path.join( os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) try: for value in suite: run_by_suite(value[0], base_url, testcase_dir_path) except ObjectDoesNotExist: return '找不到Suite信息' summary = main_run_cases(testcase_dir_path) report_path = add_test_reports(summary, report_name=name) if receiver != '': send_email_reports(receiver, report_path) os.remove(report_path)
def run_test(request): """ 运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) id = kwargs.pop('id') base_id = kwargs.get('env_name') type = kwargs.pop('type') # print('id1:', request.POST.get('id')) env_values = EnvInfo.objects.filter(id=base_id).values() base_url = env_values[0].get('base_url') env_token = env_values[0].get('env_token') env_merchantId = env_values[0].get('env_merchantId') run_test_by_type(id, base_url, env_token, env_merchantId, testcase_dir_path, type) report_name = kwargs.get('report_name', None) main_hrun(testcase_dir_path, report_name, base_id) # main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') type = request.POST.get('type', 'test') base_id = request.POST.get('env_name') # 修改了前端的value值,通过查询数据库获取 baseu_url print('base_id: ', base_id) env_values = EnvInfo.objects.filter(id=base_id).values() base_url = env_values[0].get('base_url') env_token = env_values[0].get('env_token') env_merchantId = env_values[0].get('env_merchantId') # print('运行的这里id: ', request.POST) run_test_by_type(id, base_url, env_token, env_merchantId, testcase_dir_path, type) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, base_id, type=False) return render_to_response('report_template.html', runner.summary)
def run_test(request): """ 运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(settings.BASE_DIR, "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) account = request.session["now_account"] if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) id = kwargs.pop('id') suite_name = TestSuite.objects.get(id=id).suite_name cfg_id = kwargs.pop('cfg_id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') run_test_by_type(id, base_url, testcase_dir_path, type, cfg_id) report_name = kwargs.get('report_name', None) request.session["base_url"] = base_url request.session["cfg_id"] = cfg_id main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') type = request.POST.get('type', 'test') cfg_id = request.POST.get('cfg_id') request.session["base_url"] = base_url request.session["cfg_id"] = cfg_id run_test_by_type(id, base_url, testcase_dir_path, type, cfg_id) if type == "suite": suite_name = TestSuite.objects.get(id=id).suite_name runner.run( os.path.join(testcase_dir_path, "{}.yml".format(suite_name))) else: runner.run(testcase_dir_path) #删除yml文件,异常的时候不删除,可以用来debug shutil.rmtree(testcase_dir_path) runner._summary = timestamp_to_datetime(runner.summary, type=False) #data = request.body.decode('utf-8') # kwargs = json.loads(request.body.decode('utf-8')) #report_name = kwargs.get('report_name', None) report_name = get_test_name(id, type) report_id = add_test_reports(runner, account, report_name) if request.POST.get('account') == "Jenkins": result = download_report(request, report_id) return result else: runner.summary.setdefault("report_id", report_id) return render_to_response('report_template.html', runner.summary)
def run_batch_test(request): """ 批量运行用例 :param request: :return: """ account = request.session["now_account"] kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): request_data = json.loads(request.body.decode('utf-8')) batch_main_hrun.delay(testcase_dir_path, account, request_data) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: type = request.POST.get('type', None) base_url = request.POST.get('env_name') report_name = request.POST.get('report_name') test_list = request.body.decode('utf-8').split('&') if type: run_by_batch(test_list, base_url, testcase_dir_path, type=type, mode=True) else: run_by_batch(test_list, base_url, testcase_dir_path) runner.run2(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) if not report_name: report_name = '批量执行' if type == 'project': report_name = report_name + '项目' elif type == 'module': report_name = report_name + '模块' elif type == 'suite': report_name = report_name + '套件' elif type is None: report_name = report_name + '用例' if type is None: type = 'test' add_test_reports(runner, report_name=report_name, report_type=type, executor=account) return render_to_response('report_template.html', runner.summary)
def run_test(request): """ 运行用例 :param request: :return: """ if request.session.get('login_status'): kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): try: kwargs = json.loads(request.body.decode('utf-8')) except ValueError: logging.error('待运行用例信息解析异常:{kwargs}'.format(kwargs=kwargs)) return HttpResponse('信息解析异常,请重试') id = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') config = request.POST.get( 'config') if request.POST.get('config') != "" else None run_by_module(id, base_url, testcase_dir_path, config) if type == 'module' \ else run_by_project(id, base_url, testcase_dir_path, config) report_name = kwargs.get('report_name', None) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') config = request.POST.get( 'config') if request.POST.get('config') != "" else None type = request.POST.get('type', None) if type: run_by_module(id, base_url, testcase_dir_path, config) if type == 'module' \ else run_by_project(id, base_url, testcase_dir_path, config) else: run_by_single(id, base_url, testcase_dir_path, config) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) return render_to_response('report_template.html', runner.summary) else: return HttpResponseRedirect("/api/login/")
def run_test(request): print("!!!用例开始运行!!!") print(request.body) print(request.path) print(request.encoding) print(request.method) print(request.META.get("CONTENT_TYPE")) print("请求来源:",request.META.get("REMOTE_ADDR")) """ 运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) id = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') run_test_by_type(id, base_url, testcase_dir_path, type) report_name = kwargs.get('report_name', None) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') type = request.POST.get('type', 'test') print(id,base_url,type) run_test_by_type(id, base_url, testcase_dir_path, type) t1 = runner.run(testcase_dir_path) print("用例执行结果",t1.gen_html_report()) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) #修复BUG一,测试完成后report没有落库,可能是没有调用此方法,补充如下: report_name = kwargs.get('report_name', None) add_test_reports(runner, report_name=report_name) return render_to_response('report_template.html', runner.summary)
def run_batch_test(request): """ 批量运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) test_list = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') report_name = kwargs.get('report_name', None) run_by_batch(test_list, base_url, testcase_dir_path, type=type) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: # #obj = json.loads(request.GET.get('obj', None)) obj = request.POST.dict() type = obj.pop('type') base_url = obj.pop('env_name') test_list = list(obj.values()) if type: run_by_batch(test_list, base_url, testcase_dir_path, type=type, mode=True) else: run_by_batch(test_list, base_url, testcase_dir_path) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) return render_to_response('report_template.html', runner.summary)
def run_test_ty_id(case_id): kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) run_by_single3(case_id, '', testcase_dir_path) runner.run2(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) details = runner.summary.get('details') return details
def run_test(request): """ 运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) id = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') run_test_by_type(id, base_url, testcase_dir_path, type) report_name = kwargs.get('report_name', None) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') type = request.POST.get('type', 'test') testcase_dir_path1 = os.path.join(testcase_dir_path, 'guest项目') run_test_by_type(id, base_url, testcase_dir_path, type) runner.run(testcase_dir_path1) # shutil.rmtree(testcase_dir_path) # 递归删除所有文件 runner._summary = timestamp_to_datetime(runner._summary, base_url, type=False) with open('summary.json', 'w', encoding='utf-8') as f: json.dump(runner._summary, f, ensure_ascii=False, sort_keys=True, indent=4) return render_to_response('report_template.html', runner._summary)
def project_hrun(name, base_url, project, receiver): """ 异步运行整个项目 :param env_name: str: 环境地址 :param project: str :return: """ logger.info("异步运行整个项目") id = ProjectInfo.objects.get(project_name=project).id testcase_dir_path = os.path.join( os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) run_by_project(id, base_url, testcase_dir_path) # 运行测试用例 summary = main_run_cases(testcase_dir_path) report_path = add_test_reports(summary, report_name=name) if receiver != '': send_email_reports(receiver, report_path) os.remove(report_path)
def run_test(request): """ 运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner() testcase_dir_path = os.path.join(os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) id = kwargs.pop('id') base_url = kwargs.pop('env_name') type = kwargs.pop('type') logger.info("当前运行的用例类型为:{}".format(type)) logger.info("当前运行试用的类为:run_test") logger.info(">>" * 30) run_test_by_type(id, base_url, testcase_dir_path, type) report_name = kwargs.get('report_name', None) main_hrun.delay(testcase_dir_path, report_name) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: id = request.POST.get('id') base_url = request.POST.get('env_name') type = request.POST.get('type', 'test') run_test_by_type(id, base_url, testcase_dir_path, type) #获取文件夹下所有的yml测试文件 summary = main_run_cases(testcase_dir_path) return render_to_response('report_template.html', summary)
def run_by_service(service_config_id, base_url): service_config_details = ServiceConfigDetail.objects.filter( service_config_id=service_config_id).all() service_config_details = list(service_config_details) # 用例ID集合 test_case_alls = [] # 套件ID集合 suite_alls = [] for service_config_detail in service_config_details: type = service_config_detail.relation_type relation_id = service_config_detail.relation_id if type == 1: modules = ModuleInfo.objects.filter( belong_project_id=relation_id).values('id').all() modules = list(modules) for module in modules: test_cases = TestCaseInfo.objects.filter( belong_module_id=module.get('id'), type=1, run_type=1).values('id').all() test_cases = list(test_cases) test_case_alls.extend(test_cases) if type == 2: test_cases = TestCaseInfo.objects.filter( belong_module_id=relation_id, type=1, run_type=1).values('id').all() test_case_alls.extend(list(test_cases)) if type == 3: suite = {'id': relation_id} suite_alls.append(suite) if type == 4: test_case = {'id': relation_id} test_case_alls.append(test_case) if type == 5: test_cases = TestCaseInfo.objects.filter( service_name=relation_id, type=1, run_type=1).values('id').all() test_case_alls.extend(list(test_cases)) runners = [] # 已执行用例id,用于去除重复 present_ids = [] if test_case_alls: testcase_dir_path = os.path.join(os.getcwd(), "suite") testset_path = os.path.join(testcase_dir_path, get_time_stamp()) # 运行用例 for test_case in test_case_alls: case_id = test_case.get('id') if case_id not in present_ids: run_by_single(case_id, base_url, testset_path) present_ids.append(case_id) kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) runner.run2(testset_path) shutil.rmtree(testset_path) runner.summary = timestamp_to_datetime(runner.summary) runners.append(runner) if suite_alls: for suite in suite_alls: testcase_dir_path = os.path.join(os.getcwd(), "suite") testset_path = os.path.join(testcase_dir_path, get_time_stamp()) run_by_suite(suite.get('id'), base_url, testset_path) kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) runner.run2(testset_path) shutil.rmtree(testset_path) runner.summary = timestamp_to_datetime(runner.summary) runners.append(runner) # 合并运行结果并生成报告 report_runner = None for runn in runners: if report_runner is None: report_runner = runn else: # 合并结果 report_runner.summary = merge_summary(report_runner.summary, runn.summary) return report_runner
def run_batch_test(request): """ 批量运行用例 :param request: :return: """ kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) if request.is_ajax(): kwargs = json.loads(request.body.decode('utf-8')) test_list = kwargs.pop('id') type = kwargs.pop('type') base_id = kwargs.get('env_name') env_values = EnvInfo.objects.filter(id=base_id).values() base_url = env_values[0].get('base_url') env_token = env_values[0].get('env_token') env_merchantId = env_values[0].get('env_merchantId') report_name = kwargs.get('report_name', None) run_by_batch(test_list, base_url, env_token, env_merchantId, testcase_dir_path, type=type) # main_hrun.delay(testcase_dir_path, report_name) main_hrun(testcase_dir_path, report_name, base_id) return HttpResponse('用例执行中,请稍后查看报告即可,默认时间戳命名报告') else: type = request.POST.get('type', None) test_list = request.body.decode('utf-8').split('&') base_id = request.POST.get('env_name') env_values = EnvInfo.objects.filter(id=base_id).values() base_url = env_values[0].get('base_url') env_token = env_values[0].get('env_token') env_merchantId = env_values[0].get('env_merchantId') if type: run_by_batch(test_list, base_url, env_token, env_merchantId, testcase_dir_path, type=type, mode=True) else: run_by_batch(test_list, base_url, env_token, testcase_dir_path) runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, base_id, type=False) # return render_to_response('report_template.html', runner.summary) return render_to_response('report_template.html', runner.summary)
def debug_case(request): try: testcase_info = json.loads(request.body.decode('utf-8')) case_test = run_request_case(**testcase_info) kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) base_url = testcase_info.get('test').get('env_name') run_by_single2(case_test, base_url, testcase_dir_path) runner.run2(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary, type=False) details = runner.summary.get('details') result = {} detail_size = len(details) if detail_size > 0: detail = details[detail_size - 1] records = detail.get('records') success = detail.get('success') if success: records_len = len(records) if records_len > 0: result = records[records_len - 1].get('meta_data').get('response').get('json') view_data = str.replace(str(result), ',', ',\n') view_data = str.replace(view_data, '{', '{\n') view_data = str.replace(view_data, '}', '\n}') else: records_len = len(records) if records_len > 0: reason = '' for validate in records[records_len - 1]['meta_data']['validators']: if validate.get('check_result') == 'fail': reason += validate['comparator']+':'+str([validate['expect'],validate['check_value']])+'\n' view_data = '验证异常:异常信息如下: \n\n' # 断言提示 if reason: view_data += '断言结果:\n' + str(reason) + '\n\n' view_data += '---------------------------------------------' view_data += '---------------------------------------------------\n' # 返回信息提示 result_data = records[records_len - 1].get('meta_data').get('response').get('json') if result_data: result_data = str.replace(str(result_data), ',', ',\n') result_data = str.replace(result_data, '{', '{\n') result_data = str.replace(result_data, '}', '\n}') view_data += '返回信息:\n' + str(result_data) + '\n\n' view_data += '---------------------------------------------' view_data += '---------------------------------------------------\n' result = records[records_len - 1].get('attachment') view_data += str(result) # result = json.dumps(runner.summary, cls=MyEncoder) except Exception as e: result = "调试出现异常,异常信息如下: {0}".format(e) view_data = str.replace(str(result), ': ', ': \n') result = { 'data': str(result), 'view_data': view_data } return JsonResponse(result)
def suite_hrun(name, base_url, suite, receiver): """ 异步运行模块 :param env_name: str: 环境地址 :param project: str:项目所属模块 :param module: str:模块名称 :return: """ logger.setup_logger('INFO') kwargs = { "failfast": False, } runner = HttpRunner(**kwargs) suite = list(suite) testcase_dir_path = os.path.join(os.getcwd(), "suite") testcase_dir_path = os.path.join(testcase_dir_path, get_time_stamp()) try: for value in suite: run_by_suite(value[0], base_url, testcase_dir_path) except ObjectDoesNotExist: return '找不到Suite信息' # runner.run(testcase_dir_path) runner.summary = runner.run(testcase_dir_path) shutil.rmtree(testcase_dir_path) runner.summary = timestamp_to_datetime(runner.summary) # report_path = add_test_reports(runner, report_name=name) report_result = add_test_reports(runner, report_name=name) report_path, report_id = report_result[0], report_result[1] # 处理报告结果失败,发送失败主题邮件 if not runner.summary.get('success', None): FailName = [] for i in runner.summary.get('details'): if i.get('success') == False: FailName.append(i.get('name')) # subjects = "定时任务出现错误情况预警通知" status = "【 失败 】" bodyText = "{}定时任务执行失败用例如下:<br>  {} <br> 请套件相关维护人员及时确认!!!".format( name, '<br>  '.join(FailName)) send_email_reports(receiver, report_path, name=name, bodyText=bodyText, status=status) os.remove(report_path) # 调用dingding机器人发送失败通知 bodyText = "{}定时任务执行失败用例如下:\n {}\n如需了解更多内容,请关注邮箱中邮件!".format( name, '\n '.join(FailName)) callDingTalkRobot(name, bodyText) return "" # 处理接口响应时长超时,发送告警邮件 timeOut_result = statistics_summary_timeOut(runner.summary) if timeOut_result: status = "【 告警 】" bodyText = "{0}定时任务执行接口时长告警用例如下: {1}".format( name, write_htmlTable(timeOut_result)) # 创建bug createrZentaoBug(suite[0], timeOut_result, report_id=report_id) send_email_reports(receiver, report_path, name=name, bodyText=bodyText, status=status) if receiver != '': send_email_reports(receiver, report_path, name=name) os.remove(report_path)