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
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
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()
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()
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('邮件发送成功')
def email_strategy(self): return EmailStrategyEnum(self._email_strategy).value