def parameter_check(self, data): """ 校验参数 :param data: :return: """ try: # 校验project_id类型为int if not isinstance(data["project_id"], int) or not isinstance( data["host_id"], int): return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) except KeyError: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
def parameter_check(self,data): """ 校验删除id列表的有效性 :param data: :return: """ try: if not isinstance(data['ids'],list): return JsonResponse(code=code.CODE_PARAMETER_ERROR) for i in data['ids']: if not isinstance(i,int): return JsonResponse(code=code.CODE_PARAMETER_ERROR) except KeyError: return JsonResponse(code=code.CODE_KEY_ERROR)
def post(self,request): try: myFile =request.FILES.get("file", None) # 获取上传的文件,如果没有文件,则默认为None if not myFile: return JsonResponse(code="999995", msg="获取文件失败!") destination = open(os.path.join("./api_test/upload",myFile.name),'wb+') # 打开特定的文件进行二进制的写操作 for chunk in myFile.chunks(): # 分块写入文件 destination.write(chunk) return JsonResponse(data=[], code="999999", msg="执行成功!") except: logging.error(traceback.format_exc()) return JsonResponse(code="999995", msg="执行失败") finally: destination.close()
def parameter_check(self, data): """ 校验参数 :param data: :return: """ try: # 校验project_id, id类型为int if not data["project_id"] or not data["api_id"] or not data["id"]: return JsonResponse(code="999996", msg="参数有误!") if not isinstance(data["project_id"], int) or not isinstance(data["api_id"], int) or not isinstance(data["id"], int): return JsonResponse(code="999996", msg="参数有误!") except KeyError: return JsonResponse(code="999996", msg="参数有误!")
def parameter_check(self, data): """ 校验参数 :param data: :return: """ try: if not isinstance(data["ids"], list): for i in data["ids"]: if not isinstance(i, int): return JsonResponse(code="999995", msg="参数有误!") return JsonResponse(code="999995", msg="参数有误!") except KeyError: return JsonResponse(code="999995", msg="参数有误!")
def get(self, request): """ 获取最近十次的测试数据 project_id 项目ID :param request: :return: """ project_id = request.GET.get("project_id") if not project_id: return JsonResponse(code="999996", msg="参数有误!") if not project_id.isdecimal(): return JsonResponse(code="999996", msg="参数有误!") try: pro_data = Project.objects.get(id=project_id) except ObjectDoesNotExist: return JsonResponse(code="999995", msg="项目不存在!") pro_data = ProjectSerializer(pro_data) if not pro_data.data["status"]: return JsonResponse(code="999985", msg="该项目已禁用") try: data = AutomationTestLatelyTenTimeSerializer( AutomationTaskRunTime.objects.filter( project=project_id).order_by("-startTime")[:10], many=True).data except IndexError: data = AutomationTestLatelyTenTimeSerializer( AutomationTaskRunTime.objects.filter( project=project_id).order_by("-startTime"), many=True).data for i in data: result = AutomationCaseTestResult.objects.filter( testTime=i["startTime"]) _pass = 0 fail = 0 error = 0 for j in result: if j.result == "PASS": _pass = _pass + 1 elif j.result == "ERROR": error = error + 1 elif j.result == "FAIL": fail = fail + 1 total = _pass + error + fail if total: data[data.index(i)]["fail"] = "%.4f" % (fail / total) data[data.index(i)]["error"] = "%.4f" % (error / total) data[data.index(i)]["pass"] = "******" % (1 - fail / total - error / total) data.reverse() return JsonResponse(code="999999", msg="成功!", data=data)
def parameter_ids_check(data): """ 检查传入项目id或者id列表参数可用性 :param data: :return: """ try: if not isinstance(data['ids'], list) or not isinstance(data['project_id'], int): return JsonResponse(code=code.CODE_PARAMETER_ERROR) for i in data['ids']: if not isinstance(i, int): return JsonResponse(code=code.CODE_PARAMETER_ERROR) except KeyError: return JsonResponse(code=code.CODE_KEY_ERROR)
def all_parameter_check(data): """ 校验参数 :param data: :return: """ try: if not isinstance(data['project_id'], int): return JsonResponse(code=code.CODE_PARAMETER_ERROR, msg='项目id错误') if not data['sender_mailbox'] or not data['user_name'] or not data[ 'mail_token'] or not data['mail_smtp']: return JsonResponse(code=code.CODE_PARAMETER_ERROR) except KeyError: return JsonResponse(code=code.CODE_KEY_ERROR)
def post(self, request): """ 钉钉登录 :param request: :return: """ data = JSONParser().parse(request) timestamp = str(int(time.time() * 1000)) response = requests.post( url= 'https://oapi.dingtalk.com/sns/getuserinfo_bycode?signature={}×tamp={}&accessKey=dingoapfjxo0dzezwe47sy' .format(parse.quote(signature(timestamp)), timestamp), json={"tmp_auth_code": data['code']}) try: response = response.json() if response["errcode"] == 0: try: user = UserProfile.objects.get( unionid=response['user_info']['unionid']) user = User.objects.get(id=user.user_id) except Exception as e: password = make_password('admin') with transaction.atomic(): try: user = User.objects.create( username=pypinyin.slug( response['user_info']['nick'], separator=''), password=password, first_name=response['user_info']['nick']) except Exception as e: user = User.objects.create( username=pypinyin.slug( response['user_info']['nick'], separator='') + str(random.randint(0, 9999)), password=password, first_name=response['user_info']['nick']) UserProfile.objects.create( user=user, openId=response['user_info']['openid'], unionid=response['user_info']['unionid']) data = TokenSerializer(Token.objects.get(user=user)).data data["userphoto"] = '/file/userphoto.jpg' return JsonResponse(data=data, code="999999", msg="成功") else: return JsonResponse(code="999998", msg='登录失败!') except: return JsonResponse(code="999998", msg='登录失败!')
def parameter_check(self, data): """ 校验参数 :param data: :return: """ try: # 校验project_id类型为int if not isinstance(data["project_id"], int): return JsonResponse(code="999995", msg="参数有误!") # 必传参数 name, host if not data["name"] or not data["host"]: return JsonResponse(code="999995", msg="参数有误!") except KeyError: return JsonResponse(code="999995", msg="参数有误!")
def parameter_check(self, data): """ 校验参数 :param data: :return: """ try: # 校验project_id类型为int if not isinstance(data["project_id"], int): return JsonResponse(code="999996", msg="参数有误!") # 必传参数 name, host if not data["reportFrom"] or not data["mailUser"] or not data["mailPass"] or not data["mailSmtp"]: return JsonResponse(code="999996", msg="参数有误!") except KeyError: return JsonResponse(code="999996", msg="参数有误!")
def post(self, request): """ 删除配置 :param request: :return: """ data = request.data try: for j in data["ids"]: obj = User.objects.filter(id=j) if obj: obj.delete() return JsonResponse(code="999999", msg="成功!") except ObjectDoesNotExist: return JsonResponse(code="999995", msg="不存在!")
def get_test_case(data): """ 判断当前id对应的测试用例是否存在,如存在则返回 :param data: :return: """ if not data['automation_test_case_id'] or not isinstance( data['automation_test_case_id'], int): return JsonResponse(code=code.CODE_PARAMETER_ERROR) try: test_case = AutomationTestCase.objects.get( id=data['automation_test_case_id'], project=data['project_id']) except ObjectDoesNotExist: return JsonResponse(code="999987", msg="测试用例不存在!") return test_case
def parameter_check(self, data): """ 验证参数 :param data: :return: """ try: # 必传参数 name, version, type if not data["name"] or not data["version"] or not data["type"]: return JsonResponse(code="999996", msg="参数有误!") # type 类型 Web, App if data["type"] not in ["Web", "App"]: return JsonResponse(code="999996", msg="参数有误!") except KeyError: return JsonResponse(code="999996", msg="参数有误!")
def project_status_check(request): """ 项目状态检查,检查get请求中的project_id对应的项目状态 :param request: :return: """ project_id = request.GET.get('project_id') if not project_id.isdecimal(): return JsonResponse(code=code.CODE_PARAMETER_ERROR) try: project = Project.objects.get(id=project_id) except ObjectDoesNotExist: return JsonResponse(code=code.CODE_OBJECT_NOT_EXIST, msg="项目不存在或已删除!") if not project.status: return JsonResponse(code=code.CODE_PROJECT_DISABLE)
def project_info(request): """ 获取项目详情 project_id 项目id :return: """ project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) try: obj = Project.objects.get(id=project_id) serialize = ProjectSerializer(obj) return JsonResponse(data=serialize.data, code_msg=GlobalStatusCode.success()) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def get_availability_project(data, user): """ 检查项目是否存在/可用/用户是否有权限 :param request: :return: 项目如果可用返回项目,否则返回错误code """ try: project = Project.objects.get(id=data['project_id']) if not user.is_superuser and project.owner.is_superuser: return JsonResponse(code.CODE_NO_PERMISSION_ERROR, msg='用户无操作权限') if not project.status: return JsonResponse(code=code.CODE_PROJECT_DISABLE, msg='项目禁用') except ObjectDoesNotExist: return JsonResponse(code=code.CODE_OBJECT_NOT_EXIST, msg='项目不存在') return project
def post(self, request, apiAdr=None): url = "/"+apiAdr try: obj = ApiInfo.objects.get(apiAddress=url, mockStatus=True) except ObjectDoesNotExist: return JsonResponse(code="999984", data="未匹配到mock地址或未开启!") head_data = ApiHead.objects.filter(api=obj) if len(head_data): for i in head_data: head = i.name.upper().replace("-", "_") try: if head == "CONTENT_TYPE": if request.environ[head] != i.value: return Response(status=400) else: if request.environ["HTTP_"+head] != i.value: return Response(status=400) except KeyError: return Response(status=400) if obj.requestParameterType == "form-data": param = ApiParameter.objects.filter(api=obj) if len(param): for j in param: if j.required: if request.POST.get(j.name) is None: return Response(status=400) else: param = ApiParameterRaw.objects.filter(api=obj) if len(param): data = JSONParser().parse(request) result = check_json(data, json.loads(param[0].data)) if result == "fail": return Response(status=400) return Response(json.loads(obj.data), status=obj.mockCode)
def post(self, request): """ 删除接口 :param request: :return: """ data = JSONParser().parse(request) project = get_availability_project(data, request.user) result = parameter_ids_check(data) if isinstance(project, Project) else project if result: return result id_list = Q() for i in data['ids']: id_list = id_list | Q(id=i) api_list = APIInfo.objects.filter(id_list, project=data['project_id']) name_list = [] for j in api_list: name_list.append(str(j.name)) with transaction.atomic(): api_list.delete() record_dynamic(project=project.id, _type='删除', operation_object='接口', user=request.user.pk, data="删除接口分组,列表“%s”" % name_list) return JsonResponse(code=code.CODE_SUCCESS)
class Test(APIView): authentication_classes = (TokenAuthentication,) permission_classes = () def parameter_check(self,data): """ 校验参数 :param data: :return: """ try: if not data['project_id'] or not data['case_id'] or not data['id'] or not data['host_id']: return JsonResponse(code=code.CODE_PARAMETER_ERROR) except KeyError: return JsonResponse(code=code.CODE_PARAMETER_ERROR) def post(self,request): """ 执行 :param request: :return:0 """ data=JSONParser().parse(request) project=get_availability_project(data,request.user) result=self.parameter_check(data) if isinstance(project,Project) else project if result: return result try: case=AutomationTestCase.objects.get(id=data['case_id'],project=project.id) except ObjectDoesNotExist: return JsonResponse(code=code.CODE_OBJECT_NOT_EXIST,msg='测试用例不存在')
def post(self, request): """ 运行单接口 """ datad = JSONParser().parse(request) try: resu = apiRun(httpType=datad['httpType'], headers=datad['headDict'], data=datad['requestList'], path=datad['apiAddress']) print("111111111111111111111111111111") print(resu.text) except Exception as e: print(e) return JsonResponse(code="999998", msg="失败!") return JsonResponse(code="999999", msg="成功!")
def del_project(request): """ 删除项目 project_id 待删除的项目ID :return: """ project_id = request.POST.get('ids') id_list = project_id.split(',') for i in id_list: if not i.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) for j in id_list: obj = Project.objects.filter(id=int(j)) if obj: obj.delete() return JsonResponse(code_msg=GlobalStatusCode.success())
def get(self, request, apiAdr=None): """ get请求 :param request: :param apiAdr: :return: """ url = "/"+apiAdr try: obj = ApiInfo.objects.get(apiAddress=url, mockStatus=True) except ObjectDoesNotExist: return JsonResponse(code="999984", msg="未匹配到mock地址或未开启!") head_data = ApiHead.objects.filter(api=obj) if len(head_data): for i in head_data: head = i.name.upper().replace("-", "_") try: if head == "CONTENT_TYPE": if request.environ[head] != i.value: return Response(status=400) else: if request.environ["HTTP_"+head] != i.value: return Response(status=400) except KeyError: return Response(status=400) param = ApiParameter.objects.filter(api=obj) if len(param): for j in param: if j.required: if request.GET.get(j.name) is None: return Response(status=400) return Response(json.loads(obj.data), status=obj.mockCode)
def check_project_status(request): """ 检查项目是否存在/可用 :param request: :return: """ project_id = request.GET.get('project_id') if not project_id and not project_id.isdecimal(): return JsonResponse(code=code.CODE_PARAMETER_ERROR) try: project = Project.objects.get(id=project_id) except ObjectDoesNotExist: return JsonResponse(code=code.CODE_OBJECT_NOT_EXIST, msg='项目不存在') if not project.status: return JsonResponse(code=code.CODE_PROJECT_DISABLE) return project
def get(self, request, *args, **kwargs): """ 用户登录 :param request: :param args: :param kwargs: :return: """ try: if ssoLogin: url = "%s?redirect_uri=%s" % (ssoLogoutUrl, ssoRedirectUrl) requests.get(url=url) return JsonResponse(data={}, code="999999", msg="成功") except: logging.error(traceback.format_exc()) return JsonResponse(data={}, code="999995", msg="失败")
def del_email(request): """ 删除邮箱配置 :param request: :return: """ project_id = request.POST.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.success()) obi = Project.objects.filter(id=project_id) if obi: AutomationReportSendConfig.objects.filter(project=project_id).delete() record_dynamic(project_id, "删除", "邮箱", "删除邮箱配置") return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def post(self, request): """ 删除用例的api接口 :param request: :return: """ data = JSONParser().parse(request) project = get_availability_project(data, request.user) test_case = get_test_case(data) if not isinstance(project, Project): return project if not isinstance(test_case, AutomationTestCase): return test_case for api_id in data['ids']: case_api = AutomationCaseApi.objects.filter( id=api_id, automation_test_case=test_case.id) if len(case_api) != 0: name = case_api[0].name case_api.delete() record_dynamic(project=project.id, _type="删除", operation_object="用例接口", user=request.user.pk, data="删除用例\"%s\"的接口\"%s\"" % (test_case.case_name, name)) return JsonResponse(code=code.CODE_SUCCESS)
def get(self, request): """ 获取钉钉配置 :param request: :return: """ app_id = APPID return JsonResponse(code="999999", msg="成功!", data={"app_id": app_id})
def post(self, request): """ 删除项目 :param request: :return: """ data = JSONParser().parse(request) result = self.parameter_check(data) if result: return result try: for j in data["ids"]: obj = Project.objects.filter(id=j) obj.delete() return JsonResponse(code="999999", msg="成功") except ObjectDoesNotExist: return JsonResponse(code="999995", msg="项目不存在!")
def get_email(request): """ 获取邮箱配置 :param request: :return: """ project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.success()) obi = Project.objects.filter(id=project_id) if obi: data = AutomationReportSendConfigSerializer( AutomationReportSendConfig.objects.filter(project=project_id), many=True).data return JsonResponse(code_msg=GlobalStatusCode.success(), data=data) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())