Пример #1
0
def project_link_user():
    data = request.get_json() or {}
    project_id = data.get('project_id')
    user_id_list = data.get('user_id_list')
    follow_type = data.get('follow_type')  # follow = 1, unfollow = 2

    if not follow_type or follow_type not in ['1', '2']:
        return bad_request('follow_type error')
    if not project_id:
        return bad_request('must include project id')
    project = Project.query.filter_by(id=project_id).first()
    if not project:
        return bad_request('project does not exist')

    for user_id in user_id_list:
        # print(username)
        # type(username)
        user = User.query.filter_by(id=user_id).first()
        if not user:
            return bad_request('user %s does not exist' % user_id)

        if follow_type == '1':
            if user in project.users.all():
                return bad_request('user %s is already in project %s' %
                                   (user.username, project.project_name))
            if user.username == project.owner_name:
                return bad_request(
                    'user %s is the owner of this project,not need to add' %
                    user.username)
            project.follow(user)

        if follow_type == '2':
            if user not in project.users.all():
                return bad_request('user %s is not in project %s' %
                                   (user.username, project.project_name))
            if user.username == project.owner_name:
                return bad_request(
                    'user %s is the owner of this project,cannot remove it' %
                    user.username)
            project.unfollow(user)

    session_commit()
    data = project.to_dict()

    if follow_type == '1':
        response = trueReturn(
            data, 'add users into project %s success' % project.project_name)
        return response

    if follow_type == '2':
        response = trueReturn(
            data,
            'remove users from project %s success' % project.project_name)
        return response
Пример #2
0
def create_project():
    data = request.get_json() or {}
    project_name = data.get('project_name')
    owner_name = data.get('owner_name')
    if not project_name or not owner_name:
        return bad_request('must include project name or owner_name')

    if Project.query.filter_by(project_name=project_name).first():
        return bad_request('please use a different project name')

    if not User.query.filter_by(username=owner_name).first():
        return bad_request('owner does not exist')

    project = Project(project_name=project_name, owner_name=owner_name)
    db.session.add(project)
    session_commit()
    project = Project.query.filter_by(project_name=project_name).first()
    if not project:
        return bad_request('create project fail')
    # project.add_user(g.current_user)
    # admins = User.admins_list()
    # if admins:
    #     for admin in admins:
    #         project.add_user(admin)
    # session_commit()
    data = project.to_dict()
    response = trueReturn(data, 'create project successfully')
    # response.status_code = 201
    return response
Пример #3
0
def logout():
    token = request.cookies.get('token')
    if not verify_token(token):
        return token_auth_error()
    g.current_user.revoke_token()
    response = trueReturn(message='登出成功')
    return response
Пример #4
0
def get_project_info():
    project_id = request.args.get('project_id', type=int)
    if not project_id:
        return bad_request('must include project id')

    project = g.current_user.followed_projects().filter_by(
        id=project_id).first()

    if not project:
        return bad_request('%s is not the member of project %d' %
                           (g.current_user.username, project_id))

    data = project.to_dict()
    response = trueReturn(data, 'Success')
    return response
Пример #5
0
def login():
    # if g.current_user:
    #     data = g.current_user.to_dict()
    #     response = trueReturn(data, '用户已登录')
    #     return response
    data = request.get_json() or {}
    username = data.get('username')
    password = data.get('password')
    if not username or not password:
        return bad_request('must include username or password')
    # user = User.query.filter_by(username=username).first()
    # if user is None or not user.check_password(password):
    #     return bad_request('Invalid username or password')
    if verify_password(username, password):
        data = get_token()
        data['username'] = username
        return trueReturn(data, '登录成功')
    else:
        return basic_auth_error()
Пример #6
0
def register():
    data = request.get_json() or {}
    if 'username' not in data or 'email' not in data or 'password' not in data:
        return bad_request('must include username, email and password fields')
    if User.query.filter_by(username=data['username']).first():
        return bad_request('please use a different username')
    if User.query.filter_by(email=data['email']).first():
        return bad_request('please use a different email address')
    user = User()
    user.from_dict(data)
    user.add()
    session_commit()
    if user.id:
        data = user.to_dict()
        response = trueReturn(data, '用户注册成功')
        # response.status_code = 201
        return response
    else:
        return bad_request('用户注册失败')
Пример #7
0
def update_project():
    data = request.get_json() or {}
    origin_project_id = data.get('origin_project_id')
    origin_owner_name = data.get('origin_owner_name')
    new_owner_name = data.get('owner_name')
    new_project_name = data.get('project_name')

    origin_user = User.query.filter_by(username=origin_owner_name).first()
    if not origin_user:
        return bad_request('owner does not exist')
    origin_project = Project.query.filter_by(id=origin_project_id).first()
    if not origin_project:
        return bad_request('original project %s does not exist' %
                           origin_project_id)

    # print(g.current_user)
    # print(origin_user)
    if origin_user != g.current_user:
        return bad_request(
            'you are not the owner of %s project, cannot update it' %
            origin_project.project_name)

    if new_owner_name and new_owner_name != origin_owner_name and \
            not User.query.filter_by(username=new_owner_name).first():
        return bad_request('user %s not registers yet' % new_owner_name)
    if new_project_name and new_project_name != origin_project.project_name and \
            Project.query.filter_by(project_name=new_project_name).first():
        return bad_request('please use a different project name')

    origin_project.from_dict(data)
    db.session.add(origin_project)
    session_commit()

    project = Project.query.filter_by(project_name=new_project_name).first()
    if not project:
        return bad_request('update project fail')

    data = project.to_dict()
    response = trueReturn(data, 'update project successfully')
    return response
Пример #8
0
def delete_project():
    data = request.get_json() or {}
    project_id = data.get('project_id')
    if not project_id:
        return bad_request('must include project id')

    # project = g.current_user.projects.filter_by(project_name=project_name).first()
    project = Project.query.filter_by(id=project_id).first()
    project_name = project.project_name

    if not project:
        return bad_request('%s project does not exist' % project_name)

    if project.owner_name != g.current_user.username:
        return bad_request(
            'you are not owner of %s project, cannot delete it' % project_name)

    if project.users.first():
        return bad_request('Cannot delete it as there are users in %s' %
                           project_name)

    if project.modules.first():
        return bad_request('Cannot delete it as there are modules in %s' %
                           project_name)

    if project.envs.first():
        return bad_request('Cannot delete it as there are envs in %s' %
                           project_name)

    db.session.delete(project)
    session_commit()

    if not Project.query.filter_by(project_name=project_name).first():
        response = trueReturn(message='delete project successfully')
        # response.status_code = 201
        return response
    else:
        return bad_request('delete project fail')
Пример #9
0
def get_projects():
    page_num = request.args.get('page_num', 1, type=int)
    per_page = request.args.get('per_page', 10, type=int)
    projects_info = Project.to_collection_dict(page_num, per_page)
    response = trueReturn(projects_info, '请求成功')
    return response
Пример #10
0
def operate_report():
    '''
    operate_type : '2' = 查, '3' = 删
    '''
    data = request.get_json() or {}
    report_id = data.get('report_id')
    operate_type = data.get('operate_type')
    testcase_id = data.get('testcase_id')

    if not operate_type:
        return bad_request('must include operate_type')

    if not testcase_id:
        return bad_request('must include testcase_id')

    testcase = TestCase.query.get_or_404(int(testcase_id))

    if Project.query.get(testcase.project_id
                         ) not in g.current_user.followed_projects().all():
        return bad_request('you are not the member of project')

    # 查
    if operate_type == '2':
        if report_id:
            if isinstance(report_id, list):
                return bad_request('please select one report only to review')

            report = Report.query.get_or_404(int(report_id))
            project = Project.query.get_or_404(testcase.project_id)

            if report.testcase_id != testcase_id:
                return bad_request('no report %s in testcase %s' %
                                   (report.name, testcase.name))

            if project not in g.current_user.followed_projects().all():
                return bad_request('you are not the member of project %s' %
                                   project.project_name)

            data = report.to_dict()
            return trueReturn(data, 'found it')
        else:
            page_num = int(data.get('page_num', 1))
            per_page = int(data.get('per_page', 10))
            payload = testcase.to_reports_dict(page_num, per_page)
            response = trueReturn(payload, 'list success')
            return response

    # 删
    if operate_type == '3':

        if not report_id or not isinstance(report_id, list):
            return bad_request('please select reports to del')

        for id in report_id:
            report = Report.query.get_or_404(id)
            db.session.delete(report)

        session_commit()
        data = {'report_id_list': report_id}
        response = trueReturn(data, 'delete success')
        return response
Пример #11
0
def get_users():
    # page_num = request.args.get('page_num', 1, type=int)
    # per_page = request.args.get('per_page', 10, type=int)
    users = User.to_collection_dict()
    response = trueReturn(users, 'success')
    return response
Пример #12
0
def operate_env():
    data = request.get_json() or {}
    project_id = data.get('project_id')
    env_name = data.get('env_name')
    env_id = data.get('env_id')
    operate_type = data.get('operate_type')

    if not operate_type:
        return bad_request('must include operate_type')

    # 增
    if operate_type == '1':
        if not project_id:
            return bad_request('must include project_id')
        project = Project.query.get_or_404(project_id)
        if project not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project %s' %
                               project.project_name)

        if not env_name:
            return bad_request('must include environment name')
        if Env.query.filter_by(env_name=env_name).first():
            return bad_request('there is environment %s in this project %s' %
                               (env_name, project.project_name))

        env = Env()
        env.from_dict(data)
        db.session.add(env)
        session_commit()

        data = env.to_dict()
        response = trueReturn(data, 'create environment success')
        return response

    # 改
    if operate_type == '2':
        print(data)
        if project_id:
            project = Project.query.get_or_404(project_id)
            if project not in g.current_user.followed_projects().all():
                return bad_request('you are not the member of project %s' %
                                   project.project_name)

        env = Env.query.get_or_404(env_id)
        if Project.query.get(env.project_id
                             ) not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project')

        if env_name and env_name != env.env_name and \
                Env.query.filter_by(env_name=env_name).first():
            return bad_request(
                'please use a different environment name or version')
        # if env_version and env_version != env.env_version and \
        #         Env.query.filter_by(env_name=env_name, env_version=env_version).first():
        #     return bad_request('please use a different environment name or version')

        env.from_dict(data)
        db.session.add(env)
        session_commit()

        data = env.to_dict()
        response = trueReturn(data, 'update environment success')
        return response

    # 查
    if operate_type == '3':
        '''
        [{
        'project_name': project_name,
        'env_list':[{}]
        }]
        '''
        if env_id:
            env = Env.query.get_or_404(env_id)
            return trueReturn(env.to_dict(), 'found it')

        page_num = int(data.get('page_num', 1))
        per_page = int(data.get('per_page', 10))
        payload = Env.to_collection_dict(page_num, per_page)
        response = trueReturn(payload, 'list success')
        return response

    # 删
    if operate_type == '4':
        if not env_id:
            return bad_request('please input env_id')
        env = Env.query.get_or_404(env_id)

        if Project.query.get(env.project_id
                             ) not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project')

        if env.testcases.all() or env.teststeps.all():
            return bad_request(
                'there are tests under this env, please delete those tests first'
            )

        db.session.delete(env)
        session_commit()
        data = {'env_id': env_id}
        response = trueReturn(data, 'delete success')
        return response
Пример #13
0
def operate_module():
    data = request.get_json() or {}
    project_id = data.get('project_id')
    module_name = data.get('module_name')
    origin_module_list = data.get('origin_module_list')
    origin_module_name = data.get('origin_module_name')
    operate_type = data.get('operate_type')

    if not project_id:
        return bad_request('must include project id')
    if not operate_type:
        return bad_request('must include operate_type')
    project = Project.query.filter_by(id=project_id).first_or_404()
    if project.owner_name != g.current_user.username:
        return bad_request('you are not the owner of project %s' %
                           project.project_name)

    # 增
    if operate_type == '1':
        if not module_name:
            return bad_request('please input module name')
        module = Module.query.filter_by(module_name=module_name).first()
        if module:
            return bad_request('there is module %s in this project %s' %
                               (module_name, project.project_name))

        data = {'module_name': module_name, 'project_id': project.id}
        module = Module()
        module.from_dict(data)
        db.session.add(module)
        session_commit()

        data = module.to_dict()
        response = trueReturn(data, 'create module success')
        return response

    # 改
    if operate_type == '2':
        if not origin_module_name:
            return bad_request('please select module name')
        module = Module.query.filter_by(
            module_name=origin_module_name).first_or_404()

        if not module_name or module_name == '':
            return bad_request('please input a new module name')

        if module_name == origin_module_name:
            return bad_request('no change')

        if Module.query.filter_by(module_name=module_name).first():
            return bad_request('please use a different module name')

        module.module_name = module_name
        db.session.add(module)
        session_commit()

        data = module.to_dict()
        response = trueReturn(data, 'update module success')
        return response

    # 查
    if operate_type == '3':
        data = {
            'project_name': project.project_name,
            'modules': project.to_dict()['modules']
        }
        response = trueReturn(data, 'list success')
        return response

    # 删
    if operate_type == '4':
        if not origin_module_list:
            return bad_request('please select module name')
        for origin_module in origin_module_list:
            origin_module_name = origin_module['name']
            module = Module.query.filter_by(
                module_name=origin_module_name).first_or_404()
            if module.apis.all():
                return bad_request(
                    'there are Apis under this module, please delete those Apis first'
                )
            db.session.delete(module)
        session_commit()
        data = origin_module_list
        response = trueReturn(data, 'delete success')
        return response
Пример #14
0
def operate_teststep():
    '''
    operate_type : '1' = 增,改  '2' = 查, '3' = 删
    '''
    data = request.get_json() or {}
    api_id = data.get('api_id')
    teststep_name = data.get('name')
    teststep_id = data.get('teststep_id')
    operate_type = data.get('operate_type')

    if not operate_type:
        return bad_request('must include operate_type')

    api = Api.query.get_or_404(api_id)
    project = Project.query.get_or_404(api.project_id)

    if project not in g.current_user.followed_projects().all():
        return bad_request('you are not the member of project %s' %
                           project.project_name)

    # 增,改
    if operate_type == '1':
        if not teststep_id:
            if not teststep_name:
                return bad_request('please input teststep_name')
            if TestStep.query.filter_by(name=teststep_name,
                                        api_id=api_id).first():
                return bad_request('Teststep %s already exists' %
                                   teststep_name)

            teststep = TestStep()
            teststep.from_dict(data)
            db.session.add(teststep)
            session_commit()

            data = teststep.to_dict()
            response = trueReturn(data, 'create teststep success')
            return response

        if teststep_id:
            teststep = TestStep.query.get_or_404(teststep_id)

            if teststep_name and teststep_name != teststep.name \
                    and TestStep.query.filter_by(name=teststep_name).first():
                return bad_request('please use a different teststep name')

            teststep.from_dict(data)
            db.session.add(teststep)
            session_commit()

            data = teststep.to_dict()
            response = trueReturn(data, 'update teststep success')
            return response

    # 查
    if operate_type == '2':
        if teststep_id:
            teststep = TestStep.query.get_or_404(teststep_id)
            return trueReturn(teststep.to_dict(), 'found it')
        else:
            return bad_request('please select one teststep')

    # 删
    if operate_type == '3':
        if not teststep_id:
            return bad_request('please select one teststep at least')

        teststep = TestStep.query.get_or_404(teststep_id)

        db.session.delete(teststep)

        session_commit()
        data = {'teststep_id': teststep_id}
        response = trueReturn(data, 'delete success')
        return response
Пример #15
0
def operate_testcase():
    '''
    operate_type : '1' = 增,改  '2' = 查, '3' = 删, '4' = tryRun, '5' = batch_Run
    '''
    data = request.get_json() or {}
    project_id = data.get('project_id')
    api_id = data.get('api_id')
    env_id = data.get('env_id')
    module_id = data.get('module_id')
    testcase_id = data.get('testcase_id')
    testcase_name = data.get('name')
    operate_type = data.get('operate_type')

    if not operate_type:
        return bad_request('must include operate_type')

    # 增,改
    if operate_type == '1':

        project = Project.query.get_or_404(project_id)
        api = Api.query.get_or_404(api_id)

        if project not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project %s' % project.project_name)

        if api not in project.apis.all():
            return bad_request('no api %s in project %s' % (api.name, project.project_name))

        if not testcase_id:
            if not testcase_name:
                return bad_request('please input testcase name')
            if TestCase.query.filter_by(name=testcase_name).first():
                return bad_request('Testcase %s already exists' % testcase_name)

            testcase = TestCase()
            testcase.from_dict(data)
            db.session.add(testcase)
            session_commit()
            data = testcase.to_dict()
            response = trueReturn(data, 'create testcase success')
            return response

        if testcase_id:
            testcase = TestCase.query.get_or_404(testcase_id)
            if Project.query.get(testcase.project_id) not in g.current_user.followed_projects().all():
                return bad_request('you are not the member of project')

            if testcase_name and testcase_name != testcase.name \
                    and TestCase.query.filter_by(name=testcase_name).first():
                return bad_request('please use a different testcase name')

            testcase.from_dict(data)
            db.session.add(testcase)
            session_commit()

            data = testcase.to_dict()
            response = trueReturn(data, 'update testcase success')
            return response

    # 查
    if operate_type == '2':
        if testcase_id:
            testcase = TestCase.query.get_or_404(testcase_id)
            if Project.query.get(testcase.project_id) not in g.current_user.followed_projects().all():
                return bad_request('you are not the member of project')
            return trueReturn(testcase.to_dict(), 'found it')

        if not project_id and not module_id:
            page_num = int(data.get('page_num', 1))
            per_page = int(data.get('per_page', 10))
            payload = TestCase.to_collection_dict(page_num, per_page)
            response = trueReturn(payload, 'list success')
            return response

        if module_id:
            module = Module.query.get_or_404(module_id)
            project = Project.query.get(module.project_id)
            if project not in g.current_user.followed_projects().all():
                return bad_request('you are not the member of project')
            api_items = []
            for api in module.apis.all():
                testcases = []
                for testcase in api.testcases.all():
                    testcase_data = testcase.to_dict()
                    testcases.append(testcase_data)
                api_data = {
                    'api_id': api.id,
                    'testcases': testcases
                }
                api_items.append(api_data)
            module_data = {
                'module_id': module.id,
                'api_items': api_items
            }
            response = trueReturn(module_data, 'list module-api-testcases success')
            return response

        if project_id:
            project = Project.query.get(project_id)
            if project not in g.current_user.followed_projects().all():
                return bad_request('you are not the member of project')
            module_items = []
            for module in project.modules.all():
                api_items = []
                for api in module.apis.all():
                    testcases = []
                    for testcase in api.testcases.all():
                        testcase_data = testcase.to_dict()
                        testcases.append(testcase_data)
                    api_data = {
                        'api_id': api.id,
                        'testcases': testcases
                    }
                    api_items.append(api_data)
                module_data = {
                    'module_id': module.id,
                    'api_items': api_items
                }
                module_items.append(module_data)
            project_data = {
                'project_id': project.id,
                'module_items': module_items
            }
            response = trueReturn(project_data, 'list project-module-api-testcases success')
            return response

    # 删
    if operate_type == '3':
        if not testcase_id:
            return bad_request('please input testcase_id')
        for id in testcase_id:
            testcase = TestCase.query.get_or_404(id)
            if Project.query.get(testcase.project_id) not in g.current_user.followed_projects().all():
                return bad_request('cannot delete it as you are not the member of project')
            db.session.delete(testcase)

        session_commit()
        data = {
            'testcase_id': testcase_id
        }
        response = trueReturn(data, 'delete success')
        return response

    # Run
    if operate_type == '4':
        if not data:
            return bad_request('no data found to run test')

        name = data.get('name')
        env = Env.query.get_or_404(env_id)

        config = {
            'name': name,
            'request': {
                'base_url': env.env_host,
            },
            'variables': json.loads(env.env_var)  # [{"user_agent": "iOS/10.3"}, {"user_agent": "iOS/10.3"}]
        }
        teststeps = json.loads(data.get('teststeps'))

        payload = []

        for teststep in teststeps:
            if teststep['step_id']:
                step_id = int(teststep['step_id'])
                teststep = TestStep.query.get_or_404(step_id)
            else:
                return bad_request('please add test steps')

            api = Api.query.get_or_404(teststep.api_id)

            if teststep.env_id:
                env = Env.query.get(teststep.env_id)
            else:
                env = None

            data = {
                'name': teststep.name,
                'req_method': api.req_method,
                'req_temp_host': env.env_host if env.env_host else '',
                'req_relate_url': api.req_relate_url,
                'req_data_type': api.req_data_type,
                'req_headers': teststep.req_headers if teststep.req_headers else api.req_headers,   # '{"Content-Type": "application/json"}'
                'req_cookies': teststep.req_cookies if teststep.req_cookies else api.req_cookies,  # '{"token": "application/json"}'
                'req_params': teststep.req_params if teststep.req_params else api.req_params,  # '{"token": "application/json"}'
                'req_body': teststep.req_body if teststep.req_body else api.req_body,   # '{"type": "ios"}'
                'variables': env.env_var if env.env_var else '',  # [{"user_agent": "iOS/10.3"}, ]
                'extracts': env.extracts if env.extracts else '',  # [{"user_agent": "iOS/10.3"}, {"user_agent": "iOS/10.3"}]
                'asserts': env.asserts if env.asserts else ''  # [{'eq': ['status_code', 200]}]
             }
            payload.append(data)
        # print(payload)
        # print(config)
        tester = Runner(payload, config)
        report = tester.run()
        report = json.loads(report)
        return trueReturn(report, 'run success')
Пример #16
0
def tests_batch_run():
    data = request.get_json() or {}
    project_id = data.get('project_id')
    test_id_items = data.get('test_id_items')

    if not len(test_id_items):
        return bad_request('no testcases selected')

    project = Project.query.get_or_404(project_id)
    if project not in g.current_user.followed_projects().all():
        return bad_request('you are not the member of project %s' % project.project_name)

    report_id_items = []
    for test_id in test_id_items:
        test_id = int(test_id)
        testcase = TestCase.query.get_or_404(test_id)
        if testcase not in project.testcases.all():
            return bad_request('no testcase id %d in project %s' % (test_id, project.project_name))

        name = testcase.name

        env = None
        if testcase.env_id:
            env = Env.query.get_or_404(testcase.env_id)

        config = {
            'name': name,
            'request': {
                'base_url': env.env_host if env else '',
            },
            'variables': json.loads(env.env_var) if env else []  # [{"user_agent": "iOS/10.3"}, {"user_agent": "iOS/10.3"}]
        }
        teststeps = json.loads(testcase.teststeps)

        payload = []

        for teststep in teststeps:
            if teststep['step_id']:
                step_id = int(teststep['step_id'])
                teststep = TestStep.query.get_or_404(step_id)
            else:
                return bad_request('please add test steps')

            api = Api.query.get_or_404(teststep.api_id)

            if teststep.env_id:
                env = Env.query.get(teststep.env_id)
            else:
                env = None

            data = {
                'name': teststep.name,
                'req_method': api.req_method,
                'req_temp_host': env.env_host if env.env_host else '',
                'req_relate_url': api.req_relate_url,
                'req_data_type': api.req_data_type,
                'req_headers': teststep.req_headers if teststep.req_headers else api.req_headers,   # '{"Content-Type": "application/json"}'
                'req_cookies': teststep.req_cookies if teststep.req_cookies else api.req_cookies,  # '{"token": "application/json"}'
                'req_params': teststep.req_params if teststep.req_params else api.req_params,  # '{"token": "application/json"}'
                'req_body': teststep.req_body if teststep.req_body else api.req_body,   # '{"type": "ios"}'
                'variables': env.env_var if env.env_var else '[]',  # [{"user_agent": "iOS/10.3"}, ]
                'extracts': env.extracts if env.extracts else '[]',  # [{"user_agent": "iOS/10.3"}, {"user_agent": "iOS/10.3"}]
                'asserts': env.asserts if env.asserts else '[]'  # [{'eq': ['status_code', 200]}]
             }
            payload.append(data)

        test = RunJob(payload, config)
        result = test.job()

        data = {
            'summary': result,
            'test_result': result['success'],
            'testcase_id': test_id,
            'name': name
        }

        report = Report()
        report.from_dict(data)
        db.session.add(report)
        session_commit()

        # tester = Runner(payload, config)
        # result = tester.run()
        # result = json.loads(result)
        #
        # data = {
        #     'summary': result,
        #     'test_result': result['success'],
        #     'testcase_id': test_id,
        #     'name': name
        # }
        #
        # report = Report()
        # report.from_dict(data)
        # db.session.add(report)
        # session_commit()

        report_id_items.append(report.id)

    response = trueReturn({'report_id_items': report_id_items}, 'tests run complete all, please check reports')
    return response
Пример #17
0
def operate_api():
    # operate_type : '1' = 增, '2' = 改, '3' = 查, '4' = 删, '5' = Run, '6' = 筛选查
    data = request.get_json() or {}
    module_id = data.get('module_id')
    project_id = data.get('project_id')
    api_name = data.get('name')
    api_id = data.get('api_id')
    operate_type = data.get('operate_type')

    if not operate_type:
        return bad_request('must include operate_type')

    # if data.get('req_body'):
    #     req_body = objlist_to_str(data.get('req_body'))
    #     data['req_body'] = req_body
    #
    # if data.get('req_cookies'):
    #     req_cookies = objlist_to_str(data.get('req_cookies'))
    #     data['req_cookies'] = req_cookies

    # 增
    if operate_type == '1':
        if not project_id:
            return bad_request('must include project_id')
        project = Project.query.get_or_404(project_id)
        if project not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project %s' %
                               project.project_name)
        if not module_id:
            return bad_request('must include module id')
        module = Module.query.get_or_404(module_id)
        if module not in project.modules.all():
            return bad_request('no module %s in project %s' %
                               (module.module_name, project.project_name))

        if not api_name:
            return bad_request('must include api name')
        if Api.query.filter_by(name=api_name).first():
            return bad_request('%s already in project %s' %
                               (api_name, project.project_name))

        api = Api()
        api.from_dict(data)
        db.session.add(api)
        session_commit()

        data = api.to_dict()
        response = trueReturn(data, 'create Api success')
        return response

    # 改
    if operate_type == '2':
        if not api_id:
            return bad_request('must include api_id')
        api = Api.query.get_or_404(api_id)
        if Project.query.get(api.project_id
                             ) not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project')

        if project_id and project_id != api.project_id:
            project = Project.query.get_or_404(project_id)
            if module_id and module_id != api.module_id:
                module = Module.query.get_or_404(module_id)
                if module not in project.modules.all():
                    return bad_request(
                        'module %s is not in project %s' %
                        (module.module_name, project.project_name))

        if api_name and api_name != api.name and \
                Api.query.filter_by(name=api_name, project_id=project_id).first():
            return bad_request('please use a different Api name')

        api.from_dict(data)
        db.session.add(api)
        session_commit()

        data = api.to_dict()
        response = trueReturn(data, 'update success')
        return response

    # 查
    if operate_type == '3':
        '''
           [{
           'project_id': project_id,
           'module_list':[
               {
                   'module_id': module_id,
                   'api_list': [{}]        
                }
           ]
           }]
        '''
        if api_id:
            api = Api.query.get_or_404(api_id)
            if Project.query.get(
                    api.project_id) not in g.current_user.followed_projects(
                    ).all():
                return bad_request('you are not the member of project')
            return trueReturn(api.to_dict(), 'found it')

        if not project_id and not module_id:
            page_num = int(data.get('page_num', 1))
            per_page = int(data.get('per_page', 10))
            payload = Api.to_collection_dict(page_num, per_page)
            response = trueReturn(payload, 'list success')
            return response

        # if module_id:
        #     module = Module.query.get_or_404(module_id)
        #     project = Project.query.get(module.project_id)
        #     if project not in g.current_user.followed_projects().all():
        #         return bad_request('you are not the member of project')
        #
        #     # api_list = []
        #     # for api in module.apis.all():
        #     #     api_data = api.to_dict()
        #     #     api_list.append(api_data)
        #     # module_data = {
        #     #     'module_id': module.id,
        #     #     'api_list': api_list
        #     # }
        #     response = trueReturn(module_data, 'list module-api success')
        #     return response
        #
        # if project_id:
        #     project = Project.query.get(project_id)
        #     if project not in g.current_user.followed_projects().all():
        #         return bad_request('you are not the member of project')
        #     module_list = []
        #     for module in project.modules.all():
        #         api_list = []
        #         for api in module.apis.all():
        #             api_data = api.to_dict()
        #             api_list.append(api_data)
        #         module_data = {
        #             'module_id': module.id,
        #             'api_list': api_list
        #         }
        #         module_list.append(module_data)
        #     project_data = {
        #         'project_id': project.id,
        #         'module_list': module_list
        #     }
        #     response = trueReturn(project_data, 'list project-module-api success')
        #     return response

    # 删
    if operate_type == '4':
        if not api_id:
            return bad_request('please input api_id')
        for id in api_id:
            api = Api.query.get_or_404(id)
            if Project.query.get(
                    api.project_id) not in g.current_user.followed_projects(
                    ).all():
                return bad_request('you are not the member of project')
            if api.module_id != module_id or api.project_id != project_id:
                return bad_request(
                    'api not in this module or this project, it might be something wrong'
                )
            db.session.delete(api)

        session_commit()
        data = {'api_id': api_id}
        response = trueReturn(data, 'delete success')
        return response

    # Run
    if operate_type == '5':

        if not data:
            return bad_request('no data found to run test')

        for field in ['req_headers', 'req_cookies', 'req_params', 'req_body']:
            if field in data:
                payload = objlist_to_str(data.get(field))
                data[field] = payload

        # print(data)
        tester = Runner([data])
        # try:
        report = tester.run()
        # except Exception as e:
        #     print(e)
        #     return bad_request('wrong request')

        report = json.loads(report)
        return trueReturn(report, 'run success')

    # 筛选查
    if operate_type == '6':
        if not project_id and not module_id:
            return bad_request('must include project_id or module_id')
        if module_id:
            module = Module.query.get_or_404(module_id)
            project = Project.query.get(module.project_id)
            modules = [module]
        else:
            project = Project.query.get(project_id)
            modules = project.modules.all()

        if project not in g.current_user.followed_projects().all():
            return bad_request('you are not the member of project')

        project_list = [project]

        payload = []
        for project in project_list:
            module_list = []
            for module in modules:
                api_list = []
                for api in module.apis.all():
                    api_data = api.to_dict()
                    api_list.append(api_data)
                module_data = {
                    'module_id': module.id,
                    'module_name': module.module_name,
                    'api_list': api_list
                }
                module_list.append(module_data)
            project_data = {
                'project_id': project.id,
                'project_name': project.project_name,
                'module_list': module_list
            }
            payload.append(project_data)

        data = {'Api_items': payload, 'meta': ''}

        response = trueReturn(data, 'special list success')
        return response