コード例 #1
0
 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())
コード例 #2
0
 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)
コード例 #3
0
 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()
コード例 #4
0
 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="参数有误!")
コード例 #5
0
 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="参数有误!")
コード例 #6
0
 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)
コード例 #7
0
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)
コード例 #8
0
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)
コード例 #9
0
 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={}&timestamp={}&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='登录失败!')
コード例 #10
0
 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="参数有误!")
コード例 #11
0
 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="参数有误!")
コード例 #12
0
ファイル: user.py プロジェクト: willhuang1206/apitest
 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="不存在!")
コード例 #13
0
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
コード例 #14
0
 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="参数有误!")
コード例 #15
0
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)
コード例 #16
0
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())
コード例 #17
0
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
コード例 #18
0
ファイル: ApiDoc.py プロジェクト: yileye/api_automation_test
    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)
コード例 #19
0
ファイル: api.py プロジェクト: AqiComing/Aqi_Automations_API
 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)
コード例 #20
0
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='测试用例不存在')
コード例 #21
0
 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="成功!")
コード例 #22
0
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())
コード例 #23
0
    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)
コード例 #24
0
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
コード例 #25
0
ファイル: user.py プロジェクト: willhuang1206/apitest
 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="失败")
コード例 #26
0
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())
コード例 #27
0
 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)
コード例 #28
0
 def get(self, request):
     """
     获取钉钉配置
     :param request:
     :return:
     """
     app_id = APPID
     return JsonResponse(code="999999", msg="成功!", data={"app_id": app_id})
コード例 #29
0
 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="项目不存在!")
コード例 #30
0
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())