示例#1
0
    def new_project(cls, form):
        project = cls.query.filter_by(name=form.name.data,
                                      delete_time=None).first()
        if project is not None:
            raise ParameterException(msg='工程已存在')
        # 新增分组的时候同时新增可查看当前用例组的人员。当出现问题时进行回滚,人员和分组都不插入
        try:
            project = Project()
            project.name = form.name.data
            project.server = form.server.data
            project.header = form.header.data
            project.info = form.info.data
            project.progress = 0
            project.type = ProjectTypeEnum(form.type.data)
            project.user = form.user.data
            project.running = False
            project.send_email = form.sendEmail.data
            project.email_strategy = EmailStrategyEnum(form.emailStrategy.data)
            project.copy_person = form.copyPerson.data
            db.session.add(project)
            db.session.flush()
            if form.users.data:
                for user in form.users.data:
                    user_auth = UserAuth()
                    user_auth.user_id = user
                    user_auth.auth_id = project.id
                    user_auth.type = UserAuthEnum.PROJECT
                    db.session.add(user_auth)
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            raise UnknownException(msg='新增异常 数据已回滚')

        return True
示例#2
0
    def edit_project(cls, pid, form):
        pid = int(pid)
        project = cls.query.filter_by(id=pid, delete_time=None).first_or_404()
        project.is_running()
        project.user_id_auth()
        # name 组内唯一 此处判断不允许重复
        project_by_name = cls.query.filter_by(name=form.name.data,
                                              delete_time=None).first()
        # 获取目标分组当前的授权人员
        old_user_auth = UserAuth.query.filter_by(
            auth_id=pid, _type=UserAuthEnum.PROJECT.value).all()
        old_users = [user.user_id for user in old_user_auth]
        # 新的授权人员
        new_users = form.users.data
        if project_by_name == project or project_by_name is None:
            try:
                project.id = pid
                project.name = form.name.data
                project.server = form.server.data
                project.header = form.header.data
                project.info = form.info.data
                project.send_email = form.sendEmail.data
                project.email_strategy = EmailStrategyEnum(
                    form.emailStrategy.data)
                project.copy_person = form.copyPerson.data
                # 维护人
                project.user = form.user.data
                if form.users.data is not None:
                    # 旧人员列表中有 新人员列表中没有,这部分删除
                    old = list(set(old_users).difference(set(new_users)))
                    if old:
                        for user_id in old:
                            user = UserAuth.query.filter_by(
                                user_id=user_id,
                                _type=UserAuthEnum.PROJECT.value,
                                auth_id=pid).first_or_404()
                            db.session.delete(user)
                    # 新人员列表中有 旧人员列表中没有,这部分新增
                    new = list(set(new_users).difference(set(old_users)))
                    if new:
                        for user_id in new:
                            user_auth = UserAuth()
                            user_auth.user_id = user_id
                            user_auth.auth_id = pid
                            user_auth.type = UserAuthEnum.PROJECT
                            db.session.add(user_auth)
                db.session.commit()
            except Exception as e:
                db.session.rollback()
                raise UnknownException(msg='新增异常请检查数据重试')
        elif project_by_name is not None:
            raise ParameterException(msg='工程已存在')

        return True
示例#3
0
 def edit_job(self, user, send_email, copy_person, cron, email_strategy):
     old_cron = self.cron
     # cron表达式有变动修改定时任务
     if old_cron != cron:
         self.modify_job(cron)
     self.user = user
     self.send_email = send_email
     self.copy_person = copy_person
     self.cron = cron
     self.email_strategy = EmailStrategyEnum(email_strategy)
     db.session.commit()
示例#4
0
 def add_scheduler(self, project_id, user, send_email, copy_person, cron,
                   email_strategy):
     self.project_id = project_id
     self.user = user
     self.state = True
     self.send_email = send_email
     self.copy_person = copy_person
     self.cron = cron
     self.email_strategy = EmailStrategyEnum(email_strategy)
     db.session.add(self)
     db.session.flush()
     self.create_scheduler_id()
     db.session.commit()
示例#5
0
def send_text_email(task_id, project_id, scheduler_id):
    task = Task.query.filter_by(id=task_id).first()
    # 判断测试结果
    if task.total == task.success and task.total > 0:
        task_result = True
    else:
        task_result = False

    project = Project.query.filter_by(id=project_id).first()
    if scheduler_id:
        from app.models.scheduler import Scheduler
        scheduler = Scheduler.query.filter_by(
            scheduler_id=scheduler_id).first()
        if scheduler.send_email:
            if EmailStrategyEnum(
                    scheduler.email_strategy
            ) == EmailStrategyEnum.SUCCESS and task_result is True:
                is_send = True
            elif EmailStrategyEnum(
                    scheduler.email_strategy
            ) == EmailStrategyEnum.FAIL and task_result is False:
                is_send = True
            elif EmailStrategyEnum(
                    scheduler.email_strategy) == EmailStrategyEnum.ALL:
                is_send = True
            else:
                is_send = False
        else:
            is_send = False

        # 收件人
        user = manager.user_model.query.filter_by(id=scheduler.user).first()
        # 抄送人 邮件列表
        copy_person_email = [
            manager.user_model.query.filter_by(id=uid).first().email
            for uid in scheduler.copy_person.split(',')
        ] if scheduler.copy_person else []
    else:
        if project.send_email:
            if EmailStrategyEnum(
                    project.email_strategy
            ) == EmailStrategyEnum.SUCCESS and task_result is True:
                is_send = True
            elif EmailStrategyEnum(
                    project.email_strategy
            ) == EmailStrategyEnum.FAIL and task_result is False:
                is_send = True
            elif EmailStrategyEnum(
                    project.email_strategy) == EmailStrategyEnum.ALL:
                is_send = True
            else:
                is_send = False
        else:
            is_send = False

        # 收件人
        user = manager.user_model.query.filter_by(id=project.user).first()
        # 抄送人 邮件列表
        copy_person_email = [
            manager.user_model.query.filter_by(id=uid).first().email
            for uid in project.copy_person.split(',')
        ] if project.copy_person else []

    # 不发送邮件
    if not is_send:
        return

    msg = Message(
        subject='接口自动化测试(' + project.name + ')',
        html=user.username +
        ',你好:<br><br><p style="text-indent: 2em;">接口自动化测试已完成,测试工程为' +
        project.name +
        '</p><br><br><p style="text-indent: 2em;">运行用例总数:<span style="color:#3963BC;font-weight:600">'
        + str(task.total) +
        '</span>,其中通过数:<span style="color:#00C292;font-weight:600">' +
        str(task.success) +
        '</span>,不通过数:<span style="color:#E46A76;font-weight:600">' +
        str(task.fail) + '</span>,通过率 ' +
        str(round(task.success / task.total, 2) * 100) +
        '%</p><br><br><p style="text-indent: 2em;">此次测试由' +
        manager.user_model.query.filter_by(
            id=task.create_user).first().username +
        '执行</p><br><br><span style="color:#CCCCCC">此邮件由接口自动化平台发送,请勿回复~</span>',
        sender=("自动化测试平台", '*****@*****.**'),
        recipients=[user.email],
        cc=copy_person_email)

    mail.send(msg)
    log.logger.info('邮件发送成功')
示例#6
0
 def email_strategy(self):
     return EmailStrategyEnum(self._email_strategy).value