def clusterStatus(request): ''' 集群状态显示界面 ''' t = get_template('cluster_status.html') proxy = MyProxy(settings.CLUSTER_MASTER_URL) cluster = Cluster(proxy.get_status()) context = {'nodes': cluster.nodes} html = t.render(context) return HttpResponse(html)
def compatibility_test(request): ''' 兼容性测试 ''' logger.info(u'开始兼容性测试') if request.method == 'POST': form = PlanForm(request.POST) if form.is_valid(): data = form.cleaned_data cur_system = data['system'] cur_system_instance = System.objects.get(name=cur_system) compatibility_script_instance = CompatibilityScript.objects.get(system = cur_system_instance) proxy = MyProxy(settings.CLUSTER_MASTER_URL) taskinfo_ie8 = {} taskinfo_ie8['system'] = cur_system taskinfo_ie8['executor'] = data['executor'] taskinfo_ie8['province'] = data['province'] taskinfo_ie8['city'] = data['city'] taskinfo_ie8_json = json.dumps(taskinfo_ie8) para_ie8 = {'type': 'file'} para_ie8['path'] = compatibility_script_instance.script_ie_path para_ie8['str'] = taskinfo_ie8_json para_list_ie8 = [] para_list_ie8.append(para_ie8) proxy.add_job_with_type('inspect', 'IE8', 'exec', para_list_ie8) taskinfo_ie10 = {} taskinfo_ie10['system'] = cur_system taskinfo_ie10['executor'] = data['executor'] taskinfo_ie10['province'] = data['province'] taskinfo_ie10['city'] = data['city'] taskinfo_ie10_json = json.dumps(taskinfo_ie10) para_ie10 = {'type': 'file'} para_ie10['path'] = compatibility_script_instance.script_ie_path para_ie10['str'] = taskinfo_ie10_json para_list_ie10 = [] para_list_ie10.append(para_ie10) proxy.add_job_with_type('inspect', 'IE10', 'exec', para_list_ie10) taskinfo_fx = {} taskinfo_fx['system'] = cur_system taskinfo_fx['executor'] = data['executor'] taskinfo_fx['province'] = data['province'] taskinfo_fx['city'] = data['city'] taskinfo_fx_json = json.dumps(taskinfo_fx) para_fx = {'type': 'file'} para_fx['path'] = compatibility_script_instance.script_firefox_path para_fx['str'] = taskinfo_fx_json para_list_fx = [] para_list_fx.append(para_fx) proxy = MyProxy(settings.CLUSTER_MASTER_URL) proxy.add_job_with_type('inspect', 'FX', 'exec', para_list_fx) taskinfo_chrome = {} taskinfo_chrome['system'] = cur_system taskinfo_chrome['executor'] = data['executor'] taskinfo_chrome['province'] = data['province'] taskinfo_chrome['city'] = data['city'] taskinfo_chrome_json = json.dumps(taskinfo_chrome) para_chrome = {'type': 'file'} para_chrome['path'] = compatibility_script_instance.script_chrome_path para_chrome['str'] = taskinfo_chrome_json para_chrome_list = [] para_chrome_list.append(para_chrome) proxy.add_job_with_type('inspect', 'CHROME', 'exec', para_chrome_list) return HttpResponseRedirect('/result/')
def create_plan(request): ''' 完成巡检计划新增工作 ''' if request.method == 'POST': form = PlanForm(request.POST) if form.is_valid(): data = form.cleaned_data cur_system = request.COOKIES["system"] cur_system_instance = System.objects.get(name=cur_system) testsuite_instance = TestSuite.objects.get(name=data['test_suite_name']) #巡检脚本名称(通过系统实例id和测试套件id保证巡检脚本名称的唯一性) script_name = str(cur_system_instance.id) + '-' + str(testsuite_instance.id) #巡检脚本路径 script_path = settings.SCRIPT_ROOT + cur_system_instance.english_name + str(testsuite_instance.id) + '.txt' logger.info(u'巡检脚本路径:' + script_path) if not os.path.exists(settings.SCRIPT_ROOT): os.makedirs(settings.SCRIPT_ROOT) if script_name not in scripts: logger.info(u'新建巡检脚本') script_str = '*** Settings ***' + os.linesep \ + 'Library Selenium2Library' + os.linesep + os.linesep \ + '*** Variables ***' + os.linesep \ + '${timeout} ' + str(timeout) + os.linesep + os.linesep \ + '*** Test Cases ***' + os.linesep #获得当前系统的所有测试用例 candidate_test_cases = TestCase.objects.filter(system = cur_system_instance) #将testsuite选中的测试用例名称按行分为列表 testcase_list = testsuite_instance.testcases.split('\n') #去除最后一个空行 testcase_list = testcase_list[:-1] for testcase_item in testcase_list: #列表中的每一项的格式为'序号 测试用例名称' testcase_name = testcase_item.split(' ')[1] #去除换行符 testcase_name = testcase_name.strip('\r') testcase_instance = candidate_test_cases.get(name=testcase_name) script_str = script_str + testcase_instance.name + os.linesep script_str = script_str + testcase_instance.content + os.linesep + os.linesep script_str = script_str + ' delete all cookies' + os.linesep + \ ' close browser' f = codecs.open(script_path, 'w', 'utf-8') f.write(script_str) f.close() scripts[script_name] = script_path taskinfo = {} taskinfo['system'] = cur_system taskinfo['executor'] = data['executor'] taskinfo['province'] = data['province'] taskinfo['city'] = data['city'] taskinfo_json = json.dumps(taskinfo) para = {'type': 'file'} para['path'] = script_path para['str'] = taskinfo_json para_list = [] para_list.append(para) proxy = MyProxy(settings.CLUSTER_MASTER_URL) if data['exectype'] == 'now': proxy.add_job('inspect', 'exec', para_list) return HttpResponseRedirect('/createplansuccess1/') #周期性巡检计划 task_instance = Task(test_suite = testsuite_instance, executor = data['executor'], system = cur_system_instance, province = data['province'], city = data['city']) task_instance.save() logger.info(u'巡检任务已存入数据库') hour = int(data['hour']) minute = int(data['minute']) exec_time = datetime.time(hour, minute) #用7位二进制数表示重复类型,例如每周一至周五运行,对应的二进制数为(0011111),对应的10进制数为31 repeat_type = 0 for item in data['repeat_type']:#data['repeat_type']的类型是字符型,范围为1~7 i = int(item) - 1 #转换为整形,然后将范围调整为0~6 repeat_type += 2**i #创建巡检计划实例 plan_instance = Plan(task = task_instance, exec_time = exec_time, repeat_type = repeat_type) plan_instance.save() proxy.add_plan(hour, minute, repeat_type,'inspect', 'exec', para_list, plan_instance.id) logger.info(u'巡检计划已存入数据库') return HttpResponseRedirect('/createplansuccess2/') else: form = PlanForm() return render_to_response('add_plan.html', {'form': form})
def create_plan(request): ''' 完成巡检计划新增工作 ''' if request.method == 'POST': form = PlanForm(request.POST) if form.is_valid(): data = form.cleaned_data cur_system = request.COOKIES["system"] cur_system_instance = System.objects.get(name=cur_system) testsuite_instance = TestSuite.objects.get( name=data['test_suite_name']) #巡检脚本名称(通过系统实例id和测试套件id保证巡检脚本名称的唯一性) script_name = str(cur_system_instance.id) + '-' + str( testsuite_instance.id) #巡检脚本路径 script_path = settings.SCRIPT_ROOT + cur_system_instance.english_name + str( testsuite_instance.id) + '.txt' logger.info(u'巡检脚本路径:' + script_path) if not os.path.exists(settings.SCRIPT_ROOT): os.makedirs(LOG_ROOT) if script_name not in scripts: logger.info(u'新建巡检脚本') script_str = '*** Settings ***' + os.linesep \ + 'Library Selenium2Library' + os.linesep + os.linesep \ + '*** Variables ***' + os.linesep \ + '${timeout} ' + str(timeout) + os.linesep + os.linesep \ + '*** Test Cases ***' + os.linesep #获得当前系统的所有测试用例 candidate_test_cases = TestCase.objects.filter( system=cur_system_instance) #将testsuite选中的测试用例名称按行分为列表 testcase_list = testsuite_instance.testcases.split('\n') #去除最后一个空行 testcase_list = testcase_list[:-1] for testcase_item in testcase_list: #列表中的每一项的格式为'序号 测试用例名称' testcase_name = testcase_item.split(' ')[1] #去除换行符 testcase_name = testcase_name.strip('\r') testcase_instance = candidate_test_cases.get( name=testcase_name) script_str = script_str + testcase_instance.name + os.linesep script_str = script_str + testcase_instance.content + os.linesep + os.linesep script_str = script_str + ' delete all cookies' + os.linesep + \ ' close browser' f = codecs.open(script_path, 'w', 'utf-8') f.write(script_str) f.close() scripts[script_name] = script_path taskinfo = {} taskinfo['system'] = cur_system taskinfo['executor'] = data['executor'] taskinfo['province'] = data['province'] taskinfo['city'] = data['city'] taskinfo_json = json.dumps(taskinfo) para = {'type': 'file'} para['path'] = script_path para['str'] = taskinfo_json para_list = [] para_list.append(para) proxy = MyProxy(settings.CLUSTER_MASTER_URL) if data['exectype'] == 'now': proxy.add_job('inspect', 'exec', para_list) return HttpResponseRedirect('/createplansuccess1/') #周期性巡检计划 task_instance = Task(test_suite=testsuite_instance, executor=data['executor'], system=cur_system_instance, province=data['province'], city=data['city']) task_instance.save() logger.info(u'巡检任务已存入数据库') hour = int(data['hour']) minute = int(data['minute']) exec_time = datetime.time(hour, minute) #用7位二进制数表示重复类型,例如每周一至周五运行,对应的二进制数为(0011111),对应的10进制数为31 repeat_type = 0 for item in data[ 'repeat_type']: #data['repeat_type']的类型是字符型,范围为1~7 i = int(item) - 1 #转换为整形,然后将范围调整为0~6 repeat_type += 2**i #创建巡检计划实例 plan_instance = Plan(task=task_instance, exec_time=exec_time, repeat_type=repeat_type) plan_instance.save() proxy.add_plan(hour, minute, repeat_type, 'inspect', 'exec', para_list, plan_instance.id) logger.info(u'巡检计划已存入数据库') return HttpResponseRedirect('/createplansuccess2/') else: form = PlanForm() return render_to_response('add_plan.html', {'form': form})