def team_edit(request, tid): if request.method == 'POST': t = get_model(Team, id=tid) t.name = request.POST.get('name', '') t.remark = request.POST.get('remarks', '') user_id = request.session['user_id'] t.creator = get_model(User, id=user_id) try: t.clean() except ValidationError as error: return render(request, 'team/edit.html', error.message_dict) try: t.save() except Exception as e: return render(request, 'team/edit.html', {'error': e.args}) te = get_model(Team, id=tid) user_id = request.session['user_id'] mt = get_model(ModularTable, get=False, team_id=tid) if not mt: mt = create_model(tid) info = { 'te': te, 'status': False, 'tid': tid, 'mt': mt.order_by('order_id') } if te.creator.id == user_id: info['status'] = True return render(request, 'team/edit.html', info) else: return render(request, 'team/edit.html', info)
def team_join(request): if request.method == 'GET': return render(request, 'team/apply.html') else: tid = request.POST.get('tid', '') super_id = get_model(Team, id=tid).creator_id user_id = request.session.get('user_id', 0) if user_id == 0: return JsonResponse.AbnormalCheck('登录过期了呢,请重新登录~~~') if super_id != user_id: status = 0 tus = TeamUsers.objects.filter(team_id=tid).filter(user_id=user_id) if tus: for t in tus: status = t.status if status == 0: return JsonResponse.AbnormalCheck('申请已提交,等待管理员审核中~~~') else: return JsonResponse.OK('申请已通过,赶快进入体验吧~~~') else: tu = TeamUsers() tu.team = get_model(Team, id=tid) tu.user = get_model(User, id=user_id) try: tu.save() except Exception as e: return JsonResponse.AbnormalCheck('申请失败!{}'.format(e)) return JsonResponse.OK('申请成功,等待管理员审核中~~~') else: return JsonResponse.SkipLink()
def index(request, tid): t = get_model(Team, id=tid) if not t: return redirect('/team/') request.session['tid'] = tid model_list = get_model(ModularTable, get=False, team_id=tid).order_by('order_id') return render(request, 'page/首页.html', { 'tid': tid, 'model_list': model_list })
def keyword_edit(request, keyword_id): from Product.models import Keyword, Project from Autotest_platform.helper.util import get_model kw = get_model(Keyword, id=keyword_id) projectId = kw.projectId if kw else 0 p = get_model(Project, id=projectId) projectName = p.name if projectId > 0 and p else "通用" keywordName = kw.name if kw else "" return render( request, "page/5-2编辑关键字.html", { "id": projectId, "projectName": projectName, "keywordId": keyword_id, "keywordName": keywordName })
def model_nav(request): from .models import ModularTable from Autotest_platform.helper.util import get_model tid = request.session.get('tid', None) model_list = get_model(ModularTable, get=False, team_id=tid) return tid, model_list
def register(request): if request.method == 'GET': return render(request, 'page/register.html') else: username = request.POST.get('username', '') password = request.POST.get('password', '') pswd_again = request.POST.get('pswd-again', '') email = request.POST.get('email', '') msg = register_info_logic(username, password, pswd_again, email) if msg != 'ok': log.error('register error:{}'.format(msg)) return render(request, 'page/register.html', {'error': msg}) else: User.objects.create_user(username=username, password=password, email=email) user = auth.authenticate(username=username, password=password) if user is not None: auth.login(request, user) request.session['user'] = username # 将session信息记录到浏览器 user_id = get_model(User, username=username).id request.session['user_id'] = user_id # 将session信息记录到浏览器 response = HttpResponseRedirect('/') log.info('用户: {} 注册并登录成功!'.format(username)) request.session.set_expiry(None) # 关闭浏览器后,session失效 return response
def keyword_edit(request, keyword_id): kw = get_model(Keyword, id=keyword_id) project_id = kw.project_id if kw else 0 p = get_model(Project, id=project_id) project_name = p.name if project_id is not None and p else '通用关键字封装' keyword_name = kw.name if kw else '' tid, model_list = model_nav(request) info = { 'id': project_id, 'projectName': project_name, 'keywordId': keyword_id, 'keywordName': keyword_name, 'tid': tid, 'model_list': model_list } return render(request, 'page/5-2编辑关键字.html', info)
def timingRunning(): from Product.models import Task, TestCase, Result from Autotest_platform.helper.util import get_model tasks = Task.objects.filter(timing=1) for t in tasks: browsers = json.loads(t.browsers) if t.browsers else [] testcases = json.loads(t.testcases) if t.testcases else [] for tc in testcases: environments = tc.get("environments", []) tc = get_model(TestCase, id=tc.get("id", 0)) r = Result.objects.create(projectId=tc.projectId, testcaseId=tc.id, checkValue=tc.checkValue, checkType=tc.checkType, checkText=tc.checkText, selectText=tc.selectText, title=tc.title, beforeLogin=tc.beforeLogin, steps=tc.steps, parameter=tc.parameter, browsers=json.dumps(browsers, ensure_ascii=False), environments=json.dumps( environments, ensure_ascii=False), taskId=t.id) SplitTask.delay(r.id)
def create_team(request): if request.method == 'POST': t = Team() t.name = request.POST.get('name', '') t.remark = request.POST.get('remarks', '') user_id = request.session['user_id'] t.creator = get_model(User, id=user_id) try: t.clean() except ValidationError as error: return render(request, 'team/create.html', error.message_dict) try: t.save() except Exception as e: return render(request, 'team/create.html', {'error': e.args}) tu = TeamUsers() tu.team_id = t.id tu.user_id = t.creator_id tu.status = 1 try: tu.save() except Exception as e: return render(request, 'team/create.html', {'error': e.args}) return HttpResponseRedirect('/team/') return render(request, 'team/create.html')
def team_apply(request, tid): if request.method == 'POST': apply_id = request.POST.get('apply_id') tu = get_model(TeamUsers, get=False, id=apply_id) tu.update(status=1) return JsonResponse.OK() tu = TeamUsers.objects.filter(team_id=tid).filter(status=0) return render(request, 'team/apply.html', {'join': tu, 'tid': tid})
def project_config(request, project_id): from Product.models import Project from Autotest_platform.helper.util import get_model p = get_model(Project, id=project_id) name = p.name if p else "" return render(request, "page/2项目管理--环境配置.html", { "projectId": project_id, "projectName": name })
def project_config(request, project_id): p = get_model(Project, id=project_id) name = p.name if p else '' tid, model_list = model_nav(request) info = { 'projectId': project_id, 'projectName': name, 'tid': tid, 'model_list': model_list } return render(request, 'page/2项目管理--环境配置.html', info)
def login_view(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = auth.authenticate(username=username, password=password) # 认证给出的用户名和密码 if user is not None and user.is_active: # 判断用户名和密码是否有效 auth.login(request, user) request.session['user'] = username # 跨请求的保持user参数 user_id = get_model(User, username=username).id request.session['user_id'] = user_id request.session.set_expiry(None) # 关闭浏览器后,session失效 response = HttpResponseRedirect('/team/') delete_testcase(settings.MEDIA_ROOT) delete_testcase(settings.LOG_PATH) return response else: messages.add_message(request, messages.WARNING, '账户或者密码错误,请检查') return render(request, 'page/1登录.html') elif request.method == 'GET': return render(request, 'page/1登录.html')
def create_model(tid): from .models import ModularTable from Autotest_platform.helper.util import get_model mt_list = [] sign_dict = [ {"id": 1, "model_name": "项目管理", "url": "/admin/project", 'Icon': 'fa fa-desktop', 'team_id': tid}, {"id": 2, "model_name": "页面管理", "url": "/admin/page", 'Icon': 'fa fa-bar-chart', 'team_id': tid}, {"id": 3, "model_name": "页面元素", "url": "/admin/element", 'Icon': 'fa fa-fw fa-qrcode', 'team_id': tid}, {"id": 4, "model_name": "关键字库", "url": "/admin/keyword", 'Icon': 'fa fa-fw fa-table', 'team_id': tid}, {"id": 5, "model_name": "测试用例", "url": "/admin/testcase", 'Icon': 'fa fa-w fa-edit', 'team_id': tid}, {"id": 6, "model_name": "测试结果", "url": "/admin/result", 'Icon': 'fa fa-fw fa-file', 'team_id': tid}, {"id": 7, "model_name": "登录配置", "url": "/admin/loginConfig", 'Icon': 'fa fa-fw fa-building', 'team_id': tid}, {"id": 8, "model_name": "任务管理", "url": "/admin/task", 'Icon': 'fa fa-fw fa-sitemap', 'team_id': tid}, ] for signer in sign_dict: mt_list.append( ModularTable(order_id=signer["id"], model_name=signer["model_name"], url=signer["url"], Icon=signer["Icon"], team_id=signer["team_id"])) ModularTable.objects.bulk_create(mt_list) mt = get_model(ModularTable, get=False, team_id=tid) return mt
def timingRunning(*args, **kwargs): from Product.models import TestCase, Result, TaskRelation from Autotest_platform.helper.util import get_model from djcelery.models import PeriodicTask if kwargs: name = kwargs['name'] if kwargs['name'] else None periodic = PeriodicTask.objects.get(name__exact=name) browsers = kwargs['browsers'] if kwargs['browsers'] else [] testcases = kwargs['testcases'] if kwargs['testcases'] else [] result_id_list = [] for tc in testcases: environments = tc.get('environments', []) tc = get_model(TestCase, id=tc.get('id', 0)) r = Result.objects.create(project_id=tc.project_id, testcase_id=tc.id, checkValue=tc.checkValue, checkType=tc.checkType, checkText=tc.checkText, selectText=tc.selectText, title=name, beforeLogin=tc.beforeLogin, team_id=tc.team_id, steps=tc.steps, parameter=tc.parameter, browsers=json.dumps(browsers, ensure_ascii=False), environments=json.dumps(environments, ensure_ascii=False), task_id=periodic.id) result_id_list.append(str(r.id)) SplitTask.delay(r.id) tr = TaskRelation.objects.create(result_id_list=json.dumps(result_id_list), result_id=result_id_list[0]) tr.save()
def SplitTaskRunning(splitResult_id): from Product.models import SplitResult, Browser, Environment, Element, Check, Result, EnvironmentLogin, LoginConfig from django.utils import timezone from django.conf import settings import os from Autotest_platform.PageObject.base_page import PageObject from Autotest_platform.helper.util import get_model split = SplitResult.objects.get(id=splitResult_id) result_ = Result.objects.get(id=split.result_id) steps = json.loads(result_.steps) if result_.steps else [] parameter = json.loads(split.parameter) if split.parameter else {} checkType = result_.checkType checkValue = result_.checkValue checkText = result_.checkText selectText = result_.selectText beforeLogin = json.loads(result_.beforeLogin) if result_.beforeLogin else [] split.status = 20 split.save() split.startTime = timezone.now() environment = get_model(Environment, id=split.environment_id) host = environment.host if environment and environment.host else '' driver = None make_params = {} step_num = 0 error_name = '' now = datetime.utcnow().strftime('%Y-%m-%d %H-%M-%S-%f')[:-1] img_path = os.path.join(settings.MEDIA_ROOT, now + '.png') try: driver = Browser.objects.get(id=split.browser_id).buid(host) except Exception as e: split.status = 40 split.remark = '浏览器初始化失败!{}'.format(e) split.finishTime = timezone.now() split.save() if driver: driver.quit() return if beforeLogin and len(beforeLogin) > 0: for bl in beforeLogin: login = get_model(LoginConfig, id=bl) loginCheckType = login.checkType loginCheckValue = login.checkValue loginCheckText = login.checkText loginSelectText = login.selectText if not login: split.loginStatus = 3 split.status = 50 split.remark = '找不到登陆配置,id=' + str(bl) split.finishTime = timezone.now() split.save() if driver: driver.quit() log.error(split.remark) return loginSteps = json.loads(login.steps) if login.steps else [] loginParameter = {} if environment: environmentLogin = get_model(EnvironmentLogin, loginId=bl, environment_id=environment.id) if environmentLogin: loginParameter = json.loads(environmentLogin.parameter) if environmentLogin.parameter else {} for loginStep in loginSteps: try: Step(loginStep.get('keywordId'), loginStep.get('values')).perform(driver, loginParameter, host) except Exception as e: split.loginStatus = 2 split.status = 40 try: driver.save_screenshot(img_path) split.error_name = now + '.png' except Exception as msg: log.warning('页面加载超时:{}'.format(msg)) split.step_num = 777 # 页面加载超时异常,无法截图 split.remark = '初始化登陆失败</br>登陆名称={}, </br>错误信息={}'.format(login.name, e) split.finishTime = timezone.now() split.save() if driver: driver.quit() log.error(split.remark) return if loginCheckType: time.sleep(2) if loginCheckType == Check.TYPE_URL: if not driver.current_url.endswith(str(loginCheckValue)): split.loginStatus = 2 split.status = 40 driver.save_screenshot(img_path) split.step_num = 888 split.error_name = now + '.png' split.remark = '初始化登陆失败</br>登陆名称=' + login.name + ' , </br>错误信息=登录断言不通过' split.finishTime = timezone.now() split.save() if driver: driver.quit() log.error(split.remark) return elif loginCheckType == Check.TYPE_ELEMENT: element = loginCheckValue if str(loginCheckValue).isdigit(): element = get_model(Element, id=loginCheckValue) try: PageObject().find_element(driver, element) except: split.loginStatus = 2 split.status = 40 driver.save_screenshot(img_path) split.step_num = 888 split.error_name = now + '.png' split.remark = '初始化登陆失败[ 登陆名称:' + login.name + ' , 错误信息:断言不通过' split.finishTime = timezone.now() split.save() if driver: driver.quit() log.error(split.remark) return else: split.loginStatus = 1 index = 1 for step in steps: values = step.get('values', []) keyword_id = step.get('keywordId') try: if 'make' in str(values): for key in values: if key.get('value', '').isdigit(): element = key['value'] element = get_model(Element, id=int(element)) if key.get('key', '') == 'make': PageObject().find_element(driver, element) make_text = PageObject().get_text(element) log.info('提取的文本是:{}'.format(make_text)) make_key = key.get('value') make_params.update({make_key: make_text}) for key in values: if key.get('value', '') in make_params.keys(): log.info('把提取的文本,赋值给需要输入的值:{}'.format(make_params[key['value']])) key['value'] = make_params[key['value']] Step(keyword_id, values).perform(driver, parameter, host) index = index + 1 except RuntimeError as re: split.status = 40 driver.save_screenshot(img_path) split.step_num = index split.error_name = now + '.png' split.remark = '测试用例执行第' + str(index) + '步失败,错误信息:' + str(re.args) split.finishTime = timezone.now() split.save() if driver: driver.quit() log.error(split.remark) return except Exception as info: split.status = 40 driver.save_screenshot(img_path) split.step_num = index split.error_name = now + '.png' split.remark = '执行测试用例第' + str(index) + '步发生错误,请检查测试用例:' + str(info.args) split.finishTime = timezone.now() split.save() if driver: driver.quit() log.error(split.remark) return remark = '测试用例未设置断言,建议设置' time.sleep(2) if checkType: if checkType == Check.TYPE_URL: TestResult = driver.current_url.endswith(checkValue) if not TestResult: if not split.expect: remark = '测试通过' else: driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' remark = '测试不通过,预期结果为[' + checkValue + '], 但实际结果为[' + driver.current_url + ']' else: if split.expect: remark = '测试通过' else: driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' remark = '测试不通过,预期结果为[' + checkValue + '], 但实际结果为[' + driver.current_url + ']' elif checkType == Check.TYPE_ELEMENT: element = checkValue expect_text = checkText select_text = selectText if str(checkValue).isdigit(): element = get_model(Element, id=int(element)) try: PageObject().find_element(driver, element) actual_text = PageObject().find_element(driver, element).text if select_text == 'all': if expect_text == actual_text: TestResult = True else: TestResult = False if TestResult: if split.expect: remark = '测试通过,预期断言值完全匹配实际断言值。' else: driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' remark = '测试不通过,预期结果失败,但实际结果是成功。' else: driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' if not split.expect: remark = '测试通过,预期结果失败,实际结果也是失败。' else: remark = '测试不通过,预期结果为[' + expect_text + '],但实际结果为[' + actual_text + ']' else: if expect_text in actual_text: TestResult = True else: TestResult = False if TestResult: if split.expect: remark = '测试通过,预期断言值包含匹配实际断言值。' else: driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' remark = '测试不通过,预期结果失败,但实际结果是成功。' else: driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' if not split.expect: remark = '测试通过,预期结果失败,实际结果也是失败。' else: remark = '测试不通过,预期结果为[' + expect_text + '],但实际结果为[' + actual_text + ']' except: TestResult = False driver.save_screenshot(img_path) step_num = 999 error_name = now + '.png' remark = '当前元素定位已改变,请及时更新定位!' if driver: driver.quit() split.status = 30 if TestResult else 40 split.remark = remark split.finishTime = timezone.now() split.step_num = step_num split.error_name = error_name split.save() log.error(remark) return
def get_queryset(self): team_list = get_model(Team, get=False) return team_list
def __init__(self, keyword_id, values): from .models import Keyword, Params from Autotest_platform.helper.util import get_model self.keyword = get_model(Keyword, id=keyword_id) self.params = [Params(value) for value in values]
def SplitTaskRunning(splitResult_id): from Product.models import SplitResult, Browser, Environment, Element, Check, Result, EnvironmentLogin, LoginConfig import django.utils.timezone as timezone from Autotest_platform.PageObject.Base import PageObject from Autotest_platform.helper.util import get_model split = SplitResult.objects.get(id=splitResult_id) result_ = Result.objects.get(id=split.resultId) steps = json.loads(result_.steps) if result_.steps else [] parameter = json.loads(split.parameter) if split.parameter else {} checkType = result_.checkType checkValue = result_.checkValue checkText = result_.checkText selectText = result_.selectText beforeLogin = json.loads( result_.beforeLogin) if result_.beforeLogin else [] split.status = 20 split.save() split.startTime = timezone.now() environment = get_model(Environment, id=split.environmentId) host = environment.host if environment and environment.host else '' driver = None try: driver = Browser.objects.get(id=split.browserId).buid() except: split.status = 40 split.remark = '浏览器初始化失败' split.finishTime = timezone.now() split.save() if driver: driver.quit() return if beforeLogin and len(beforeLogin) > 0: for bl in beforeLogin: login = get_model(LoginConfig, id=bl) loginCheckType = login.checkType loginCheckValue = login.checkValue loginCheckText = login.checkText loginSelectText = login.selectText if not login: split.loginStatus = 3 split.status = 50 split.remark = "找不到登陆配置,id=" + str(bl) split.finishTime = timezone.now() split.save() if driver: driver.quit() return loginSteps = json.loads(login.steps) if login.steps else [] loginParameter = {} if environment: environmentLogin = get_model(EnvironmentLogin, loginId=bl, environmentId=environment.id) if environmentLogin: loginParameter = json.loads( environmentLogin.parameter ) if environmentLogin.parameter else {} for loginStep in loginSteps: try: Step(loginStep.get("keywordId"), loginStep.get("values")).perform( driver, loginParameter, host) except Exception as e: split.loginStatus = 2 split.status = 50 split.remark = "初始化登陆失败</br>登陆名称=" + login.name + " , </br>错误信息=" + ( "".join(e.args)) split.finishTime = timezone.now() split.save() if driver: driver.quit() return if loginCheckType: time.sleep(2) if loginCheckType == Check.TYPE_URL: if not driver.current_url.endswith(str(loginCheckValue)): split.loginStatus = 2 split.status = 50 split.remark = "初始化登陆失败</br>登陆名称=" + login.name + " , </br>错误信息=登录断言不通过" split.finishTime = timezone.now() split.save() if driver: driver.quit() return elif loginCheckType == Check.TYPE_ELEMENT: element = loginCheckValue if str(loginCheckValue).isdigit(): element = get_model(Element, id=loginCheckValue) try: PageObject.find_element(driver, element) except: split.loginStatus = 2 split.status = 50 split.remark = "初始化登陆失败[ 登陆名称:" + login.name + " , 错误信息:断言不通过" split.finishTime = timezone.now() split.save() if driver: driver.quit() return else: split.loginStatus = 1 index = 1 for step in steps: try: Step(step.get("keywordId"), step.get("values")).perform(driver, parameter, host) index = index + 1 except RuntimeError as re: split.status = 40 split.remark = "测试用例执行第" + str(index) + "步失败,错误信息:" + str(re.args) split.finishTime = timezone.now() split.save() if driver: driver.quit() return except Exception as info: split.status = 40 split.remark = "执行测试用例第" + str(index) + "步发生错误,请检查测试用例:" + str( info.args) split.finishTime = timezone.now() split.save() if driver: driver.quit() return remark = '测试用例未设置断言,建议设置' time.sleep(2) if checkType: if checkType == Check.TYPE_URL: TestResult = driver.current_url.endswith(checkValue) if not TestResult: if not split.expect: remark = '测试通过' else: remark = '测试不通过,预期结果为["' + checkValue + '"], 但实际结果为["' + driver.current_url + '"]' else: if split.expect: remark = '测试通过' else: remark = '测试不通过,预期结果为["' + checkValue + '"], 但实际结果为["' + driver.current_url + '"]' elif checkType == Check.TYPE_ELEMENT: element = checkValue expect_text = checkText select_text = selectText if str(checkValue).isdigit(): element = get_model(Element, id=int(element)) try: PageObject.find_element(driver, element) actual_text = PageObject.find_element(driver, element).text if select_text == 'all': if expect_text == actual_text: TestResult = True else: TestResult = False if TestResult: if split.expect: remark = '测试通过,预期断言值完全匹配实际断言值。' else: remark = '测试不通过,预期结果失败,但实际结果是成功。' else: if not split.expect: remark = '测试通过,预期结果失败,实际结果也是失败。' else: remark = '测试不通过,预期结果为["' + expect_text + '"],但实际结果为["' + actual_text + '"]' else: if expect_text in actual_text: TestResult = True else: TestResult = False if TestResult: if split.expect: remark = '测试通过,预期断言值包含匹配实际断言值。' else: remark = '测试不通过,预期结果失败,但实际结果是成功。' else: if not split.expect: remark = '测试通过,预期结果失败,实际结果也是失败。' else: remark = '测试不通过,预期结果为["' + expect_text + '"],但实际结果为["' + actual_text + '"]' except: TestResult = False remark = '当前元素定位已改变,请及时更新定位!' if driver: driver.quit() split.status = 30 if TestResult else 40 split.remark = remark split.finishTime = timezone.now() split.save() return