async def update(t_id: int, task: models.TaskInCase): try: task_obj = await models.Task.get(id=t_id) cases_obj = [await models.Case.get(id=case) for case in task.case_list] del task.case_list job_time = "待定" async with in_transaction(): await models.Task.filter(id=t_id).update(**task.dict(exclude_unset=True)) if task.is_timer: try: job = scheduler.modify_job( str(t_id), func=run_case, args=( t_id,), cron=task.cron) except Exception as e: print(e) job = scheduler.new_job( str(t_id), func=run_case, args=( t_id,), cron=task.cron) job_time = job.next_run_time else: try: scheduler.delete_job(str(task_obj.id)) except Exception as e: print(e) # 清除该对象与case的关系 await task_obj.cases.clear() # 添加关系 await task_obj.cases.add(*cases_obj) return core.Success(message=f"修改成功,下次运行时间{job_time}", data=await models.Task_Pydantic.from_queryset_single(models.Task.get(id=t_id))) except Exception as e: return core.Fail(message=f"修改失败.{e}")
async def select(e_id: int): try: data = await models.Env_Pydantic.from_queryset_single( models.Env.get(id=e_id)) return core.Success(data=data) except Exception as e: return core.Fail(message=f"查看详情失败.{e}")
async def create(env: models.EnvIn_Pydantic): try: env_obj = await models.Env.create(**env.dict(exclude_unset=True)) return core.Success( data=await models.Env_Pydantic.from_tortoise_orm(env_obj)) except Exception as e: return core.Fail(message=f"创建失败.{e}")
async def update(r_id: int, interface: models.InterfaceIn_Pydantic): await models.Interface.filter(id=r_id ).update(**interface.dict(exclude_unset=True) ) return core.Success( data=await models.Interface_Pydantic.from_queryset_single( models.Interface.get(id=r_id)))
async def update(e_id: int, env: models.EnvIn_Pydantic): try: await models.Env.filter(id=e_id).update(**env.dict(exclude_unset=True)) return core.Success( data=await models.Env_Pydantic.from_queryset_single( models.Env.get(id=e_id))) except Exception as e: return core.Fail(message=f"更新失败.{e}")
async def update_code(script: core.Code): # 验证是否可以被执行 try: exec(script.code) await write_file('util/extend.py', script.code) return core.Success() except Exception as e: return core.Fail(message=f"更新失败.{e}")
async def create(interface: models.InterfaceIn_Pydantic): try: interface_obj = await models.Interface.create(**interface.dict( exclude_unset=True)) return core.Success(data=await models.Interface_Pydantic. from_tortoise_orm(interface_obj)) except Exception as e: return core.Fail(message="创建失败.")
async def login(user: core.Login): try: user_obj = await models.User.get(username=user.username) if user_obj and core.verify_password(user.password, user_obj.password): return core.Success(data=core.Token( token=core.create_access_token({"sub": user_obj.username}))) except Exception as e: print(e) return core.Fail(message="用户名或密码错误")
async def select_all(limit: int = 10, page: int = 1): skip = (page - 1) * limit # from_queryset 针对queryset 对象序列化 data = await models.Env_Pydantic.from_queryset( models.Env.all().order_by('-created_at').offset(skip).limit(limit)) return core.Success(data={ "total": await models.Env.all().count(), "items": data })
async def delete(t_id: int): task_obj = await models.Task.filter(id=t_id).delete() print(task_obj == True) if task_obj: try: scheduler.delete_job(str(t_id)) except Exception as e: print(e) return core.Success() return core.Fail(message="任务不存在.")
async def create(project: models.ProjectIn_Pydantic): """ :param project: name 字段唯一 :return: """ try: project_obj = await models.Project.create(**project.dict(exclude_unset=True)) # from_tortoise_orm 从 数据表中序列化, 针对 模型类对象 return core.Success(data=await models.Project_Pydantic.from_tortoise_orm(project_obj)) except Exception as e: return core.Fail(message="项目已存在.")
async def create(task: models.TaskInCase): """ :param task: name 字段唯一 :return: """ # try: # # 获取case对象,如果没有将抛出异常 # cases_obj = [await models.Case.get(id=case) for case in task.case_list] # del task.case_list # # # 定时任务, 事务 async with in_transaction(): # # if task.is_timer: # trigger = scheduler.verif_cron(task.cron) # if trigger: # task_obj = await models.Task.create(**task.dict(exclude_unset=True)) # # 添加到多对多关系中 # await task_obj.cases.add(*cases_obj) # # job = scheduler.new_job(str(task_obj.id), func=run_case, args=( # task_obj.id,), trigger=trigger) # return core.Success(message=f"创建成功,下次运行的时间{job.next_run_time}") # else: # return core.Fail(message="corn表达式设置有误") # else: # task_obj = await models.Task.create(**task.dict(exclude_unset=True)) # # 添加到多对多关系中 # await task_obj.cases.add(*cases_obj) # return core.Success(data=await models.Task_Pydantic.from_tortoise_orm(task_obj)) # except Exception as e: # print(e) # return core.Fail(message="任务已存在.") try: # 事务来实现 cases_obj = [await models.Case.get(id=case) for case in task.case_list] del task.case_list job_time = "待定" async with in_transaction(): task_obj = await models.Task.create(**task.dict(exclude_unset=True)) if task.is_timer: job = scheduler.new_job(str(task_obj.id), func=run_case, args=( task_obj.id,), cron=task.cron) job_time = job.next_run_time await task_obj.cases.add(*cases_obj) return core.Success(message=f"创建成功,下次运行{job_time}") except Exception as e: return core.Fail(message=f"创建失败.{e}")
async def get_plant(): # 获取当天数据 总数 SELECT count(*) FROM project WHERE strftime('%Y-%m-%d', # created_at) = date('now') tables = ['project', 'env', 'interface', '"case"', 'task', 'report'] today = [] async with in_transaction("default") as conn: for table in tables: data = await conn.execute_query_dict( f"SELECT count(*) as total FROM {table} WHERE strftime('%Y-%m-%d', created_at) = date('now')" ) today.append(data[0]["total"]) return core.Success( data={ "project": len(await models.Project.all()), "report": await models.Report.all().count(), "interface": await models.Interface.all().count(), "case": await models.Case.all().count(), "task": await models.Task.all().count(), "today": today })
async def delete(r_id: int): interface_obj = await models.Interface.filter(id=r_id).delete() if interface_obj: return core.Success() return core.Fail(message="接口不存在.")
async def select(c_id: int): data = await models.Case_Pydantic.from_queryset_single( models.Case.get(id=c_id)) return core.Success(data=data)
async def get_code(): return core.Success(data=await read_file('util/extend.py'))
async def select(t_id: int): data = await models.Task_Pydantic.from_queryset_single(models.Task.get(id=t_id)) return core.Success(data=data)
async def select(p_id: int): data = await models.Project_Pydantic.from_queryset_single(models.Project.get(id=p_id)) return core.Success(data=data)
async def help_doc(): return core.Success(data=await read_file('apiAutoTestWeb使用说明.md'))
async def delete(r_id: int): report_obj = await models.Report.filter(id=r_id).delete() if report_obj: return core.Success() return core.Fail(message="报告不存在.")
async def background_run(t_id: int, background_tasks: BackgroundTasks): background_tasks.add_task(run_case, t_id) return core.Success(message="测试任务在后台运行中, 请稍后前往报告管理查看报告")
async def get(j_id: int): result = scheduler.get_job(str(j_id)) return core.Success(data=str(result))
async def delete(e_id: int): env_obj = await models.Env.filter(id=e_id).delete() if env_obj: return core.Success() return core.Fail(message="环境不存在.")
async def get_projects(): data = await models.Project_Pydantic.from_queryset(models.Project.all()) return core.Success(data={"total": len(data), "items": data})
async def delete(c_id: int): case_obj = await models.Case.filter(id=c_id).delete() if case_obj: return core.Success() return core.Fail(message="用例不存在.")
async def update(p_id: int, project: models.ProjectIn_Pydantic): await models.Project.filter(id=p_id).update(**project.dict(exclude_unset=True)) return core.Success(data=await models.Project_Pydantic.from_queryset_single(models.Project.get(id=p_id)))
async def select(r_id: int): data = await models.Interface_Pydantic.from_queryset_single( models.Interface.get(id=r_id)) return core.Success(data=data)
async def run(t_id: int): data = await run_case(t_id) return core.Success(data={"id": data})
async def get_cases(p_id: int): sql = f'select "case".id, "case".name, "case".interface_id from "case", interface WHERE interface.id = "case".interface_id AND interface.project_id ={p_id};' async with in_transaction("default") as conn: data = await conn.execute_query_dict(sql) return core.Success(data={"total": len(data), "items": data})
async def delete(p_id: int): project_obj = await models.Project.filter(id=p_id).delete() if project_obj: return core.Success() return core.Fail(message="项目不存在.")